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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ga.cpp

?? VC編寫的基本遺傳算法,建立遺傳算子類
?? CPP
字號:
// GA.cpp: implementation of the GA class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SGA.h"
#include "GA.h"

#include <iostream.h>
#include <math.h>

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

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


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

GA::GA()
{
	nPopSize=DEFPOPSIZ;
	nChromLen=DEFCHRLEN;
	nMaxGen=DEFMAXGEN;
	fPc=DEFPC;
	fPm=DEFPM;
	nGen=0;
	nCross=0;
	nMutation=0;
	coef=pow(2.00,nChromLen)-1.0;
	srand((unsigned)time(NULL));

	if(!(MaxFitStat=new float[nMaxGen+1]))
	{
		MessageBox("Allocate Memory Failed !");
		exit(-1);
	}
	if(!(AvgFitStat=new float[nMaxGen+1]))
	{
		MessageBox("Allocate Memory Failed !");
		exit(-1);
	}
	if(!(pOldPop=new POP[nPopSize]))
	{
		MessageBox("Allocate Memory Failed !");
		exit(-1);
	}
	if(!(pNewPop=new POP[nPopSize]))
	{
		MessageBox("Allocate Memory Failed !");
		exit(-1);
	}

}

GA::~GA()
{
	if(MaxFitStat)
		delete [] MaxFitStat;
	if(AvgFitStat)
		delete [] AvgFitStat;
	if(pOldPop)
		delete [] pOldPop;
	if(pNewPop)
		delete [] pNewPop;
	if(!lsRptData.IsEmpty())
		lsRptData.RemoveAll();
}

void GA::InitData(unsigned ppsz,unsigned chrlen,unsigned maxgen,float pc,float pm)
{
	if(pOldPop)
		delete [] pOldPop;
	if(pNewPop)
		delete [] pNewPop;
	if(!lsRptData.IsEmpty())
		lsRptData.RemoveAll();
	if(MaxFitStat)
	{
		delete [] MaxFitStat;
		if(!(MaxFitStat=new float[maxgen+1]))
		{
			MessageBox("Allocate Memory Failed !");
			exit(-1);
		}
	}
	if(AvgFitStat)
	{
		delete [] AvgFitStat;
		if(!(AvgFitStat=new float[maxgen+1]))
		{
			MessageBox("Allocate Memory Failed !");
			exit(-1);
		}
	}
	nPopSize=ppsz;
	nChromLen=chrlen;
	nMaxGen=maxgen;
	fPc=pc;
	fPm=pm;
	nGen=0;
	nCross=0;
	nMutation=0;
	coef=pow(2.00,nChromLen)-1.0;
	srand((unsigned)time(NULL));

	if(!(pOldPop=new POP[nPopSize]))
	{
		MessageBox("Allocate Memory Failed !");
		exit(-1);
	}
	if(!(pNewPop=new POP[nPopSize]))
	{
		MessageBox("Allocate Memory Failed !");
		exit(-1);
	}
}

int GA::Flip(float probability)
{
	double tmp;
	tmp=(double)(rand()/(double)RAND_MAX);
	if(tmp<=probability)
		return 1;
	return 0;
}

float GA::ObjFunc(float vx)
{
	double y;
	//y=3.1415926*vx;
	//y=sin(2.0*y);
	//return (float)(y*y);
	y=vx*sin(10*3.1415926*vx)+2.0;
	return (float)y;
}

