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

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

?? sga.cpp

?? 學習遺傳算法的標準入門程序,這是我當初入門的時候用的。
?? CPP
字號:
//2004100037 04級計算機科學與技術 蘇志昌
//  ==================================================================*/
#include<iostream.h> //cout
#include<stdio.h>    //exit(1), fopen(), fread(), fwrite()
#include<stdlib.h>   //rand(),abs()
#include<time.h>     //time_t,time(), difftime()
#include<math.h>     //srand(),difftime(),pow(),sina()
#include<conio.h>    //_getch() which is for debuging
#include<iomanip.h>  //setprecision() which is for debuging

const int xlen=21;
const int ylen=21;
const int  chromlen=xlen+ylen;    //21 bits for x and 21 bits for y
const int maxgeneration=100;
int generation;
const int popsize=150;
const int competepopsize=popsize;
const int elitepopsize=10;//only 90% of the population will be replaced
double result[maxgeneration+1];
double HAMINGdistance[maxgeneration];
double  crossprob=0.8;    
double mutatprob=0.05;     
struct individual
{
	unsigned char chrom[chromlen];	
	double x;
	double y;
	double fitness;
};
individual pop[popsize];
individual competepop[competepopsize];
individual bestind;
int beselected[popsize];//save the selectee's indexes
double AHD[maxgeneration+1];

void gen_pop();
void evaluatepop();
void selection();
void crossover();
void mutation();
void decodechrom();
void calfitnessvalue();
void calhamingdistance();
void update();

FILE *file1;   //for text file of result
FILE *file2;   //for binary file of result
FILE *fileAHD;//the binary file of average haming distance

void main()
{
	file1 = fopen("result.txt", "a+");
    if (file1 == NULL)
	{
        cerr << "Result's text file opened fail!" << endl;
		exit(1);
	}
	file2 = fopen("SGAbiresult", "w");
    if (file2 == NULL)
	{
        cerr << "Result's binary file opened fail!" << endl;
		exit(1);
	}
	fileAHD = fopen("AHD", "wb");
    if (fileAHD == NULL)
	{
        cerr << "AHD's binary file opened fail!" << endl;
		exit(1);
	}
   	time_t begin,end;
	time(&begin);
	srand(begin);	
	result[0]=0;
	AHD[0]=chromlen;
	generation=0;
	gen_ini_pop();
	calhamingdistance();
	evaluatepop();   
	for(generation=1; generation<maxgeneration; ++generation)
	{
		selection();
		crossover();
		mutation();
		decodechrom();	
		calfitnessvalue();
		calhamingdistance();
		update();
		evaluatepop();
	}			
	time(&end);
	double elapsed=difftime(end,begin);	
	cout<<"time in seconds: "<<elapsed<<endl;
	fprintf(file1,"time in seconds: %f\n",elapsed);
	fprintf(file1,"maxigeneration=%d\n\n\n",maxgeneration);
	fclose(file1);
	fwrite(result, sizeof(result), 1, file2);
	fclose(file2);
	fwrite(AHD, sizeof(AHD), 1, fileAHD);
	fclose(fileAHD);
}

void gen_ini_pop()
{	
	int popmem;
	int index;	
	double temp;
	double x;
	double y;
	double x2y2;	
	//==&1 generate the inipopulation's chromsome
	for(popmem=0; popmem<popsize; ++popmem)
	{
		for(index=0; index<chromlen; ++index)
			if(rand()/(double)RAND_MAX<0.5)
				pop[popmem].chrom[index]=0;
			else
				pop[popmem].chrom[index]=1;
	}
			
	//==&2 decode the chromsome		
	for(popmem=0; popmem<popsize; ++popmem)
	{
		temp=0;
		for(index=0;index<xlen;++index)
			temp=temp*2+(unsigned int)(pop[popmem].chrom[index]);
		pop[popmem].x=temp/10000.0-100;
		temp=0;
		for(index=xlen;index<xlen+ylen;++index)
			temp=temp*2+(unsigned int)(pop[popmem].chrom[index]);
		pop[popmem].y=temp/10000.0-100;

	}
	//==&3 calculate the inipopulation's fitness	
	for(popmem=0; popmem<popsize; ++popmem)
	{	
			x=pop[popmem].x;
			y=pop[popmem].y;
			x2y2=x*x+y*y;
			pop[popmem].fitness=0.5-
				(pow(sin(pow(x2y2, 0.5)),2)-0.5)/(pow((1+0.001*x2y2),2));
	}
}

