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

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

?? sga.c

?? 標準遺傳算法源碼 C語言編程 求解函數優化問題。
?? C
字號:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

//						Code by .御米.
//						DarkThorn@163.com
//						http://blog.donews.com/6lines

#define MAXPOP 200
#define MAXSTR 64

#define DEFPOPSIZ 50	//default pop size, value domain:	[2,200]
#define DEFCHRLEN 22	//default chrom length:				[2,63]
#define DEFMAXGEN 100	//default max generation:			[1,65535]
#define DEFPC 0.25	//default crossover probability:		[0.0,1.0]
#define DEFPM 0.01f	//default mutation probability:			[0.0,1.0]

typedef struct population
{
	unsigned chrom[MAXSTR];
	float x,fitness;				//x: value of chrom
	unsigned parent1,parent2,xsite;
}POP;


	unsigned nPopSize,nMutation,nCross,nXcross,nRndIdx;
	float fPc,fPm,fSumFit,fAvgFit,fRand[MAXPOP];
	double coef;


	POP *pOldPop,*pNewPop,*pPop;
	unsigned nChromLen,nGen,nMaxGen,nMaxPop,nMinPop,nTxt;
	float fMaxFit,fMinFit;

	void InitData();

	int Flip(float probabiliby);
	float Random();		//generate a pseudorandom integer from 0 to 1
	void ResetRandom();	//reset pseudorandom integer array fRand

	float ObjFunc(float vx);
	float DeCode(unsigned * pChrom);

	void StatPop(POP * pop);
	void InitPop();		//initialize population
	void InitReport();   //initial info report

	unsigned Select();
	int Mutation(unsigned chromval);
	int CrossOver(unsigned * parent1,unsigned * parent2,int popidx);
	void UpdateGen();

	void Report(int gen);


int main()
{
	float oldmaxfit;
	int oldmaxpp;
	unsigned i;

	InitData();
	InitPop();
	InitReport();
	pPop=pNewPop;
	pNewPop=pOldPop;
	StatPop(pNewPop);
	Report(nGen);
	pNewPop=pPop;
	do
	{
		nGen++;
		oldmaxfit=fMaxFit;
		oldmaxpp=nMaxPop;
		UpdateGen();
		StatPop(pNewPop);
		if(fMaxFit<oldmaxfit)
		{
			for(i=0;i<nChromLen;i++)
				pNewPop[nMinPop].chrom[i]=pOldPop[oldmaxpp].chrom[i];
			pNewPop[nMinPop].x=pOldPop[oldmaxpp].x;
			pNewPop[nMinPop].fitness=pOldPop[oldmaxpp].fitness;
			StatPop(pNewPop);
		}
		Report(nGen);
		pPop=pOldPop;
		pOldPop=pNewPop;
		pNewPop=pPop;
	}while(nGen<nMaxGen);
	if(pOldPop)
		free(pOldPop);
	if(pNewPop)
		free(pNewPop);
}



void InitData()
{
	unsigned i;
	if(pOldPop)
		free(pOldPop);
	if(pNewPop)
		free(pNewPop);
	printf("Please Input Population Size(2-200)(Default:%u):",DEFPOPSIZ);
	scanf("%u",&nPopSize);
	printf("Please Input Chromosome Length(2-63)(Default:%u):",DEFCHRLEN);
	scanf("%u",&nChromLen);
	printf("Please Input Max Generation(1-65535)(Default:%u):",DEFMAXGEN);
	scanf("%u",&nMaxGen);
	printf("Please Input Crossover Probability(0.0-1.0)(Default:%f):",DEFPC);
	scanf("%f",&fPc);
	printf("Please Input Mutation Probability(0.0-1.0)(Default:%f):",DEFPM);
	scanf("%f",&fPm);
	nGen=0;
	nCross=0;
	nMutation=0;
	nTxt=0;
	coef=pow(2.00,nChromLen)-1.0;
	srand((unsigned)time(NULL));
	ResetRandom();

	if(!(pOldPop=(POP *)malloc(nPopSize*sizeof(POP))))
	{
		printf("Allocate Memory Failed !");
		exit(1);
	}
	if(!(pNewPop=(POP *)malloc(nPopSize*sizeof(POP))))
	{
		printf("Allocate Memory Failed !");
		exit(1);
	}

	for(i=0;i<nPopSize;i++)
	{
		pOldPop[i].chrom[0]='\0';
		pNewPop[i].chrom[0]='\0';
	}
}

