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

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

?? genetic1.cpp.txt

?? 用VC++6.0編寫的遺傳算法源程序
?? TXT
字號:
//頭文件:		Genetic.hpp
//目的:			為遺傳算法提供基類,該基類將評價函數(shù)值直接作為適合度,采用
//				新個體直接替換老個體的整體再生法
//語言:			VC++ 6.0
//注意:			EvalVal(INDIVIDUAL&)應(yīng)由用戶類覆蓋,以提供正確的評價函數(shù).
//////////////////////////////////////////////////////////////////////

#include <stdlib.h>
#include "Genetic.hpp"

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

Genetic::Genetic()
{
	IndNumber = 0;
	GeneLen = 0;
	Elitism = ELITISM;
	Cross = ONE_POINT;
	Parameter = GEN_FIXED;
	OperatorFit[0]=60;  OperatorFit[1]=OperatorFit[0]+40;
	OperatorStart[0] = 70; OperatorStart[1] = 30;
	OperatorEnd[0] = 50; OperatorEnd[1] = 50;
	CrossProb = 0.8;
	MutProb = 0.01;
	ElitismProb = 0.1;
	CurrentChild = 0;
	ChildrenNum = IndNumber;
	Individual = 0;
	Children = 0;
	IndIndex = 0;
	FitIndex = 0;
	Communication = NULL;
}
Genetic::Genetic(int n, int gl)
{
	IndNumber = n;
	GeneLen = gl;
	Elitism = ELITISM;
	Cross = ONE_POINT;
	Parameter = GEN_FIXED;
	OperatorFit[0]=60;  OperatorFit[1]=OperatorFit[0]+40;
	OperatorStart[0] = 70; OperatorStart[1] = 30;
	OperatorEnd[0] = 50; OperatorEnd[1] = 50;
	CrossProb = 0.8;
	MutProb = 0.01;
	ElitismProb = 0.1;
	CurrentChild = 0;
	ChildrenNum = IndNumber;
	IndInit();
	Communication = NULL;
}
Genetic::Genetic(Genetic& g)
{
	Elitism = g.Elitism;
	Cross = g.Cross;
	Parameter = g.Parameter;
	OperatorFit[0] = g.OperatorFit[0];
	OperatorFit[1] = g.OperatorFit[1];
	OperatorStart[0] = g.OperatorStart[0];
	OperatorStart[1] = g.OperatorStart[1];
	OperatorEnd[0] = g.OperatorEnd[0];
	OperatorEnd[1] = g.OperatorEnd[1];
	CrossProb = g.CrossProb;
	MutProb = g.MutProb;
	IndNumber = g.IndNumber;
	GeneLen = g.GeneLen;
	CurrentChild = g.CurrentChild;
	ChildrenNum = g.ChildrenNum;
	ElitismProb = g.ElitismProb;
	Communication = g.Communication;
	IndInit();
	for(int i=0; i<IndNumber; i++)
	{
		Individual[i].Chrom = g.Individual[i].Chrom;
		Individual[i].Fit = g.Individual[i].Fit;
		Individual[i].Val = g.Individual[i].Val;
		FitIndex[i] = g.FitIndex[i];
		IndIndex[i] = g.IndIndex[i];
	}
}

Genetic::~Genetic()
{
	if(Individual) delete []Individual;
	if(Children) delete []Children;
	if(IndIndex) delete []IndIndex;
	if(FitIndex) delete []FitIndex;
}

//設(shè)置個體數(shù)和個體長度
void Genetic::SetNumLen(int IndN, int GLen)
{
	if(Individual) delete []Individual;
	if(Children) delete []Children;
	if(IndIndex) delete []IndIndex;
	if(FitIndex) delete []FitIndex;
	IndNumber = IndN;
	GeneLen = GLen;
	ChildrenNum = IndNumber;
	IndInit();
}