void evaluatepop()
//operate on pop[]
{ 
	int popmem;
	int tempbetter;
	int i, j, k;
	double hamiDistSum;
	
	tempbetter=0;
	for(popmem=1; popmem<popsize; ++popmem)
		if(pop[tempbetter].fitness<pop[popmem].fitness)
			tempbetter=popmem;
	if(pop[tempbetter].fitness>bestind.fitness)
		bestind=pop[tempbetter];
	else
		pop[tempbetter]=bestind;
		
	
	//============debug bigin==================================================
	
	
	for(int ii=0; ii<popsize; ++ii)
	{
	//	cout<<pop[ii].fitness<<endl;
	//	getch();
	}
	for(int tt=0; tt<chromlen/2; ++tt)
		cout<<(int)bestind.chrom[tt];
		cout<<"   "<<bestind.x<<endl;
	for(tt=chromlen/2; tt<chromlen; ++tt)
		cout<<(int)bestind.chrom[tt];
	cout<<"   "<<bestind.y<<endl;	
	cout<<"HAMING distance="<<HAMINGdistance[generation]<<endl;
	printf("in %dth generation,   ", generation+1);
	printf("bestfitness=%f\n",bestind.fitness);	
   // getch();
	//Calculate average haming distance
	hamiDistSum=0;
	for(i=0; i<popsize; i++)
		for(j=0; j<popsize; j++)
			if(j!=i)
			{
				for(k=0; k<chromlen; k++)
					if(pop[i].chrom[k]!=pop[j].chrom[k])
						hamiDistSum++;
			}
	AHD[generation+1]=hamiDistSum/(popsize*(popsize-1));


	
	//===========debug end=====================================================	
	

	//==&6 output and save the best fitness of the individuals
	result[generation+1]=bestind.fitness;
	fprintf(file1,"in %dth generation  ",generation+1);	
	fprintf(file1,"bestfitest=%f\n",bestind.fitness);		
	
    //  getch();   //debug
//	cout<<endl;
}

void selection()
//operate on pop[]
{
	int popmem;
	int index;
	double sum;
	double cfitness[popsize];//cumulatie fitness value	

	//calculate relative fitness
	sum=0;
	for(popmem=0;popmem<popsize;++popmem)
		sum+=pop[popmem].fitness;
	for(popmem=0;popmem<popsize;++popmem)
		cfitness[popmem]=pop[popmem].fitness/sum;

	//calculate cumulative fitness
	for(popmem=1;popmem<popsize;++popmem)
		cfitness[popmem]+=cfitness[popmem-1];
	
	//selection operation	
	for(popmem=0;popmem<popsize;++popmem)
	{
		index=0;
		while(rand()/(double)RAND_MAX>cfitness[index])
			++index;
		beselected[popmem]=index;
	}
}

void crossover()
// operate on pop[] 
// to get competepop[]
{	
	int popmem;		
	int temp1;
	int temp2;			
	int crossoverpoint;	
	int competepopmem;	
	int index;
	for(popmem=0; popmem<popsize; popmem+=2)
	{
		//determine the distance between the two individuals in a douple
		temp2=rand()%(popsize-popmem);
		//each individual and it's next one form a couple
		temp1=beselected[popmem+1];
		beselected[popmem+1]=beselected[popmem+temp2];
		beselected[popmem+temp2]=temp1;	
	}			
	for(competepopmem=0, popmem=0; 
	    popmem<popsize; 
		popmem+=2, competepopmem+=2)
	{
		if(rand()/(double)RAND_MAX<crossprob)
		{
			crossoverpoint=int(rand()*chromlen/RAND_MAX);
			for(index=0; index<crossoverpoint; ++index)
			{
				competepop[competepopmem].chrom[index]
					=pop[beselected[popmem/2]].chrom[index];
				competepop[competepopmem+1].chrom[index]
					=pop[beselected[popmem/2+1]].chrom[index];
			}
			for(index=crossoverpoint; index<chromlen; ++index)
			{
				competepop[competepopmem].chrom[index]
					=pop[beselected[popmem/2+1]].chrom[index];
				competepop[competepopmem+1].chrom[index]
					=pop[beselected[popmem/2]].chrom[index];
			}
		}
		else
		{
			for(index=0; index<chromlen; ++index)
			{
				competepop[competepopmem].chrom[index]
					=pop[beselected[popmem/2]].chrom[index];
				competepop[competepopmem+1].chrom[index]
					=pop[beselected[popmem/2+1]].chrom[index];
			}

		}
		
	}
}

