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

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

?? sgalib.cpp

?? 這是一個遺傳算法
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// SGAlib.cpp : implementation file
//

#include "stdafx.h"
//#include "SGA for testing.h"
#include "SGAlib.h"
#include "iostream.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// SGAlib

SGAlib::SGAlib()
{
	

}

SGAlib::~SGAlib()
{
}


BEGIN_MESSAGE_MAP(SGAlib, CWnd)
	//{{AFX_MSG_MAP(SGAlib)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// SGAlib message handlers

struct individual {
	unsigned* chrom;
	unsigned fitness;
	unsigned varible[3];
	int xsite;
	int parent[2];
	unsigned* PathValues;	
};
individual* oldpop;
individual* newpop;

struct bestever{
	unsigned* chrom;
	unsigned fitness;
	 unsigned varible[3];
	int generation;
};
bestever bestfit;

//靜態變量必須初始化
int SGAlib::jrand=0;
double SGAlib::rndx2=0.0;
int SGAlib::rndcalcflag=0;
double  SGAlib::oldrand[55]={0.0};

FILE * outfp;

void SGAlib::initialize()
{
	initdata();
	chromsize=(lchrom/(8*sizeof(unsigned)));
	if (lchrom%(8*sizeof(unsigned))) chromsize++;
	initmalloc();
	randomize();
	nmutation=0;
	ncross=0;
	bestfit.fitness=0;
	bestfit.generation=0;
	initpop();
	//statistics(oldpop);
	for(int j=0;j<popsize;j++)
	{
		if (oldpop[j].fitness>bestfit.fitness)
		{
			for(int i=0;i<chromsize;i++)
			{
				bestfit.chrom[i]=oldpop[j].chrom[i];
			}
			bestfit.fitness=oldpop[j].fitness;
			bestfit.varible[0]=oldpop[j].varible[0];
			bestfit.varible[1]=oldpop[j].varible[1];
			bestfit.varible[2]=oldpop[j].varible[2];
		}	
	}

	initreport();	
}

void SGAlib::initmalloc()
{
	unsigned nbytes;
	int j;
	
	//分配給當前代和新一代種群內存空間
	nbytes=popsize*sizeof(individual);
	oldpop=(individual*)malloc(nbytes);
	if (oldpop ==NULL) nomemory("oldpop");
	newpop=(individual*)malloc(nbytes);	
	if(newpop ==NULL) nomemory("newpop");	
	//分配給染色體內存空間
	nbytes=chromsize*sizeof(unsigned);
	for(j=0;j<popsize;j++)
	{
		if((oldpop[j].chrom=(unsigned*)malloc(nbytes)) ==NULL)
			nomemory("oldpop chromosomes");
		if((newpop[j].chrom=(unsigned*)malloc(nbytes)) ==NULL)
			nomemory("newpop chromosomes");
		if ((oldpop[j].PathValues=(unsigned*)malloc(6*sizeof(unsigned))) ==NULL )
			nomemory("oldpop PathValues");
		if ((newpop[j].PathValues=(unsigned*)malloc(6*sizeof(unsigned))) ==NULL )
			nomemory("newpop PathValues");
	}
	if ((bestfit.chrom=(unsigned*)malloc(nbytes)) ==NULL )
		nomemory("bestfit chromosomes");
	

}

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

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

void SGAlib::initdata()
{
	cout<<"\n輸入種群大小(20-100):";
	cin>>popsize;
	cout<<popsize;
	if ((popsize%2)!=0) 
	{
		fprintf(outfp,"種群大小已設置為偶數\n");
		popsize++;
	}
	cout<<"\n染色體長度(21-48中取3的倍數):";
	cin>>lchrom;
	cout<<lchrom;
	cout<<"\n最大世代數(100-300):";
	cin>>maxgen;
	cout<<maxgen;
	cout<<"\n交叉率(0.2-0.9):";
	cin>>pcross;
	cout<<pcross;
	cout<<"\n變異率(0.01-0.1):";
	cin>>pmutation;
	cout<<pmutation;
}

