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

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

?? genetic1.cpp.txt

?? 為遺傳算法提供基類
?? 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;
}
//計(jì)算總適合度
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();
}
//計(jì)算所有個體適合度
void Genetic::AllFit()
{
	for(int i=0; i<IndNumber; i++)
		GetFit(i);
}
//個體適合度計(jì)算
double Genetic::GetFit(int i)
{
	Individual[i].Fit = Individual[i].Val;
	return Individual[i].Fit;
}
//計(jì)算所有個體評價函數(shù)值
void Genetic::AllVal()
{
	for(int i=0; i<IndNumber; i++)
		GetVal(i);
}
//計(jì)算個體評價函數(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一区二区三区免费野_久草精品视频
欧美一级高清片在线观看| 精品一区二区日韩| 日本丶国产丶欧美色综合| 亚洲欧美激情在线| 2欧美一区二区三区在线观看视频| 偷拍日韩校园综合在线| 欧美一区二区福利在线| 麻豆国产一区二区| 国产女主播视频一区二区| 国产成人免费在线视频| 综合自拍亚洲综合图不卡区| 91福利国产成人精品照片| 亚洲国产日韩a在线播放性色| 88在线观看91蜜桃国自产| 久久se精品一区二区| 欧美激情在线一区二区三区| 色先锋资源久久综合| 亚洲高清在线精品| 欧美电视剧在线看免费| www..com久久爱| 亚洲第一福利一区| 久久婷婷色综合| 91麻豆国产自产在线观看| 日韩一区欧美二区| 国产亚洲精品福利| 欧美私模裸体表演在线观看| 精彩视频一区二区三区| 亚洲免费大片在线观看| 日韩一级黄色大片| 99麻豆久久久国产精品免费| 日韩国产欧美三级| 最好看的中文字幕久久| 亚洲视频你懂的| 日韩欧美国产精品| 色妞www精品视频| 久久国产三级精品| 亚洲影院理伦片| 国产调教视频一区| 欧美高清视频一二三区| 成人精品国产一区二区4080| 五月天久久比比资源色| 国产精品美女一区二区| 欧美一二三区精品| 色香色香欲天天天影视综合网| 精品夜夜嗨av一区二区三区| 亚洲一区精品在线| 国产精品美女久久久久aⅴ国产馆| 69堂亚洲精品首页| 在线观看日韩毛片| 99精品国产一区二区三区不卡| 麻豆一区二区三区| 污片在线观看一区二区| 综合欧美一区二区三区| 久久久久亚洲综合| 日韩三级高清在线| 色综合久久久久综合99| 丰满白嫩尤物一区二区| 日本aⅴ精品一区二区三区| 亚洲一区二区三区四区在线免费观看| 久久久影院官网| 欧美电影免费观看高清完整版在线 | 激情成人午夜视频| 首页综合国产亚洲丝袜| 一区二区三区在线观看欧美| 1区2区3区欧美| 国产精品伦一区二区三级视频| 精品国产一区二区三区久久影院| 91精品国产高清一区二区三区| 欧洲日韩一区二区三区| 91极品美女在线| 在线视频一区二区三| 91欧美一区二区| 91免费版在线| 色八戒一区二区三区| 91看片淫黄大片一级在线观看| 成人av在线资源| 粉嫩蜜臀av国产精品网站| 国产成人精品一区二区三区四区 | 亚洲v中文字幕| 亚洲国产美女搞黄色| 亚洲一区中文在线| 亚洲综合丝袜美腿| 国产成人精品免费在线| 久久99国产精品尤物| 国产精品一级黄| 成人午夜免费av| 97aⅴ精品视频一二三区| 91蜜桃免费观看视频| 在线免费观看一区| 欧美高清激情brazzers| 日韩欧美亚洲国产另类| 26uuu精品一区二区| 国产日韩三级在线| |精品福利一区二区三区| 亚洲女同女同女同女同女同69| 亚洲精品成人天堂一二三| 亚洲成人中文在线| 久久精品国产亚洲5555| 高清在线不卡av| 在线免费观看日本欧美| 日韩一二三四区| 国产三级欧美三级日产三级99| 国产精品色呦呦| 亚洲一区二区影院| 美腿丝袜亚洲三区| 成人激情av网| 欧美精品久久99| 久久精品夜夜夜夜久久| 一区二区三区免费在线观看| 婷婷一区二区三区| 国产精品1024| 欧美日韩亚洲不卡| 久久久.com| 亚洲国产一区二区三区青草影视| 日本欧美韩国一区三区| 成人精品视频一区二区三区| 欧美色综合影院| 欧美韩国日本一区| 日本视频一区二区| 99精品欧美一区二区蜜桃免费| 欧美精品高清视频| 国产精品久久久久影院色老大| 婷婷成人综合网| 成人高清视频免费观看| 欧美一级精品在线| 亚洲精品福利视频网站| 国产精品一区专区| 欧美久久久久免费| 偷拍一区二区三区| 99久久99精品久久久久久| 日韩欧美你懂的| 一区二区三区成人| 成人少妇影院yyyy| 欧美成人综合网站| 亚洲成人第一页| 99久久精品国产一区| 26uuu另类欧美亚洲曰本| 亚洲图片自拍偷拍| 99久久婷婷国产综合精品电影 | 欧美影片第一页| 国产精品欧美久久久久一区二区| 免费在线观看不卡| 欧洲在线/亚洲| 国产免费久久精品| 激情国产一区二区| 欧美电影在线免费观看| 樱花影视一区二区| 不卡视频在线观看| www精品美女久久久tv| 日本欧美肥老太交大片| 欧美久久久一区| 亚洲电影一级片| 在线影院国内精品| 亚洲人精品午夜| eeuss国产一区二区三区| 国产欧美日韩视频在线观看| 久久se精品一区精品二区| 3d成人动漫网站| 丝袜美腿亚洲综合| 91精品国产综合久久蜜臀| 亚洲18影院在线观看| 欧美色大人视频| 亚洲电影第三页| 欧美日韩中文精品| 亚洲va韩国va欧美va| 欧美三区免费完整视频在线观看| 亚洲品质自拍视频| 在线观看不卡一区| 亚洲午夜精品久久久久久久久| 欧美在线一二三四区| 亚洲成精国产精品女| 国产精品短视频| 成人在线视频一区二区| 日本一区二区久久| 91丝袜美腿高跟国产极品老师| 成人免费一区二区三区在线观看| 99re亚洲国产精品| 一区二区三区色| 欧美日韩免费电影| 日韩电影免费在线| 精品福利一二区| 岛国一区二区在线观看| 亚洲手机成人高清视频| 在线观看视频一区| 人人爽香蕉精品| 2021久久国产精品不只是精品| 国产精品一二三四区| 中文字幕一区免费在线观看 | 成人午夜伦理影院| 亚洲精品视频在线观看免费| 欧美日韩美女一区二区| 激情五月激情综合网| 国产欧美久久久精品影院| 色94色欧美sute亚洲线路一ni| 无吗不卡中文字幕| 国产亚洲1区2区3区| 91精品办公室少妇高潮对白| 秋霞午夜鲁丝一区二区老狼| 久久精品一区八戒影视| 欧洲精品视频在线观看|