void mutation()
//operate on competepop[]
{
	int competepopmem;	
	int gen;
	for(competepopmem=0;
	    competepopmem<popsize;
		++competepopmem)
			for(gen=0; gen<chromlen; ++gen)
				if(rand()/(double)RAND_MAX<mutatprob)
					if(competepop[competepopmem].chrom[gen]==0)
						competepop[competepopmem].chrom[gen]=1;
					else
						competepop[competepopmem].chrom[gen]=0;
}

void decodechrom()
//operate on competepop[]
{
	double temp;
	int competepopmem;
	int i;
	for(competepopmem=0; 
	    competepopmem<competepopsize;
		++competepopmem)
	{
		temp=0;
		for(i=0;i<xlen;++i)
			temp=temp*2+(unsigned int)competepop[competepopmem].chrom[i];		
		competepop[competepopmem].x=temp/10000.0-100;
		
		temp=0;
		for(i=xlen; i<xlen+ylen; ++i)
			temp=temp*2+(unsigned int)competepop[competepopmem].chrom[i];		 
		competepop[competepopmem].y=temp/10000.0-100;
		}
}

void calfitnessvalue()
//operate on competepop[]
{
	double x,y,x2y2;
	int competpopmem;
	for(competpopmem=0;
	    competpopmem<competepopsize;
		++competpopmem)
	{	
			x=competepop[competpopmem].x;
			y=competepop[competpopmem].y;
			x2y2=x*x+y*y;
			competepop[competpopmem].fitness=0.5-
				(pow(sin(pow(x2y2, 0.5)),2)-0.5)/(pow((1+0.001*x2y2),2));
		}
}