float GA::DeCode(unsigned * pChrom)
{
	double t1,t2;
	t1=0.0;
	t2=1.0;
	for(int 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 GA::StatPop(POP * pop)
{
	fSumFit=pop[0].fitness;
	fMinFit=pop[0].fitness;
	fMaxFit=pop[0].fitness;
	nMaxPop=0;
	nMinPop=0;
	for(unsigned 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 GA::InitPop()
{
	for(unsigned i=0;i<nPopSize;i++)
	{
		for(unsigned j=0;j<nChromLen;j++)
			pOldPop[i].chrom[j]=rand()%2;
		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 GA::InitReport()
{
	char tmp[100];

	lsRptData.AddHead(CString("                                            Simple Genetic Algorithm - SGA"));
	lsRptData.AddTail(CString("________________________________________________________________________________"));
	lsRptData.AddTail(CString("        SGA Parameters:"));
	sprintf(tmp,"Population Size(nPopSize) = %u",nPopSize);
	lsRptData.AddTail(CString(tmp));
	sprintf(tmp,"Chromosome Length(nChromLen) = %u",nChromLen);
	lsRptData.AddTail(CString(tmp));
	sprintf(tmp,"Maximum of Generation(nMaxGen) = %u",nMaxGen);
	lsRptData.AddTail(CString(tmp));
	sprintf(tmp,"Crossover Probability(fPc) = %f",fPc);
	lsRptData.AddTail(CString(tmp));
	sprintf(tmp,"Mutation Probability(fPm) = %f",fPm);
	lsRptData.AddTail(CString(tmp));
	lsRptData.AddTail(CString("________________________________________________________________________________"));
	sprintf(tmp,"Initial Population Max Fitness = %f",fMaxFit);
	lsRptData.AddTail(CString(tmp));
	sprintf(tmp,"Initial Population Average Fitness = %f",fAvgFit);
	lsRptData.AddTail(CString(tmp));	
	sprintf(tmp,"Initial Population Min Fitness = %f",fMinFit);
	lsRptData.AddTail(CString(tmp));
	sprintf(tmp,"Initial Population Sum Fitness = %f",fSumFit);
	lsRptData.AddTail(CString(tmp));
	lsRptData.AddTail(CString("________________________________________________________________________________"));
}

unsigned GA::Select()
{
	double tmprnd,tmpsum;
	unsigned i;
	tmpsum=0.0;
	i=0;
	tmprnd=(double)(rand()/(double)RAND_MAX)*fSumFit;
	do
	{
		tmpsum+=pOldPop[i].fitness;
		i++;
	}while((tmpsum<tmprnd)&&(i<nPopSize));
	if(i==nPopSize)
		return (rand()%nPopSize);
	return i-1;
}

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

int GA::CrossOver(unsigned * parent1,unsigned * parent2,int popidx)
{
	unsigned i;
	if(Flip(fPc))
	{
		nXcross=rand()%nChromLen;
		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 GA::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 GA::Report(int gen)
{
	char out[200],tmp[100];

	lsRptData.AddTail(CString("        Population Report"));
	sprintf(out,"Generation: %d",gen);
	lsRptData.AddTail(CString(out));
	lsRptData.AddTail(CString("Indiv       Parents     xsite         x              Fitness          String"));
	for(unsigned i=00;i<nPopSize;i++)
	{
		sprintf(out,"%03u>:     (%03u,%03u)      %02u %14.4f %12.4f         ",
			i,pNewPop[i].parent1,pNewPop[i].parent2,
			pNewPop[i].xsite,pNewPop[i].x,pNewPop[i].fitness);
		for(unsigned j=0;j<nChromLen;j++)
			sprintf(tmp+j,"%d",pNewPop[i].chrom[j]);
		strcat(out,tmp);
		lsRptData.AddTail(CString(out));
	}
	lsRptData.AddTail(CString("________________________________________________________________________________"));
	lsRptData.AddTail(CString("        Result:"));
	sprintf(out,"Generation Calculated(nGen) = %u",nGen);
	lsRptData.AddTail(CString(out));
	sprintf(out,"Max Fitness = %f",fMaxFit);
	lsRptData.AddTail(CString(out));
	sprintf(out,"Chromosome Value with Max Fitness = (%2u, %f)",nMaxPop,pNewPop[nMaxPop].x);
	lsRptData.AddTail(CString(out));
	sprintf(out,"Average Fitness = %f",fAvgFit);
	lsRptData.AddTail(CString(out));
	sprintf(out,"Min Fitness = %f",fMinFit);
	lsRptData.AddTail(CString(out));
	sprintf(out,"Chromosome Value with Min Fitness = (%2u, %f)",nMinPop,pNewPop[nMinPop].x);
	lsRptData.AddTail(CString(out));
	sprintf(out,"Crossover Num = %u",nCross);
	lsRptData.AddTail(CString(out));
	sprintf(out,"Mutate Num = %u",nMutation);
	lsRptData.AddTail(CString(out));
	lsRptData.AddTail(CString("________________________________________________________________________________"));

	MaxFitStat[gen]=fMaxFit;
	AvgFitStat[gen]=fAvgFit;
}

void GA::RunGA()
{
	float oldmaxfit;
	int oldmaxpp;

	if(!lsRptData.IsEmpty())
		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(unsigned 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);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区精品| 国产成人自拍网| 国产精品久久久一区麻豆最新章节| 在线观看国产精品网站| 极品少妇一区二区| 亚洲18女电影在线观看| 国产精品护士白丝一区av| 欧美成人vr18sexvr| 欧美日韩视频一区二区| av在线这里只有精品| 国产资源在线一区| 麻豆中文一区二区| 亚洲最新视频在线观看| 亚洲视频在线一区| 国产精品网站一区| 久久久精品国产免大香伊| 日韩视频一区二区三区在线播放 | 91精品久久久久久久91蜜桃 | 欧美理论电影在线| 99视频一区二区| 成人综合在线网站| 国产精品影视网| 精品一区二区影视| 蜜臀av一级做a爰片久久| 视频一区欧美日韩| 亚洲高清视频的网址| 综合av第一页| 亚洲欧美一区二区视频| 国产人久久人人人人爽| xnxx国产精品| 337p日本欧洲亚洲大胆精品| 精品国产乱码久久久久久牛牛| 欧美一区二区三区精品| 91精品国产手机| 欧美一区二区三区在线视频| 91精品国产免费| 欧美成人三级电影在线| 精品国产污网站| 久久综合色婷婷| 久久久久亚洲蜜桃| 欧美精彩视频一区二区三区| 国产午夜精品福利| 国产日产欧美一区二区三区| 国产精品成人免费在线| 91香蕉视频在线| 蜜臀99久久精品久久久久久软件| 偷窥少妇高潮呻吟av久久免费 | 欧美日韩在线电影| 欧美在线免费观看亚洲| 欧美日韩性生活| 日韩欧美一级精品久久| 欧美一区二区三区播放老司机| 欧美精品国产精品| 精品国产一区二区国模嫣然| 久久久777精品电影网影网| 中文字幕高清不卡| 亚洲精品高清在线观看| 日韩精品亚洲一区二区三区免费| 精品一区二区免费看| 成人免费视频一区二区| 色哟哟精品一区| 7777精品久久久大香线蕉| 欧美mv日韩mv| 一区在线播放视频| 亚洲不卡在线观看| 国产麻豆日韩欧美久久| 国产精品一色哟哟哟| 欧美人体做爰大胆视频| 91麻豆精品国产91久久久使用方法 | 欧美日韩国产免费一区二区| 在线播放91灌醉迷j高跟美女| 日韩亚洲欧美在线观看| 国产精品久久国产精麻豆99网站| 一区二区在线观看免费 | 在线观看欧美黄色| 欧美成人官网二区| 亚洲特黄一级片| 久久99精品久久久| 色综合天天视频在线观看| 欧美群妇大交群的观看方式| 欧美国产在线观看| 首页国产欧美久久| 欧美精品免费视频| 日韩情涩欧美日韩视频| 亚洲人成影院在线观看| 美女网站一区二区| 91影院在线免费观看| 精品久久久久久久久久久久久久久 | 欧美日本一区二区| 欧美韩国一区二区| 久久精工是国产品牌吗| 91麻豆精品在线观看| 精品国产乱码91久久久久久网站| 亚洲乱码国产乱码精品精的特点| 国产在线视频一区二区| 欧美丝袜第三区| 日韩一区有码在线| 精品系列免费在线观看| 欧美色大人视频| 亚洲视频 欧洲视频| 国产精品中文字幕日韩精品 | 欧美一区二区在线播放| 亚洲欧洲精品成人久久奇米网| 免费三级欧美电影| 色播五月激情综合网| 国产欧美一区二区精品久导航 | 99国产欧美久久久精品| 日韩一级免费一区| 亚洲综合丁香婷婷六月香| 成人听书哪个软件好| 精品女同一区二区| 午夜影院在线观看欧美| 99国产精品一区| 中文字幕av一区二区三区| 国模套图日韩精品一区二区| 制服丝袜日韩国产| 首页国产欧美久久| 欧美日精品一区视频| 亚洲一区日韩精品中文字幕| 99re在线视频这里只有精品| 国产精品素人视频| 国产成人精品午夜视频免费| 精品va天堂亚洲国产| 麻豆国产欧美一区二区三区| 91精品久久久久久蜜臀| 首页欧美精品中文字幕| 欧美另类高清zo欧美| 丝袜美腿一区二区三区| 欧美日韩一区中文字幕| 亚洲午夜精品一区二区三区他趣| 91看片淫黄大片一级在线观看| 一区精品在线播放| 色乱码一区二区三区88| 亚洲狠狠爱一区二区三区| 欧美亚洲一区二区三区四区| 亚洲一区二区三区中文字幕| 在线观看欧美黄色| 亚州成人在线电影| 日韩一区二区高清| 久久国产精品99精品国产| 精品日韩一区二区三区| 国产一区在线精品| 中日韩免费视频中文字幕| 97精品电影院| 亚洲五码中文字幕| 日韩免费性生活视频播放| 狠狠色丁香久久婷婷综合_中| 久久久久国产精品人| k8久久久一区二区三区 | 亚洲一二三四区不卡| 欧美日韩国产综合草草| 久久精品国产网站| 久久夜色精品国产噜噜av| 成人在线综合网站| 亚洲欧美日本韩国| 欧美精选午夜久久久乱码6080| 美国十次了思思久久精品导航| 久久人人爽爽爽人久久久| 波多野结衣91| 一二三区精品视频| 日韩免费观看高清完整版 | 精品一区二区综合| 中文字幕日韩精品一区 | 7777精品伊人久久久大香线蕉的 | 美女一区二区久久| 欧美韩国日本不卡| 欧美性受xxxx黑人xyx性爽| 视频一区视频二区中文字幕| 国产日韩欧美高清在线| 国产欧美一区二区三区网站| 成人午夜av影视| 水野朝阳av一区二区三区| 2021中文字幕一区亚洲| 91在线观看视频| 五月激情丁香一区二区三区| 日韩欧美一二三区| zzijzzij亚洲日本少妇熟睡| 午夜精品一区二区三区电影天堂| 亚洲精品一区二区三区蜜桃下载| 一本到不卡免费一区二区| 久久99精品久久久久久久久久久久| 国产精品国产三级国产有无不卡 | 国产高清精品久久久久| 亚洲一区二区三区美女| 国产三级三级三级精品8ⅰ区| 在线免费不卡视频| 国产成人亚洲精品狼色在线| 亚洲国产欧美在线| 国产欧美1区2区3区| 欧美一区永久视频免费观看| 96av麻豆蜜桃一区二区| 狠狠色综合日日| 午夜欧美在线一二页| 国产精品久久午夜夜伦鲁鲁| 日韩一区二区三区视频在线| 在线视频观看一区| 国产成都精品91一区二区三| 日韩av电影天堂| 一区二区三区在线高清| 国产精品污www在线观看|