void ResetRandom()
{
	unsigned i;
	//srand((unsigned)time(NULL));
	for(i=0;i<nChromLen;i++)
		fRand[i]=(float)(rand()/(float)RAND_MAX);
	nRndIdx=0;
}

float Random()
{
	nRndIdx++;
	if(nRndIdx>=nChromLen)
	{
		nRndIdx=0;
		ResetRandom();
	}
	return fRand[nRndIdx];
}

int Flip(float probability)
{
	float tmp;
	//srand((unsigned)time(NULL));
	tmp=(float)(rand()/(float)RAND_MAX);
	if(tmp<=probability)
		return 1;
	return 0;
}

float ObjFunc(float vx)
{
	double y;
	//y=sin(2.0*3.1415926*vx);
	//return (float)(y*y);

	y=vx*sin(10*3.1415926*vx)+1.0;
	return (float)y;
}

float DeCode(unsigned * pChrom)
{
	int i;
	double t1,t2;
	t1=0.0;
	t2=1.0;
	for(i=nChromLen-1;i>=0;i--)
	{
		if(pChrom[i])
			t1+=t2;
		t2*=2.0;
	}
	//t1/=coef;
	t1=-1.0+t1*3.0/coef;
	return (float)t1;
}

void StatPop(POP * pop)
{
	unsigned i;
	fSumFit=pop[0].fitness;
	fMinFit=pop[0].fitness;
	fMaxFit=pop[0].fitness;
	nMaxPop=0;
	nMinPop=0;
	for(i=1;i<nPopSize;i++)
	{
		fSumFit+=pop[i].fitness;
		if(pop[i].fitness>fMaxFit)
		{
			fMaxFit=pop[i].fitness;
			nMaxPop=i;
		}
		if(pop[i].fitness<fMinFit)
		{
			fMinFit=pop[i].fitness;
			nMinPop=i;
		}
	}
	fAvgFit=fSumFit/(float)nPopSize;
}

void InitPop()
{
	unsigned i,j;
	//srand((unsigned)time(NULL));
	for(i=0;i<nPopSize;i++)
	{
		for(j=0;j<nChromLen;j++)
			pOldPop[i].chrom[j]=(int)(2.0/(float)RAND_MAX*rand());
		pOldPop[i].chrom[j]='\0';
		pOldPop[i].x=(float)DeCode(pOldPop[i].chrom);
		pOldPop[i].fitness=ObjFunc(pOldPop[i].x);
		pOldPop[i].parent1=0;
		pOldPop[i].parent2=0;
		pOldPop[i].xsite=0;
	}
	StatPop(pOldPop);
}

void InitReport()
{
	FILE *fp;

	printf("                        Simple Genetic Algorithm - SGA\n");
	printf("________________________________________________________________________________\n");
	printf("    SGA Parameters:\n");
	printf("Population Size(nPopSize) = %u\n",nPopSize);
	printf("Chromosome Length(nChromLen) = %u\n",nChromLen);
	printf("Maximum of Generation(nMaxGen) = %u\n",nMaxGen);
	printf("Crossover Probability(fPc) = %f\n",fPc);
	printf("Mutation Probability(fPm) = %f\n",fPm);
	printf("________________________________________________________________________________\n");
	printf("Initial Population Average Fitness = %f\n",fAvgFit);
	printf("Initial Population Max Fitness = %f\n",fMaxFit);
	printf("Initial Population Min Fitness = %f\n",fMinFit);
	printf("Initial Population Sum Fitness = %f\n",fSumFit);
	printf("________________________________________________________________________________\n");

	if((fp=fopen("SGAReport.txt","w"))==NULL)
	{
		printf("Cannot Open File for Report!");
		exit(2);
	}

	fprintf(fp,"                    Simple Genetic Algorithm - SGA\n");
	fprintf(fp,"________________________________________________________________________________\n");
	fprintf(fp,"    SGA Parameters:\n");
	fprintf(fp,"Population Size(nPopSize) = %u\n",nPopSize);
	fprintf(fp,"Chromosome Length(nChromLen) = %u\n",nChromLen);
	fprintf(fp,"Maximum of Generation(nMaxGen) = %u\n",nMaxGen);
	fprintf(fp,"Crossover Probability(fPc) = %f\n",fPc);
	fprintf(fp,"Mutation Probability(fPm) = %f\n",fPm);
	fprintf(fp,"________________________________________________________________________________\n");
	fprintf(fp,"Initial Population Average Fitness = %f\n",fAvgFit);
	fprintf(fp,"Initial Population Max Fitness = %f\n",fMaxFit);
	fprintf(fp,"Initial Population Min Fitness = %f\n",fMinFit);
	fprintf(fp,"Initial Population Sum Fitness = %f\n",fSumFit);
	fprintf(fp,"________________________________________________________________________________\n");

	fclose(fp);

}