void update()
// operate on competepop[]
// to get pop[]
{
	int popmem;	
	int candicate;
	int comp;
	individual tempind;
	// get the next population by
	// transfer the individual from competepop to pop	
	for(popmem=elitepopsize;
	    popmem<popsize; 
		++popmem)
			pop[popmem]=competepop[popmem];	
		
	for(popmem=0; popmem<elitepopsize; ++popmem)
	{
		candicate=popmem;
		for(comp=candicate+1; comp<popsize; ++comp)
			if(pop[candicate].fitness<pop[comp].fitness)
				candicate=comp;
		tempind=pop[popmem];
		pop[popmem]=pop[candicate];
		pop[candicate]=tempind;
	}   
}
void calhamingdistance()
{
	double sum=0;
	int gen;
	int popmem;	
	for(popmem=0; popmem<popsize; ++popmem)
		for(gen=0; gen<chromlen; ++gen)
				if(pop[popmem].chrom[gen]!=bestind.chrom[gen])
					++sum;
	HAMINGdistance[generation]=sum/((double)popsize);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩电影一区| 亚洲欧美综合在线精品| 色婷婷综合久久久| 欧美剧在线免费观看网站| 69堂精品视频| 国产三级久久久| 91精品国产综合久久香蕉的特点| 欧美精品一区男女天堂| 亚洲免费观看在线视频| 奇米精品一区二区三区在线观看| 国产成人av电影在线| 欧美性色综合网| 国产日韩影视精品| 亚洲大片在线观看| 成人免费毛片app| 欧美日本视频在线| 国产欧美综合色| 婷婷夜色潮精品综合在线| 国产v综合v亚洲欧| 欧美一区二区三区性视频| 国产精品久久精品日日| 日韩精品乱码免费| 一本久久精品一区二区| 久久综合久久综合亚洲| 国产精品久线在线观看| 亚洲福利视频一区二区| 成人在线视频首页| 精品久久久久久久一区二区蜜臀| 有码一区二区三区| 成人免费视频一区二区| 精品国内二区三区| 五月综合激情网| 99久久免费国产| 欧美精品一区在线观看| 蜜臀av国产精品久久久久| 欧美网站大全在线观看| 国产精品第13页| 国产999精品久久| 日韩欧美一级二级三级| 天天免费综合色| 91浏览器入口在线观看| 国产情人综合久久777777| 激情文学综合丁香| 日韩欧美一级特黄在线播放| 午夜精品视频在线观看| 色婷婷综合久色| 亚洲色图在线看| 99久久99久久久精品齐齐| 久久久www成人免费毛片麻豆| 激情欧美日韩一区二区| 精品久久久久久亚洲综合网| 人妖欧美一区二区| 欧美一区二区三区视频| 日韩精品色哟哟| 7777女厕盗摄久久久| 三级欧美在线一区| 欧美精品乱人伦久久久久久| 亚洲3atv精品一区二区三区| 欧美视频一区二区在线观看| 亚洲一区在线观看视频| 欧美午夜精品理论片a级按摩| 亚洲主播在线观看| 8v天堂国产在线一区二区| 亚洲午夜在线电影| 7777精品伊人久久久大香线蕉的 | 欧美一区二区在线视频| 午夜电影一区二区| 色www精品视频在线观看| 亚洲国产欧美在线人成| 91精品国产麻豆国产自产在线| 免费观看久久久4p| 国产亚洲综合在线| 99视频国产精品| 亚洲综合色在线| 久久蜜臀精品av| av激情综合网| 亚洲亚洲人成综合网络| 91精品国产综合久久久久久久| 精品一区二区三区在线视频| 中文久久乱码一区二区| 99视频在线精品| 视频在线观看一区| 久久久久久久久一| 色综合欧美在线视频区| 日韩av二区在线播放| 久久精品人人做人人综合| 972aa.com艺术欧美| 一区二区三区四区亚洲| 欧美成人猛片aaaaaaa| 丁香一区二区三区| 亚洲国产精品人人做人人爽| 久久无码av三级| 色8久久人人97超碰香蕉987| 老司机精品视频导航| 亚洲天堂福利av| 日韩女优电影在线观看| 91丨九色porny丨蝌蚪| 免费成人av资源网| 国产精品久久久久7777按摩| 678五月天丁香亚洲综合网| 成人av在线影院| 男女男精品视频网| 亚洲免费观看高清| 久久久三级国产网站| 欧美顶级少妇做爰| 91啪九色porn原创视频在线观看| 黄色小说综合网站| 亚洲午夜久久久久久久久电影院| 精品sm在线观看| 欧美日韩国产在线观看| 丰满亚洲少妇av| 看电视剧不卡顿的网站| 一区二区三区日本| 国产精品污www在线观看| 欧美日韩精品二区第二页| 99久久伊人久久99| 国产精品1区2区3区在线观看| 日韩av一区二区在线影视| 亚洲一区视频在线观看视频| 国产欧美一区二区精品性色| 欧美成人aa大片| 欧美理论在线播放| 欧美日韩久久不卡| 91麻豆精品在线观看| 国产成人精品www牛牛影视| 精品影视av免费| 丁香婷婷综合色啪| 成人网在线免费视频| 91同城在线观看| 欧美日韩情趣电影| 欧美老女人在线| 日韩精品一区国产麻豆| 久久午夜色播影院免费高清| 国产精品污www在线观看| 亚洲男人天堂av| 偷拍亚洲欧洲综合| 狠狠色综合播放一区二区| 成人一区二区三区中文字幕| 91麻豆免费在线观看| 欧美精品黑人性xxxx| 亚洲区小说区图片区qvod| 亚洲二区视频在线| 黑人巨大精品欧美黑白配亚洲| 国产v日产∨综合v精品视频| 色88888久久久久久影院野外 | 欧美一区二区高清| 国产亚洲欧美日韩日本| 亚洲欧美色一区| 久久机这里只有精品| 97久久精品人人做人人爽50路| 欧美日韩精品一区二区三区蜜桃 | 欧美伊人久久久久久久久影院| 日韩一级视频免费观看在线| 国产欧美精品一区| 首页国产欧美久久| 99免费精品视频| 日韩欧美中文一区| 亚洲欧美激情视频在线观看一区二区三区| 婷婷亚洲久悠悠色悠在线播放| 国产老妇另类xxxxx| 欧美精品日日鲁夜夜添| 国产精品欧美一级免费| 男男成人高潮片免费网站| 99久久综合精品| 久久伊99综合婷婷久久伊| 亚洲成人动漫一区| 波多野结衣在线一区| 日韩欧美色综合| 亚洲色图色小说| 国产精品一区不卡| 日韩欧美一级精品久久| 一区二区三区在线不卡| 成人美女视频在线观看18| 日韩欧美资源站| 亚洲韩国精品一区| 99精品视频一区| 国产日韩在线不卡| 久久91精品国产91久久小草| 欧美吞精做爰啪啪高潮| 亚洲人吸女人奶水| 国产成人日日夜夜| 欧美成人高清电影在线| 爽好多水快深点欧美视频| 色狠狠一区二区| 国产精品国产三级国产有无不卡| 久久不见久久见免费视频1| 欧美日韩精品久久久| 一级中文字幕一区二区| 成人a区在线观看| 亚洲国产岛国毛片在线| 国产成人综合视频| 久久这里只精品最新地址| 免费久久精品视频| 欧美一区永久视频免费观看| 天天综合日日夜夜精品| 欧美日韩黄色影视| 日本伊人午夜精品| 欧美一级理论片| 免费看欧美女人艹b| 日韩欧美美女一区二区三区|