//個體初始化
bool Genetic::IndInit()
{
	Individual = new INDIVIDUAL[IndNumber];
	Children = new INDIVIDUAL[IndNumber];
	IndIndex = new int[IndNumber];
	FitIndex = new double[IndNumber];
	if(Individual && Children && IndIndex && FitIndex) 
	{
		for(int i=0; i<IndNumber; i++)
		{
			Individual[i].Chrom.SetLen(GeneLen);
			Children[i].Chrom.SetLen(GeneLen);
			IndIndex[i] = i;
		}
		return true;
	}
	else return false;
}
//計算總適合度
void Genetic::CalFitIndex()
{
	double allfit = 0;
	for(int i=0; i<IndNumber; i++)
	{
		allfit += Individual[i].Fit-Individual[IndIndex[IndNumber-1]].Fit;
		FitIndex[i] = allfit;
	}
}
//設(shè)置交叉變異適合度
void Genetic::SetOperator(double c, double m)
{
	OperatorFit[0] = c;
	OperatorFit[1] = OperatorFit[0]+m;
}
//設(shè)置標(biāo)志集
void Genetic::SetFlags(CROSS_METHOD c, ELITISM_METHOD e, PARAMETER_METHOD p)
{
	Cross = c;
	Elitism = e;
	Parameter = p;
}
//設(shè)置交叉率和變異率
void Genetic::SetProbability(double c, double m)
{
	CrossProb = c;
	MutProb = m;
}
//獲得第i個個體基因字串
const char* Genetic::GetGeneStr(int i)
{
	return Individual[i].Chrom.GetGeneStr();
}
//計算所有個體適合度
void Genetic::AllFit()
{
	for(int i=0; i<IndNumber; i++)
		GetFit(i);
}
//個體適合度計算
double Genetic::GetFit(int i)
{
	Individual[i].Fit = Individual[i].Val;
	return Individual[i].Fit;
}
//計算所有個體評價函數(shù)值
void Genetic::AllVal()
{
	for(int i=0; i<IndNumber; i++)
		GetVal(i);
}
//計算個體評價函數(shù)值
double Genetic::GetVal(int i)
{
	return EvalVal(Individual[i]);
}
//滾輪選擇方法
int Genetic::Wheel(double* index, int len)
{
	double random = (rand()/(double)RAND_MAX)*index[len-1];
	int i = 0;
	while(random>index[i] && i<len-1) i++;
	return i;
}
//雙親選擇方法
int Genetic::ParentSelect()
{
	return Wheel(FitIndex,IndNumber);
}
//按適合度排序索引數(shù)組
void Genetic::IndexSort()
{
	for(int i=0; i<IndNumber; i++)
	{
		int max = i;
		for(int j=i; j<IndNumber; j++)
			if(Individual[IndIndex[max]].Val<Individual[IndIndex[j]].Val)
				max = j;
		int t = IndIndex[max];
		IndIndex[max] = IndIndex[i];
		IndIndex[i] = t;
	}
}
//算子選擇方法:0-交叉算子,1-變異算子
int Genetic::OperatorSelect()
{
	return Wheel(OperatorFit,2);
}
//變異再生方法
void Genetic::GenMutation()
{
	if(CurrentChild>=ChildrenNum) return;
	int parent = ParentSelect();
	Children[CurrentChild].Chrom = Individual[parent].Chrom.Mutation(MutProb);
	CurrentChild++;
}
//交叉再生方法
void Genetic::GenCross()
{
	if(CurrentChild>=ChildrenNum-1) return;
	int parent1 = ParentSelect();
	int parent2 = ParentSelect();
	if((rand()/(double)RAND_MAX)<CrossProb)
	{
		if(Cross == ONE_POINT)
			Individual[parent1].Chrom.OneCross(Individual[parent2].Chrom,
											   Children[CurrentChild].Chrom,
											   Children[CurrentChild+1].Chrom);
		else if(Cross == TWO_POINT)
			Individual[parent1].Chrom.TwoCross(Individual[parent2].Chrom,
											   Children[CurrentChild].Chrom,
											   Children[CurrentChild+1].Chrom);
		else
			Individual[parent1].Chrom.UniCross(Individual[parent2].Chrom,
											   Children[CurrentChild].Chrom,
											   Children[CurrentChild+1].Chrom);
	}
	else
	{
		Children[CurrentChild].Chrom = Individual[parent1].Chrom;
		Children[CurrentChild+1].Chrom = Individual[parent2].Chrom;
	}
	CurrentChild += 2;
}
//精英方法
void Genetic::GenElitism()
{
	int elitismNum = int(ChildrenNum*ElitismProb);
	if(elitismNum <1) elitismNum = 1;
	if(CurrentChild+elitismNum>IndNumber)
		elitismNum = IndNumber-CurrentChild;
	for(int i=CurrentChild; i<CurrentChild+elitismNum; i++)
		Children[i].Chrom = Individual[IndIndex[i]].Chrom;
	CurrentChild += elitismNum;
}
//產(chǎn)生新一代
void Genetic::Generation()
{
	CurrentChild = 0;
	if(Elitism==ELITISM) GenElitism();
	while(CurrentChild < ChildrenNum-1)
	{
		if(OperatorSelect()==1 || CurrentChild>=ChildrenNum-1)
			GenMutation();
		else
			GenCross();
	}
	INDIVIDUAL *tmpInd;
	tmpInd = Individual;
	Individual = Children;
	Children = tmpInd;
//	for(int i=0; i<ChildrenNum; i++)
//		Individual[IndIndex[IndNumber-i-1]].Chrom = Children[i].Chrom;
	Prepare();
}
//運(yùn)行遺傳算法
const char* Genetic::Run(unsigned long gn)
{
	Prepare();
	double OperatorStep=0;
	if(Parameter == GEN_INTERPOLATION)
		OperatorStep = (OperatorEnd[0]-OperatorStart[0])/gn;
	for(unsigned long generator=0; generator<gn; generator++)
	{
		if(Parameter == GEN_INTERPOLATION)
			OperatorFit[0] += OperatorStep;
		Generation();
		if(Communication!=NULL)
			Communication(Individual[IndIndex[0]].Chrom.GetGeneStr(),
				Individual[IndIndex[0]].Fit,
				Individual[IndIndex[0]].Val);
	}
	return Individual[IndIndex[0]].Chrom.GetGeneStr();
}
//準(zhǔn)備遺傳運(yùn)算
void Genetic::Prepare()
{
	AllVal();
	IndexSort();
	AllFit();
	CalFitIndex();
}
//設(shè)置初始算子適合度
void Genetic::SetOptStartEnd(double s1,double e1,double s2,double e2)
{
	OperatorStart[0] = s1;
	OperatorStart[1] = s2;
	OperatorEnd[0] = e1;
	OperatorEnd[1] = e2;
	OperatorFit[0] = OperatorStart[0];
	OperatorFit[1] = OperatorStart[0]+OperatorEnd[0];
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕精品综合| 欧美日本在线看| 欧美成人bangbros| 成人黄色一级视频| 日本不卡在线视频| ...xxx性欧美| 久久久久久久综合色一本| 欧美色综合网站| 日韩欧美国产电影| 日本韩国精品在线| 国产一区二区三区免费播放| 香蕉加勒比综合久久| 国产精品嫩草久久久久| 欧美一区二区精品| 欧美日韩精品一区二区三区| a4yy欧美一区二区三区| 国内国产精品久久| 免费三级欧美电影| 午夜欧美视频在线观看 | 欧美精品一区二区三区四区| 91国偷自产一区二区三区观看| 国产宾馆实践打屁股91| 另类小说视频一区二区| 日韩中文字幕亚洲一区二区va在线| 亚洲男人的天堂网| 在线播放亚洲一区| 亚洲日穴在线视频| 国产亚洲一二三区| 欧美v日韩v国产v| 欧美巨大另类极品videosbest| 色综合色狠狠天天综合色| 国产麻豆9l精品三级站| 国产真实乱子伦精品视频| 麻豆一区二区99久久久久| 日韩综合小视频| 偷拍亚洲欧洲综合| 午夜私人影院久久久久| 亚洲第一成年网| 亚洲大片免费看| 成人一级片在线观看| 国产成人精品免费在线| 国产成+人+日韩+欧美+亚洲| 国产高清成人在线| 成人av影院在线| www.日韩大片| 91久久精品一区二区三| 在线观看一区二区视频| 欧美亚洲图片小说| 538prom精品视频线放| 日韩亚洲欧美综合| 欧美大胆人体bbbb| 久久综合给合久久狠狠狠97色69| 久久婷婷一区二区三区| 中文字幕第一区二区| 国产精品久久久久天堂| 最新国产精品久久精品| 亚洲免费大片在线观看| 亚洲午夜久久久久久久久电影院| 五月婷婷激情综合| 久久精品国产第一区二区三区| 国产在线精品一区二区不卡了| 国产一区二区三区日韩| 91亚洲精品乱码久久久久久蜜桃| 色婷婷国产精品久久包臀| 制服视频三区第一页精品| 久久综合九色综合欧美就去吻 | 欧美性大战久久久久久久蜜臀| 欧美在线短视频| 日韩视频不卡中文| 亚洲欧洲性图库| 亚洲在线视频免费观看| 精品一区二区三区免费播放| 亚洲天堂网中文字| 欧美美女网站色| 日韩欧美黄色影院| 欧美国产一区在线| 亚洲一区在线视频观看| 精品一区在线看| 91亚洲精品久久久蜜桃网站| 欧美精品123区| 中文字幕第一区二区| 亚洲成人动漫在线观看| 国产剧情av麻豆香蕉精品| 色呦呦日韩精品| 精品国产一区二区三区久久久蜜月 | 日韩欧美123| 亚洲欧洲99久久| 玖玖九九国产精品| av影院午夜一区| 日韩欧美一二三| 一区二区免费视频| 国产一区二区久久| 色一情一乱一乱一91av| 久久综合九色欧美综合狠狠| 欧美精品一区二区三区蜜桃 | 激情综合网av| 色综合激情久久| 久久婷婷综合激情| 天堂成人国产精品一区| 不卡一区在线观看| 精品久久久久久久久久久久包黑料 | 91麻豆免费观看| 久久综合九色综合97_久久久| 亚洲一区二区三区不卡国产欧美| 国产伦精品一区二区三区免费迷| 欧美理论电影在线| 一区二区三区四区精品在线视频| 国产一区二区三区免费播放| 欧美一区二区三区免费视频| 亚洲丝袜精品丝袜在线| 国产精品18久久久| 日韩片之四级片| 无码av中文一区二区三区桃花岛| a美女胸又www黄视频久久| 2017欧美狠狠色| 久久精品国产99| 91精品国产综合久久久久久久久久| 亚洲丝袜精品丝袜在线| www.视频一区| 亚洲国产精品av| 国产精品一区二区在线观看不卡| 日韩欧美一级在线播放| 丝袜诱惑亚洲看片| 欧美日韩不卡一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 国产成人在线免费| 久久亚洲一区二区三区明星换脸| 日韩av成人高清| 91精品国产综合久久国产大片| 亚洲一区二区三区中文字幕在线| 一本大道久久a久久精品综合| 国产精品大尺度| 99re热这里只有精品视频| 国产性做久久久久久| 国产一区二区不卡| 国产喂奶挤奶一区二区三区| 国产成人一区二区精品非洲| 久久色在线观看| 国产成人综合在线播放| 亚洲国产精品成人综合| 99久久精品免费精品国产| 亚洲欧洲精品一区二区精品久久久| 成人av在线资源网站| 成人免费一区二区三区视频| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲视频中文字幕| 色天使色偷偷av一区二区| 亚洲一区二区黄色| 在线电影欧美成精品| 久久精品国内一区二区三区| 久久中文娱乐网| 成人免费高清视频| 亚洲精品免费播放| 欧美日韩一区小说| 蜜臀va亚洲va欧美va天堂| 久久先锋影音av鲁色资源| 成人小视频在线| 一二三区精品视频| 欧美一级久久久| 国产成人av自拍| 久久99深爱久久99精品| 久久蜜桃香蕉精品一区二区三区| 国产成人综合视频| 一区二区三区在线观看动漫| 777xxx欧美| 国产成人无遮挡在线视频| 亚洲激情图片qvod| 日韩美女天天操| 懂色av噜噜一区二区三区av| 一区二区三区成人在线视频| 欧美一级在线观看| 丁香六月综合激情| 午夜影院在线观看欧美| 久久久亚洲精华液精华液精华液| 99久久国产综合精品麻豆| 香蕉成人啪国产精品视频综合网 | 国产一区激情在线| 一区二区视频免费在线观看| 日韩视频免费观看高清完整版| 国产成人av电影在线| 午夜av一区二区| 中文字幕国产一区| 欧美日本在线播放| 白白色亚洲国产精品| 久久不见久久见免费视频1| 中文字幕在线不卡一区| 日韩精品一区二区三区视频在线观看| 大陆成人av片| 免费在线观看视频一区| 国产精品久久三区| 日韩女同互慰一区二区| 99re热视频精品| 国产一区二区三区美女| 亚洲444eee在线观看| 亚洲国产激情av| 欧美一区午夜视频在线观看 | 成人黄色大片在线观看| 免费看日韩精品| 亚洲国产欧美日韩另类综合| 国产精品美日韩|