unsigned Select()
{
	double tmprnd,tmpsum;
	unsigned i;
	tmpsum=0.0;
	i=0;
	tmprnd=Random()*fSumFit;
	do
	{
		tmpsum+=pOldPop[i].fitness;
		i++;
	}while((tmpsum<tmprnd)&&(i<nPopSize));
	return i-1;
}

int Mutation(unsigned chromval)
{
	int mutate;
	mutate=Flip(fPm);
	if(mutate)
	{
		nMutation++;
		if(chromval)
			chromval=0;
		else
			chromval=1;
	}
	if(chromval)
		return 1;
	else
		return 0;
}

int CrossOver(unsigned * parent1,unsigned * parent2,int popidx)
{
	unsigned i;
	//srand((unsigned)time(NULL));
	if(Flip(fPc))
	{
		nXcross=(int)((float)(nChromLen-1)/(float)RAND_MAX*rand());
		nCross++;
	}
	else
		nXcross=nChromLen;
	if(nXcross!=nChromLen)
	{
		for(i=0;i<nXcross;i++)
		{
			pNewPop[popidx].chrom[i]=Mutation(parent1[i]);
			pNewPop[popidx+1].chrom[i]=Mutation(parent2[i]);
		}
		for(i=nXcross;i<nChromLen;i++)
		{
			pNewPop[popidx].chrom[i]=Mutation(parent2[i]);
			pNewPop[popidx+1].chrom[i]=Mutation(parent1[i]);
		}
	}
	else
		for(i=0;i<nChromLen;i++)
		{
			pNewPop[popidx].chrom[i]=Mutation(parent1[i]);
			pNewPop[popidx+1].chrom[i]=Mutation(parent2[i]);
		}
	return 1;
}

void UpdateGen()
{
	unsigned i,mate1,mate2;
	i=0;
	do
	{
		mate1=Select();
		mate2=Select();
		CrossOver(pOldPop[mate1].chrom,pOldPop[mate2].chrom,i);
		pNewPop[i].x=(float)DeCode(pNewPop[i].chrom);
		pNewPop[i].fitness=ObjFunc(pNewPop[i].x);
		pNewPop[i].parent1=mate1;
		pNewPop[i].parent2=mate2;
		pNewPop[i].xsite=nXcross;
		pNewPop[i+1].x=(float)DeCode(pNewPop[i+1].chrom);
		pNewPop[i+1].fitness=ObjFunc(pNewPop[i+1].x);
		pNewPop[i+1].parent1=mate1;
		pNewPop[i+1].parent2=mate2;
		pNewPop[i+1].xsite=nXcross;
		i=i+2;
	}while(i<nPopSize);
}