void SGAlib::initpop() //初始化種群
{
	int j,j1,k,stop;
	unsigned mask=1;
	for(j=0;j<popsize;j++)
	{	
		for(k=0;k<chromsize;k++)
		{
			oldpop[j].chrom[k]=0;
			if (k==(chromsize-1))
				stop=lchrom-(k*(8*sizeof(unsigned)));
			else
				stop=8*sizeof(unsigned);
			for(j1=1;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->parent[0]=0;
		oldpop->parent[1]=0;
		oldpop->xsite=0;
		
		calcfitfunc(&oldpop[j]) ; //計算初始適應值
	}
	
}

void SGAlib::initreport()
{
	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");

}

void SGAlib::generation()
{
	int 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);
		//解碼,計算適應值
		calcfitfunc(&newpop[j]);
		//記錄親子關系和交叉位置
		newpop[j].parent[0]=mate1+1;
		newpop[j].xsite=jcross;
		newpop[j].parent[1]=mate2+1;
		calcfitfunc(&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 SGAlib::report()
{
	repchar(outfp,"-",100);
	fprintf(outfp,"\n");
	repchar(outfp," ",((80-17)/2));
	fprintf(outfp,"模擬計算統計報告\n");
	fprintf(outfp,"       世代數%3d",gen);
	repchar(outfp," ",(80-40));
	fprintf(outfp,"  世代數%3d\n",(gen+1));
	fprintf(outfp,"   個體染色體編碼");
	repchar(outfp," ",lchrom-10);
	fprintf(outfp,"適應度   父個體  交叉位置  ");
	fprintf(outfp,"染色體編碼");
	repchar(outfp," ",lchrom-8);
	fprintf(outfp,"適應度\n");
	repchar(outfp,"-",100);
	fprintf(outfp,"\n");
	writepop();
	repchar(outfp,"-",100);
	fprintf(outfp,"\n第%d代統計:\n",gen+1);
	fprintf(outfp,"總交叉操作次數=%d,總變異操作次數=%d\n",ncross,nmutation);
	fprintf(outfp,"  最小適應度:%d,最大適應度:%d,平均適應度:%f\n",min,max,avg);
	fprintf(outfp,"迄今發現最佳個體=〉所在代數:%d",bestfit.generation);
	fprintf(outfp,"  適應度:%d  染色體",bestfit.fitness);
	writechrom(bestfit.chrom);
	fprintf(outfp,"  對應的變量值:%d,%d,%d",bestfit.varible[0],bestfit.varible[1],bestfit.varible[2]);
	fprintf(outfp,"\n");
	repchar(outfp,"-",100);
	fprintf(outfp,"\n");
}

void SGAlib::writepop()
{
	individual *pind;
	int j;
	for(j=0;j<popsize;j++)
	{
		fprintf(outfp," %3d)  ",j+1);
		//當前代個體
		pind=&(oldpop[j]);
		writechrom(pind->chrom);
		fprintf(outfp,"    %d  ",pind->fitness);
		//新一代個體
		pind=&(newpop[j]);
		fprintf(outfp,"(%2d,%2d)   %2d  ",pind->parent[0],pind->parent[1],pind->xsite);
		repchar(outfp," ",6);
		writechrom(pind->chrom);
		fprintf(outfp,"    %d\n",pind->fitness);	
	}
}

void SGAlib::writechrom(unsigned *chrom) //輸出染色體編碼
{
	int j,k,stop,L=0;
	unsigned mask=1,tmp;
	char a[48];
	memset( a, ' ', sizeof(char)*48);
	
	for(k=0;k<chromsize;k++)
	{
		tmp=chrom[k];
		//fprintf(outfp,"%d:",tmp);
		
		if (k==(chromsize-1)) 
			stop=lchrom-(k*(8*sizeof(unsigned)));
		else
			stop=8*sizeof(unsigned);
		for(j=0;j<stop;j++)
		{	
			if (tmp&mask)
				a[L++]='1'; 
			else
				a[L++]='0'; 
			tmp=tmp>>1;	
		}
	}

	for(int i=L-1;i>=0&&a[i]!='\0';i--)
	{
		fprintf(outfp,"%c",a[i]);
	}
}


void SGAlib::preselect()
{
	int j;
	sumfitness=0;
	for(j=0;j<popsize;j++)
	{
		sumfitness+=oldpop[j].fitness;
		
	}
}

int SGAlib::select()//輪盤賭選擇
{
	float sum,pick;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品免费网站| 国产在线精品一区二区不卡了| eeuss鲁片一区二区三区| 国产精品乱码妇女bbbb| 91在线观看视频| 亚洲综合自拍偷拍| 欧美午夜理伦三级在线观看| 五月天欧美精品| 日韩精品在线一区| 国产精品系列在线播放| 国产精品美女久久久久aⅴ| 色综合视频一区二区三区高清| ...xxx性欧美| 精品视频123区在线观看| 日韩福利电影在线| 久久精品视频免费观看| 成人av片在线观看| 亚洲国产精品久久久男人的天堂| 欧美精品 国产精品| 国产综合久久久久久鬼色 | 精品午夜一区二区三区在线观看| 91精品国产福利在线观看| 国精产品一区一区三区mba视频 | 欧美日韩一区中文字幕| 免费一级片91| 中文字幕亚洲精品在线观看| 911国产精品| 国产成人精品网址| 午夜精品视频一区| 国产偷v国产偷v亚洲高清 | 91精品福利在线| 琪琪久久久久日韩精品| 国产精品天干天干在观线| 欧美视频一区二区在线观看| 国产成人在线视频网站| 亚洲h在线观看| 国产精品免费视频一区| 欧美一区二区三区在线观看视频| 国产成人av福利| 日本不卡视频一二三区| 国产精品久久久久四虎| 日韩一区二区精品在线观看| 91在线你懂得| 国内久久精品视频| 亚州成人在线电影| 国产精品久久夜| 欧美成人三级电影在线| 91久久精品一区二区二区| 国产呦萝稀缺另类资源| 日韩—二三区免费观看av| 亚洲品质自拍视频| 国产欧美日韩在线看| 日韩欧美在线影院| 欧美日韩免费视频| 99久久国产免费看| 国产盗摄一区二区| 久久99精品久久久久久| 午夜精品久久久久久久久久| 亚洲精品中文在线观看| 国产无人区一区二区三区| 欧美电影免费观看高清完整版在| 在线一区二区三区四区五区| 成人免费视频caoporn| 韩国成人在线视频| 美女视频第一区二区三区免费观看网站 | 91欧美激情一区二区三区成人| 精品一区二区三区免费观看| 五月激情综合网| 亚洲成在人线在线播放| 一区二区三区中文在线观看| 亚洲三级在线观看| 国产精品国产自产拍高清av| 国产女人18毛片水真多成人如厕| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美一级国产精品| 欧美一级生活片| 欧美一级夜夜爽| 日韩西西人体444www| 日韩欧美资源站| 欧美不卡在线视频| www久久精品| 久久精品日韩一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 久久久91精品国产一区二区精品 | 国产成人综合在线播放| 国产高清不卡一区二区| 国产99一区视频免费| 大陆成人av片| 91免费看`日韩一区二区| 色婷婷久久久亚洲一区二区三区| 色老头久久综合| 欧美日本免费一区二区三区| 91精品国产麻豆| 日韩免费视频一区| 中文字幕av不卡| 亚洲日本乱码在线观看| 亚洲国产wwwccc36天堂| 蜜桃av噜噜一区二区三区小说| 国产露脸91国语对白| fc2成人免费人成在线观看播放| 成人免费毛片片v| 在线亚洲高清视频| 日韩欧美国产一二三区| 久久综合999| 亚洲美女区一区| 美国十次综合导航| 不卡一二三区首页| 欧美情侣在线播放| 国产欧美一区二区精品性| 日韩美女精品在线| 免费观看成人av| 成人精品国产一区二区4080| 欧美色综合网站| 精品国产乱码久久久久久免费| 国产精品毛片高清在线完整版| 亚洲已满18点击进入久久| 久久99久久99小草精品免视看| 高清shemale亚洲人妖| 欧美最猛黑人xxxxx猛交| 精品对白一区国产伦| 亚洲欧美激情插| 久久er精品视频| 欧洲另类一二三四区| 欧美成人vps| 一区二区三区四区蜜桃 | 亚洲国产综合色| 国产一区二区三区高清播放| 欧洲在线/亚洲| 2022国产精品视频| 婷婷综合在线观看| 99久久综合99久久综合网站| 日韩精品一区在线| 亚洲免费视频中文字幕| 国产精品亚洲第一| 91精品国产一区二区三区蜜臀| 最新热久久免费视频| 久久国产麻豆精品| 欧美日精品一区视频| 国产精品久久影院| 国产精品一区二区三区乱码 | 日本视频一区二区| 91官网在线免费观看| 国产日韩欧美综合一区| 久久国产精品99久久久久久老狼| 欧美无人高清视频在线观看| 最新国产の精品合集bt伙计| 韩国一区二区视频| 91精品黄色片免费大全| 亚洲sss视频在线视频| 色综合久久中文综合久久牛| 中文字幕久久午夜不卡| 久久机这里只有精品| 欧美一区二区三区人| 亚洲第一综合色| 91豆麻精品91久久久久久| 亚洲欧洲日本在线| 本田岬高潮一区二区三区| 久久精品网站免费观看| 国产乱理伦片在线观看夜一区| 精品日本一线二线三线不卡| 日韩精品电影一区亚洲| 欧美年轻男男videosbes| 夜夜揉揉日日人人青青一国产精品| 99久久精品免费观看| 国产精品免费久久| www.久久久久久久久| 国产精品素人视频| 99久久久无码国产精品| 亚洲日本在线观看| 91捆绑美女网站| 亚洲乱码国产乱码精品精小说| 一本色道**综合亚洲精品蜜桃冫| 中文字幕色av一区二区三区| 99久久精品一区| 一区二区三区免费在线观看| 欧日韩精品视频| 三级欧美在线一区| 欧美精品一区二区三区久久久 | 亚洲一区二区影院| 欧美日韩免费视频| 蜜臀av一区二区| 久久麻豆一区二区| av爱爱亚洲一区| 一区二区在线观看视频| 欧美老女人第四色| 国产最新精品精品你懂的| 欧美激情一区二区| 一本到一区二区三区| 亚洲妇女屁股眼交7| 日韩欧美一级二级三级| 国产精品一品二品| 亚洲精品欧美在线| 日韩精品自拍偷拍| 国内成人免费视频| 国产精品国模大尺度视频| 精品视频在线免费| 国产高清无密码一区二区三区| 国产精品亲子乱子伦xxxx裸| 在线观看视频一区二区欧美日韩| 午夜精品福利在线|