亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? 用遺傳算法實現簡單的組合邏輯電路(四輸入
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <process.h>
#include <math.h>
#include <string.h>
/*******************************************************************
X1、X0、Y1、Y0四輸入
********************************************************************/
unsigned SHURU[16][4]=
{
	{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},
	{0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1},
	{1,0,0,0},{1,0,0,1},{1,0,1,0},{1,0,1,1},
	{1,1,0,0},{1,1,0,1},{1,1,1,0},{1,1,1,1}
};

unsigned ZZB[16][10]={0};

/********************************************************************
 全局變量 
********************************************************************/
struct individual                       /* 個體*/
{
    char *chrom;						/* 染色體 */
    double   fitness;                   /* 個體適應度 */
    int      xsite;                     /* 交叉位置 */
    int      parent[2];                 /* 父個體  */
	unsigned ZZ[16];                    /* 存儲編碼對應的真值表,以計算適應度 */
};
struct bestever                         /* 最佳個體*/
{
    char *chrom;						/* 最佳個體染色體*/
    double   fitness;                   /* 最佳個體適應度 */
    int      generation;                /* 最佳個體生成代 */
};
 struct individual *oldpop;             /* 當前代種群 */
 struct individual *newpop;             /* 新一代種群 */
 struct bestever *bestfit;              /* 最佳個體 */
 double sumfitness;                     /* 種群中個體適應度累計 */
 double max;                            /* 種群中個體最大適應度 */
 double avg;                            /* 種群中個體平均適應度 */
 double min;                            /* 種群中個體最小適應度 */
 float  pcross;                         /* 交叉概率 */
 float  pmutation;                      /* 變異概率 */
 unsigned    popsize;                   /* 種群大小  */
 unsigned    lchrom;                    /* 染色體長度*/
 unsigned    chromsize;                 /* 存儲一染色體所需字節數 */
 unsigned    gen;                       /* 當前世代數 */
 unsigned    maxgen;                    /* 最大世代數   */
 unsigned    run;                       /* 當前運行次數 */
 unsigned    maxruns;                   /* 總運行次數   */
 unsigned    printstrings;              /* 輸出染色體編碼的判斷,0 -- 不輸出, 1 -- 輸出 */
 unsigned    nmutation;                 /* 當前代變異發生次數 */
 unsigned    ncross;					/* 當前代交叉發生次數 */

/* 輸出文件指針 */
FILE *outfp,*outfp2,*infp ;
/********************************************************************
 函數定義 
*********************************************************************/
int flip(float);					/* 以一定概率產生0或1 */
int rnd(int, int);					/* 在整數low和high之間產生一個隨機整數 */
float randomperc();					/* 與庫函數random()作用相同, 產生[0,1]之間一個隨機數 */	
void initialize();					/* 遺傳算法初始化 */
void initdata();					/* 遺傳算法參數輸入 */
void initpop();						/* 隨機初始化種群 */
void initreport();					/* 初始參數輸出 */
void generation();                  /* 遺傳產生下一代 */
void initmalloc();					/* 為全局數據變量分配空間 */
void freeall();						/* 釋放內存空間 */
void nomemory(char *);				/* 內存不足,退出 */
void report();						/* 輸出種群統計結果 */
void writechrom(FILE *,char *);		/* 輸出染色體編碼 */
void preselect();                   /* 統計總的適應度,制作轉盤 */
void statistics(struct individual *);/* 計算種群統計數據 */
void repchar (FILE *,char *,int);    /* 在文件中輸出int個字符 */
void skip(FILE *,int);              /* 在輸出文件中換行 */
int  select();						/* 輪盤賭選擇 */
void calculateZZB(struct individual *);  /* 計算個體對應的真值表 */
void objfunc(struct individual *);	/* 計算適應度函數值 */
int  crossover (char *, char *, char *, char *);	/* 交叉操作 */
void mutation(char *);				/* 變異操作*/
void selectbest1(struct bestever *);/* 對適應度高的個體編碼進行簡化  */
void selectbest2();   /* 對適應度相同的個體編碼進行比較,存取最簡的 */

 /*******************************************************************
 遺傳算法初始化 
*********************************************************************/
void initialize()     
{
    /* 確定染色體的字節長度 */
    chromsize = (lchrom/(8*sizeof(char)));
    if(lchrom%(8*sizeof(char))) chromsize++;
    /*分配給全局數據結構空間 */
    initmalloc();
    /* 初始化全局計數變量和一些數值*/
    nmutation = 0;
    ncross = 0;
    bestfit[run].fitness = 0.0;
    bestfit[run].generation = 0;
    /* 初始化種群,并統計計算結果 */
    initpop();
    statistics(oldpop);
    initreport();
} 

/********************************************************************
 遺傳算法參數輸入 
*********************************************************************/
void initdata()           
{
	char  answer[2];
	printf("Enter the species size(20-2000):");
	scanf("%d", &popsize);
	if((popsize%2) != 0)
	{
		fprintf(outfp, "種群大小已設置為偶數\n");
		popsize++;
	}
	printf("Enter the chromosome length(9,18,27,36,54,63,72):");
	scanf("%d", &lchrom);
	printf("Whether output the whole chromosome encodings ?(y/n):");
	printstrings=1;
	scanf("%s", answer);
	if(strncmp(answer,"n",1) == 0) printstrings = 0;
	printf("Enter the largest number of generations(100-10000):");
	scanf("%d", &maxgen);
	printf("Enter the cross-rate(0.3-0.9):");   
	scanf("%f", &pcross);
	printf("Enter the mutation-rate(0.0001-0.1):");
	scanf("%f", &pmutation);
	printf("****** wait for the end ******");      
}

/********************************************************************
 隨機初始化種群 
*********************************************************************/
void initpop()           
{
    unsigned j, j1, k, stop;
    unsigned mask = 1;
    for(j = 0; j < popsize; j++)
    {
        stop =4*sizeof(char);
        for(k = 0; k < chromsize-1; k++)
        {
            oldpop[j].chrom[k] = 0;            
            for(j1 = 1; j1 <= stop; j1++)
            {
				if(flip(0.5))
				{
					oldpop[j].chrom[k] = oldpop[j].chrom[k]|mask;
					oldpop[j].chrom[k] = oldpop[j].chrom[k]<<2;
				}
				else
				{
					oldpop[j].chrom[k] = oldpop[j].chrom[k]<<1;
					oldpop[j].chrom[k] = oldpop[j].chrom[k]|mask;
					oldpop[j].chrom[k] = oldpop[j].chrom[k]<<1;
				}
            }
        }
		stop = lchrom - (k*(8*sizeof(char)));
		for(j1 = 0; j1 < stop; j1++)
		{
			oldpop[j].chrom[k] = oldpop[j].chrom[k]<<1;
			if(flip(0.5))
				oldpop[j].chrom[k] = oldpop[j].chrom[k]|mask;
		}
        oldpop[j].parent[0] = 0;     /* 初始父個體信息 */
        oldpop[j].parent[1] = 0;
        oldpop[j].xsite = 0;
		calculateZZB(&(oldpop[j]));
        objfunc(&(oldpop[j]));       /* 計算初始適應度*/
    }
}

/********************************************************************
 初始參數輸出 
*********************************************************************/
void initreport()               
{
    void   skip();
    skip(outfp,1);
    fprintf(outfp,"             基本遺傳算法參數\n");
    fprintf(outfp," -------------------------------------------------\n");
    fprintf(outfp,"    種群大小(popsize)     =   %d\n",popsize);
    fprintf(outfp,"    染色體長度(lchrom)    =   %d\n",lchrom);
    fprintf(outfp,"    最大進化代數(maxgen)  =   %d\n",maxgen);
    fprintf(outfp,"    交叉概率(pcross)        = %f\n", pcross);
    fprintf(outfp,"    變異概率(pmutation)     = %f\n", pmutation);
    fprintf(outfp," -------------------------------------------------\n");
    skip(outfp,1);
    fflush(outfp);
}

/********************************************************************
 遺傳產生下一代 
*********************************************************************/
void generation()
{
	unsigned mate1, mate2, jcross, j = 0;
	/*  每代運算前進行預選 */
	preselect();
	/* 選擇, 交叉, 變異 */
	do
    {
      /* 挑選交叉配對 */
      mate1 = select();
      mate2 = select();
      /* 交叉和變異 */
      jcross = crossover(oldpop[mate1].chrom, oldpop[mate2].chrom, newpop[j].chrom, newpop[j+1].chrom);
      mutation(newpop[j].chrom);
      mutation(newpop[j+1].chrom);
      /* 解碼, 計算適應度 */
	  calculateZZB(&(newpop[j]));
      objfunc(&(newpop[j]));
      /*記錄親子關系和交叉位置 */
      newpop[j].parent[0] = mate1+1;
      newpop[j].xsite = jcross;
      newpop[j].parent[1] = mate2+1;
	  calculateZZB(&(newpop[j+1]));
      objfunc(&(newpop[j+1]));
      newpop[j+1].parent[0] = mate1+1;
      newpop[j+1].xsite = jcross;
      newpop[j+1].parent[1] = mate2+1;
      j = j + 2;
    }
	while(j < (popsize-1));
}

/********************************************************************
為全局數據變量分配空間 
*********************************************************************/
void initmalloc()              
{
	unsigned nbytes;
	unsigned j;
	/* 分配給當前代和新一代種群內存空間 */
	nbytes = popsize*sizeof(struct individual);
	if((oldpop = (struct individual *) malloc(nbytes)) == NULL)
		nomemory("oldpop");
	if((newpop = (struct individual *) malloc(nbytes)) == NULL)
		nomemory("newpop");
	/* 分配給染色體內存空間 */
	nbytes = chromsize*sizeof(char);
	for(j = 0; j < popsize; j++)
    {
		if((oldpop[j].chrom = (char *) malloc(nbytes)) == NULL)
			nomemory("oldpop chromosomes");
		if((newpop[j].chrom = (char *) malloc(nbytes)) == NULL)
			nomemory("newpop chromosomes");
	}
	for(j = 0; j < maxruns+1; j++)
	{
		if((bestfit[j].chrom = (char *) malloc(nbytes)) == NULL)
			nomemory("bestfit chromosome");
	}
}

/********************************************************************
 釋放內存空間 
*********************************************************************/
void freeall()               
{
	unsigned i;
	for(i = 0; i < popsize; i++)
	{
		free(oldpop[i].chrom);
		free(newpop[i].chrom);
	}
	free(oldpop);
	free(newpop);
	free(bestfit[run].chrom);
}

/********************************************************************
 內存不足,退出
*********************************************************************/
void nomemory(char *string)        
{
	fprintf(outfp,"malloc: out of memory making %s!!\n",string);
	exit(-1);
}

/********************************************************************
 輸出種群統計結果 
*********************************************************************/
void report()                
{
    void  repchar(), skip();
    void  writepop();
    repchar(outfp,"-",80);
    skip(outfp,1); 
    if(printstrings == 1)
    {
        repchar(outfp," ",((80-17)/2));
        fprintf(outfp,"模擬計算統計報告  \n");
        fprintf(outfp, "世代數 %3d", gen);
        repchar(outfp," ",(80-28));
        fprintf(outfp, "世代數 %3d\n", (gen+1));
        fprintf(outfp,"個體  染色體編碼");
        repchar(outfp," ",lchrom-5);
        fprintf(outfp,"適應度    父個體 交叉位置  ");
        fprintf(outfp,"染色體編碼 ");
        repchar(outfp," ",lchrom-5);
        fprintf(outfp,"適應度\n");
        repchar(outfp,"-",80);
        skip(outfp,1);
        writepop(outfp);
        repchar(outfp,"-",80);
        skip(outfp,1);
	}
    fprintf(outfp,"第 %d 代統計: \n",gen+1);
    fprintf(outfp,"總交叉操作次數 = %d, 總變異操作數 = %d\n",ncross,nmutation);
    fprintf(outfp," 最小適應度:%f 最大適應度:%f  平均適應度 %f\n", min,max,avg);
    fprintf(outfp," 迄今發現最佳個體 =>  所在代數: %d  ", bestfit[run].generation);
    fprintf(outfp," 適應度:%f  染色體:", bestfit[run].fitness);
    writechrom(outfp,(&bestfit[run])->chrom);
    skip(outfp,1);
    repchar(outfp,"-",80);
    skip(outfp,1);
	fflush(outfp);
}

/********************************************************************
輸出種群所有個體的染色體編碼
*********************************************************************/
void writepop()
{
	struct individual *pind;
    unsigned j;
    for(j=0; j<popsize; j++)
    {
        fprintf(outfp,"%3d)  ",j+1);
        /* 當前代個體 */
        pind = &(oldpop[j]);
        writechrom(outfp,pind->chrom);
        fprintf(outfp,"  %8f | ", pind->fitness);
        /* 新一代個體 */
        pind = &(newpop[j]);
        fprintf(outfp,"(%2d,%2d)   %2d   ",
        pind->parent[0], pind->parent[1], pind->xsite);
        writechrom(outfp,pind->chrom);
        fprintf(outfp,"  %8f\n", pind->fitness);
    }
	fflush(outfp);
}

/********************************************************************
 輸出染色體編碼 
*********************************************************************/
void writechrom(FILE *fp,char *chrom)           
{
	unsigned j, k, stop;
    unsigned mask = 0x80, tmp;
    for(k = 0; k < chromsize; k++)
    {
        tmp = chrom[k];
        if(k == (chromsize-1))
		{
            stop = lchrom - (k*(8*sizeof(char)));
			mask = mask >>((8*sizeof(char))-stop);
		}
		else
            stop =8*sizeof(char);
        for(j = 0; j < stop; j++)
        {
            if(tmp&mask)
                fprintf(fp,"1");
            else
                fprintf(fp,"0");
            tmp = tmp<<1;
      }
      fprintf(fp," ");
    }
}

/********************************************************************
統計總的適應度,制作轉盤
*********************************************************************/
void preselect()

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品国产免费网站| av在线一区二区| 中文字幕在线不卡一区二区三区 | 亚洲第一福利视频在线| 久久影音资源网| 欧美日韩视频专区在线播放| 国产激情偷乱视频一区二区三区| 亚洲午夜精品网| 国产精品成人一区二区三区夜夜夜| 欧美美女网站色| 色婷婷综合久久久中文字幕| 国产精品自产自拍| 蜜臀av一区二区| 亚洲综合免费观看高清完整版在线| 亚洲一级二级三级在线免费观看| 中文字幕乱码亚洲精品一区| 欧美刺激午夜性久久久久久久| 欧美在线视频不卡| 色综合天天综合狠狠| 福利视频网站一区二区三区| 麻豆精品久久精品色综合| 亚洲成人午夜影院| 亚洲一区二区在线免费观看视频| 国产精品久久久久一区二区三区共| 日韩女同互慰一区二区| 91 com成人网| 欧美人与禽zozo性伦| 色哦色哦哦色天天综合| av成人免费在线| 成人av在线网| 成人午夜激情片| 成人一区在线看| 国产大陆精品国产| 国产成人综合在线观看| 国产一区二区免费视频| 韩国v欧美v日本v亚洲v| 国产综合成人久久大片91| 六月婷婷色综合| 国产真实精品久久二三区| 美女视频一区二区三区| 免费的国产精品| 麻豆91精品91久久久的内涵| 欧美aⅴ一区二区三区视频| 日本一区中文字幕| 久久精品国产精品青草| 日韩精品成人一区二区三区| 日韩avvvv在线播放| 日本不卡视频在线观看| 免费日韩伦理电影| 看电影不卡的网站| 国产高清不卡一区二区| 成人丝袜视频网| 97久久超碰精品国产| 国产午夜精品理论片a级大结局| 久久久久久久久免费| 国产日韩亚洲欧美综合| 国产精品乱子久久久久| 亚洲精品视频一区| 亚洲午夜av在线| 久久成人久久鬼色| 国产成人精品一区二区三区网站观看 | 色av一区二区| 欧美另类z0zxhd电影| 亚洲精品在线免费观看视频| 亚洲国产精品成人综合| 亚洲男人的天堂网| 婷婷亚洲久悠悠色悠在线播放| 免费久久99精品国产| 国产v综合v亚洲欧| 色婷婷综合视频在线观看| 欧美日韩电影一区| 久久综合色8888| 亚洲精品伦理在线| 麻豆91精品91久久久的内涵| 成人午夜视频网站| 欧美三级一区二区| 久久精品人人做人人综合 | 亚洲欧美激情插| 青青草精品视频| 成人av动漫在线| 欧美日韩成人在线| 国产日韩精品一区二区三区| 亚洲欧美激情插| 韩日av一区二区| 欧美主播一区二区三区| 久久综合国产精品| 亚洲综合在线观看视频| 激情另类小说区图片区视频区| 国产午夜一区二区三区| 亚洲曰韩产成在线| 国产高清在线精品| 欧美精品v国产精品v日韩精品| 国产日产精品1区| 日韩不卡一区二区| 91欧美一区二区| 久久色.com| 日韩中文字幕亚洲一区二区va在线| 国产成人99久久亚洲综合精品| 欧美久久久久久久久| 亚洲欧洲无码一区二区三区| 精品一区免费av| 欧美日韩国产综合视频在线观看 | 欧美大片顶级少妇| 亚洲已满18点击进入久久| 国产精品 日产精品 欧美精品| 欧美日韩一区二区在线视频| 国产精品久久久久久户外露出 | 91丨九色丨国产丨porny| 欧美精品一区二区三区蜜桃| 一二三区精品福利视频| 成年人国产精品| 国产亚洲人成网站| 奇米色一区二区| 欧美体内she精高潮| 中文字幕日韩精品一区| 国产精品一区在线| 精品粉嫩超白一线天av| 日韩国产精品大片| 欧美丝袜自拍制服另类| 亚洲欧美日韩久久精品| 成人黄色小视频在线观看| 久久久亚洲欧洲日产国码αv| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美性xxxxxxxx| 亚洲午夜三级在线| 国产精品女上位| 国产精品白丝jk白祙喷水网站| 日韩欧美你懂的| 蜜臀av一区二区| 欧美本精品男人aⅴ天堂| 日韩国产欧美在线视频| 欧美精品日日鲁夜夜添| 午夜成人在线视频| 欧美一区日韩一区| 日本一道高清亚洲日美韩| 在线不卡a资源高清| 日本美女一区二区三区| 欧美一区二区精品| 卡一卡二国产精品 | 亚洲女与黑人做爰| 色综合久久久久| 一区二区三区四区亚洲| 在线看国产一区| 亚洲午夜羞羞片| 3d动漫精品啪啪| 麻豆免费精品视频| 久久免费的精品国产v∧| 国产美女一区二区| 国产精品视频在线看| 99久久精品费精品国产一区二区 | 久久国产三级精品| 久久在线免费观看| 丰满放荡岳乱妇91ww| 国产精品成人免费精品自在线观看| 9色porny自拍视频一区二区| 亚洲欧美日韩成人高清在线一区| 日本道色综合久久| 视频一区免费在线观看| 日韩精品一区二| 国产二区国产一区在线观看| 中文字幕亚洲视频| 欧美剧在线免费观看网站| 久久精品国产99久久6| 国产女主播视频一区二区| 99九九99九九九视频精品| 亚洲国产综合视频在线观看| 日韩亚洲欧美中文三级| 高清成人在线观看| 一区二区高清在线| 欧美成人在线直播| 北岛玲一区二区三区四区| 亚洲va欧美va国产va天堂影院| 日韩精品一区在线观看| av激情亚洲男人天堂| 五月天亚洲精品| 国产欧美久久久精品影院| 欧美三区免费完整视频在线观看| 热久久免费视频| 成人免费一区二区三区视频 | 成人精品国产福利| 日韩精品乱码免费| 国产精品美女久久久久久久久久久| 在线观看日韩高清av| 九一九一国产精品| 亚洲精品成人天堂一二三| 日韩视频免费观看高清完整版在线观看| 国产91精品精华液一区二区三区 | 亚洲三级在线免费| 日韩欧美国产电影| 色天天综合色天天久久| 欧美日韩小视频| 国产传媒久久文化传媒| 天天影视涩香欲综合网| 中文字幕亚洲电影| 欧美成人伊人久久综合网| 91麻豆免费在线观看| 国产精品一区在线| 免费在线视频一区| 亚洲一区二区欧美日韩 | 国产欧美视频一区二区|