void Report(int gen)
{
	unsigned i,j;
	FILE *fp;
	if((fp=fopen("SGAReport.txt","a"))==NULL)
	{
		printf("Cannot Open File for Report!");
		exit(2);
	}
	printf("    Population Report:\n");
	printf("Generation: %d\n",gen);
	printf("Indiv  Parents   xsite    x        Fitness     String\n");

	fprintf(fp,"    Population Report:\n");
	fprintf(fp,"Generation: %d\n",gen);
	fprintf(fp,"Indiv  Parents   xsite    x        Fitness     String\n");

	for(i=0;i<nPopSize;i++)
	{
		printf("%3u>: (%3u,%3u)   %2u %10.4f %10.4f     ",
			i,pNewPop[i].parent1,pNewPop[i].parent2,
			pNewPop[i].xsite,pNewPop[i].x,pNewPop[i].fitness);
		fprintf(fp,"%3u>: (%3u,%3u)   %2u %10.4f %10.4f     ",
			i,pNewPop[i].parent1,pNewPop[i].parent2,
			pNewPop[i].xsite,pNewPop[i].x,pNewPop[i].fitness);
		for(j=0;j<nChromLen;j++)
		{
			printf("%d",pNewPop[i].chrom[j]);
			fprintf(fp,"%d",pNewPop[i].chrom[j]);
		}
		printf("\n");
		fprintf(fp,"\n");
	}

	printf("________________________________________________________________________________\n");
	printf("    Result:\n");
	printf("Generation Calculated(nGen) = %u\n",nGen);
	printf("Average Fitness = %8.4f\n",fAvgFit);
	printf("Chromosome Value with Max Fitness = (%2u,%f)\n",nMaxPop,pNewPop[nMaxPop].x);
	printf("Max Fitness = %f\n",fMaxFit);
	printf("Chromosome Value with Min Fitness = (%2u,%f)\n",nMinPop,pNewPop[nMinPop].x);
	printf("Min Fitness = %f\n",fMinFit);
	printf("Crossover Num = %u\n",nCross);
	printf("Mutate Num = %u\n",nMutation);
	printf("________________________________________________________________________________\n");

	fprintf(fp,"________________________________________________________________________________\n");
	fprintf(fp,"    Result:\n");
	fprintf(fp,"Generation Calculated(nGen) = %u\n",nGen);
	fprintf(fp,"Average Fitness = %8.4f\n",fAvgFit);
	fprintf(fp,"Chromosome Value with Max Fitness = (%2u,%f)\n",nMaxPop,pNewPop[nMaxPop].x);
	fprintf(fp,"Max Fitness = %f\n",fMaxFit);
	fprintf(fp,"Chromosome Value with Min Fitness = (%2u,%f)\n",nMinPop,pNewPop[nMinPop].x);
	fprintf(fp,"Min Fitness = %f\n",fMinFit);
	fprintf(fp,"Crossover Num = %u\n",nCross);
	fprintf(fp,"Mutate Num = %u\n",nMutation);
	fprintf(fp,"________________________________________________________________________________\n");

	fclose(fp);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图色小说| 国产精品99久久久久久久女警| 亚洲成av人片在线观看无码| 老司机午夜精品99久久| av在线免费不卡| 日韩欧美在线一区二区三区| 成人欧美一区二区三区黑人麻豆| 午夜电影久久久| 99久久99久久精品免费观看| 欧美精品日韩综合在线| 亚洲人成在线播放网站岛国 | 国产成人av资源| 欧美一级片免费看| 夜夜揉揉日日人人青青一国产精品| 蜜桃视频免费观看一区| 欧美一级在线免费| 亚洲国产一区二区三区| 91天堂素人约啪| 亚洲精品一区二区精华| 日本最新不卡在线| 欧美日韩中字一区| 亚洲欧美偷拍三级| a美女胸又www黄视频久久| 久久尤物电影视频在线观看| 日本在线观看不卡视频| 欧美日韩另类一区| 亚洲一区中文在线| 欧美午夜电影在线播放| 亚洲裸体在线观看| bt7086福利一区国产| 国产精品看片你懂得| 国产mv日韩mv欧美| 日本一区二区三区电影| 国产成人av福利| 国产日韩高清在线| 暴力调教一区二区三区| 亚洲三级视频在线观看| 91一区二区三区在线观看| 国产精品久久久久国产精品日日| 成a人片亚洲日本久久| 国产精品视频你懂的| 国产成人精品免费一区二区| 国产欧美日本一区二区三区| 国产传媒一区在线| 欧美国产欧美综合| 色香蕉久久蜜桃| 五月婷婷欧美视频| 精品嫩草影院久久| 国产乱码精品一区二区三| 国产三级精品三级在线专区| eeuss鲁片一区二区三区| 国产精品久久久久久久久快鸭| 99re这里只有精品视频首页| 亚洲尤物视频在线| 日韩欧美中文字幕精品| 国产91对白在线观看九色| 中文字幕日本不卡| 欧美私模裸体表演在线观看| 秋霞午夜鲁丝一区二区老狼| 精品三级在线看| a美女胸又www黄视频久久| 亚洲在线视频一区| 欧美电影免费提供在线观看| 成人黄色片在线观看| 亚洲成人免费电影| 国产色综合一区| 欧美午夜精品理论片a级按摩| 秋霞电影一区二区| 国产精品视频在线看| 欧美日韩高清一区二区不卡| 国产精品夜夜嗨| 亚洲国产精品久久艾草纯爱| 久久久久久久网| 日本乱人伦aⅴ精品| 美女www一区二区| 亚洲免费高清视频在线| 日韩美一区二区三区| 91亚洲大成网污www| 久久精品国产在热久久| 一区二区三区中文在线| 国产日韩一级二级三级| 欧美日韩国产经典色站一区二区三区| 激情综合色综合久久| 亚洲一级二级在线| 欧美国产日韩精品免费观看| 日韩视频中午一区| 色诱亚洲精品久久久久久| 精品一二三四在线| 午夜精品久久一牛影视| 最近日韩中文字幕| 亚洲精品一线二线三线无人区| 欧美探花视频资源| 91影院在线观看| 国产电影一区二区三区| 日本午夜一区二区| 亚洲综合色婷婷| 亚洲丝袜精品丝袜在线| 日本一区二区电影| 国产亚洲一区字幕| 欧美一区日本一区韩国一区| 色综合激情五月| 97国产一区二区| www.欧美精品一二区| 成人一级黄色片| 成人午夜在线视频| 成人av网在线| 暴力调教一区二区三区| 成人午夜在线播放| 国产精品一区二区在线观看网站 | 日韩一区二区三免费高清| 在线国产亚洲欧美| 在线观看国产日韩| 91香蕉视频在线| 色综合天天性综合| 91网站在线播放| 色综合色综合色综合色综合色综合 | 精品粉嫩超白一线天av| 6080午夜不卡| 欧美videossexotv100| 日韩一区二区免费在线观看| 日韩欧美一级精品久久| 欧美刺激午夜性久久久久久久| 日韩一级视频免费观看在线| xfplay精品久久| 久久精品视频一区二区三区| 欧美极品aⅴ影院| 国产精品国产三级国产普通话99 | 99v久久综合狠狠综合久久| 91亚洲国产成人精品一区二区三| 色一情一伦一子一伦一区| 欧美视频在线不卡| 欧美一区二区三区日韩| 精品久久久久香蕉网| 国产目拍亚洲精品99久久精品| 中文字幕日韩一区| 亚洲第一电影网| 免费高清成人在线| 国产成人精品一区二| 91色porny蝌蚪| 日韩一区二区视频在线观看| 久久网站热最新地址| 国产精品国产精品国产专区不片| 亚洲一区精品在线| 久久精品999| 91丨九色丨蝌蚪富婆spa| 欧美日韩国产另类不卡| 久久久精品黄色| 亚洲综合免费观看高清在线观看| 麻豆国产欧美一区二区三区| 成人精品视频一区二区三区尤物| 欧美日韩视频在线第一区| 欧美r级在线观看| 亚洲欧美色一区| 久久超碰97中文字幕| 91小视频在线| 精品少妇一区二区三区日产乱码 | 7777女厕盗摄久久久| 国产夜色精品一区二区av| 亚洲电影在线播放| 激情综合亚洲精品| 欧美日韩在线播放| 国产亚洲精品中文字幕| 天天av天天翘天天综合网| 国产成人亚洲综合色影视| 欧美精品久久天天躁| 国产精品欧美综合在线| 日本成人中文字幕在线视频| 色综合一区二区三区| 久久噜噜亚洲综合| 三级精品在线观看| 91精彩视频在线| 亚洲国产精品传媒在线观看| 免费观看久久久4p| 欧美日韩一区高清| 国产精品美女久久久久aⅴ国产馆| 免费在线观看不卡| 欧美天堂亚洲电影院在线播放| 中文字幕精品—区二区四季| 日韩va亚洲va欧美va久久| 欧美亚洲精品一区| 国产精品久久久一本精品| 国产精品自在在线| 欧美zozo另类异族| 免费在线观看视频一区| 欧美剧在线免费观看网站| 亚洲黄色免费电影| av不卡在线播放| 亚洲欧洲日韩在线| av亚洲精华国产精华| 国产精品久久久久永久免费观看 | 91麻豆免费在线观看| 欧美国产综合一区二区| 国产传媒欧美日韩成人| 精品裸体舞一区二区三区| 六月丁香婷婷色狠狠久久| 日韩欧美你懂的| 韩国三级电影一区二区| 久久在线观看免费| 国产精品一区二区在线观看网站| 337p日本欧洲亚洲大胆色噜噜|