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

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

?? chrom.cpp

?? 遺傳算法優化源碼
?? CPP
字號:
//頭文件:		Chrom.hpp
//目的:			為染色體提供基類
//語言:			VC++ 6.0
//時間:			1999年6月~2000年1月
//作者:			劉康
//環境:			Win32
//////////////////////////////////////////////////////////////////////

#include <stdlib.h>
#include <time.h>
#include <math.h>
#include "chrom.hpp"

//染色體初始化種子初始化
unsigned Chromosome::Seed = 0;

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

//構造函數
Chromosome::Chromosome()
{
	GeneLen = 0;
	Gene = NULL;
	geneStr = NULL;
}
Chromosome::Chromosome(int l)
{
	GeneLen = l;
	geneStr = new char[GeneLen+1];
	Init();
}
Chromosome::Chromosome(const Chromosome &c)
{
	ChromNum = c.ChromNum;
	GeneLen = c.GeneLen;
	Gene = new OneChmType[ChromNum];
	geneStr = new char[GeneLen+1];
	for(int i=0; i<ChromNum; i++)
		Gene[i] = c.Gene[i];
}

//析構函數
Chromosome::~Chromosome()
{
	if(Gene) delete []Gene;
	if(geneStr) delete[]geneStr;
}

/////////////////////////////////////////////////////////////////////
//私有函數
/////////////////////////////////////////////////////////////////////

//染色體初始化
void Chromosome::Init()
{
	ChromNum = GeneLen/(sizeof(OneChmType)*8)+1;
	Gene = new OneChmType[ChromNum];
	for(int i=0; i<ChromNum; i++)	Gene[i] ^= Gene[i];
	if(!Seed) Seed = (unsigned)time(NULL);
	srand(Seed);
	Seed = Seed+(unsigned)time(NULL);
	for(i=0; i<GeneLen; i++)
	{
		int cNum = i/(sizeof(OneChmType)*8);
		if(rand()>=RAND_MAX/2) 
		{
			Gene[cNum] <<= 1;
			Gene[cNum] |= 0x1;
		}
		else Gene[cNum] <<= 1;
	}
}

/////////////////////////////////////////////////////////////////////
//公有函數
/////////////////////////////////////////////////////////////////////

//設置染色體長度
void Chromosome::SetLen(int l)
{
	if(Gene) delete []Gene;
	GeneLen = l;
	if(geneStr) delete []geneStr;
	geneStr = new char[GeneLen+1];
	Init();
}

//返回字符串形式基因
const char* Chromosome::GetGeneStr()
{
	for(int i=0; i<GeneLen; i++)
	{
		int cNum = i/(sizeof(OneChmType)*8);
		int bit = i-cNum*(sizeof(OneChmType)*8);
		__int64 tmp = 0x1;
		tmp <<= bit;
		if(Gene[cNum] & tmp) geneStr[GeneLen-1-i] = '1';
		else geneStr[GeneLen-1-i] = '0';
	}
	geneStr[GeneLen] = '\0';
	return geneStr;
}

//返回i1位到i2位的整型值,包含i1,i2位
unsigned __int64 Chromosome::GetInt(int i1, int i2)
{
	if((i2-i1)<0 || (i2-i1)>=64 || i1<1) return -1;
	unsigned __int64 tmp=0;
	for(int i=i2-1; i>=i1-1; i--)
	{
		int cNum = i/(sizeof(OneChmType)*8);		//i位所在組
		int bits = i-cNum*(sizeof(OneChmType)*8);	//組內偏移
		OneChmType bit = (0x1<<bits);
		if(Gene[cNum]&bit)
		{
			tmp <<= 1;
			tmp |= 0x1;
		}
		else
			tmp <<= 1;
	}
	return tmp;
}

//=號重載函數
Chromosome& Chromosome::operator = (const Chromosome &c)
{
	if(Gene) delete []Gene;
	GeneLen = c.GeneLen;
	ChromNum = c.ChromNum;
	Gene = new OneChmType[ChromNum];
	for(int i=0; i<ChromNum; i++) Gene[i] = c.Gene[i];
	return *this;
}

//==號重載
bool Chromosome::operator == (const Chromosome &c)
{
	if(GeneLen!=c.GeneLen) return false;
	for(int i=0; i<ChromNum; i++)
		if(Gene[i] != c.Gene[i]) return false;
	return true;
}

//位變異函數
Chromosome Chromosome::Mutation(double prob)
{
	Chromosome temp(*this);
	for(int i=0; i<GeneLen; i++)
	{
		int cNum = i/(sizeof(OneChmType)*8);		//所在組
		int bit = i-cNum*(sizeof(OneChmType)*8);	//組內偏移
		OneChmType bits = (0x1<<bit);
		if(((double)rand()/RAND_MAX)<prob) temp.Gene[cNum] ^= bits;
	}
	return temp;
}

//兩性繁殖函數,一點交叉算子
bool Chromosome::OneCross(Chromosome& lover, Chromosome& chld1, Chromosome& chld2)
{
	if(GeneLen != lover.GeneLen) return false;
	int bits, bit;
	bits = (int)((float)rand()/RAND_MAX*(GeneLen-1)+.5);	//產生交叉點
	int cNum = bits/(sizeof(OneChmType)*8);		//交叉點所在的數組下標
	bit = bits-cNum*(sizeof(OneChmType)*8);		//交叉點數組內叉點
	OneChmType high, low;
	high = 0xffffffffffffffff<<bit;			//交叉點數組運算
	low = ~high;
	chld1.GeneLen = GeneLen;	chld1.Gene[cNum] = 0;
	chld2.GeneLen = GeneLen;	chld2.Gene[cNum] = 0;
	chld1.Gene[cNum] = (Gene[cNum]&high)+(lover.Gene[cNum]&low);
	chld2.Gene[cNum] = (lover.Gene[cNum]&high)+(Gene[cNum]&low);
	for(int i=0; i<ChromNum; i++)				//其它數組運算
	{
		if(i != cNum)
		{
			chld1.Gene[i] = lover.Gene[i];
			chld2.Gene[i] = Gene[i];
		}
	}
	return true;
}
//兩性繁殖,兩點交叉算子
bool Chromosome::TwoCross(Chromosome &lover, Chromosome &chld1, Chromosome &chld2)
{
	if(GeneLen != lover.GeneLen) return false;
	int bit1, bit2, bitt;
	bit1 = (int)((float)rand()/RAND_MAX*(GeneLen-1)+.5);	//產生交叉點1,2
	bit2 = (int)((float)rand()/RAND_MAX*(GeneLen-1)+.5);
	if(bit1 > bit2) {
		bitt = bit1;
		bit1 = bit2;
		bit2 = bitt;
	}
	int cNum1 = bit1/(sizeof(OneChmType)*8);	//交叉點1,2數組下標
	int cNum2 = bit2/(sizeof(OneChmType)*8);
	for(int i=0; i<ChromNum; i++)		//其它組運算
	{
		if(i<cNum1 || i>cNum2)			//1,2點兩邊
		{
			chld1.Gene[i] = lover.Gene[i];
			chld2.Gene[i] = Gene[i];
		}
		else if(i!=cNum1 && i!=cNum2)	//1,2點中間
		{
			chld1.Gene[i] = Gene[i];
			chld2.Gene[i] = lover.Gene[i];
		}
	}
	//兩個交叉數組運算
	int bbit1 = bit1-cNum1*(sizeof(OneChmType)*8);	//1,2交叉數組內叉點
	int bbit2 = bit2-cNum2*(sizeof(OneChmType)*8);
	chld1.Gene[cNum1] = Gene[cNum1];		//交叉點1運算
	chld2.Gene[cNum1] = lover.Gene[cNum1];
	OneChmType bits;
	bits = 0xfffffffffffffff<<bbit1;
	chld1.Gene[cNum1] = (chld1.Gene[cNum1]&bits) | (lover.Gene[cNum1]&~bits);
	chld2.Gene[cNum1] = (chld2.Gene[cNum1]&bits) | (Gene[cNum1]&~bits);
	if(cNum1!=cNum2)						//交叉點2運算
	{
		chld1.Gene[cNum2] = lover.Gene[cNum2];
		chld2.Gene[cNum2] = Gene[cNum2];
	}
	bits = 0xfffffffffffffff<<bbit2;
	chld1.Gene[cNum2] = (chld1.Gene[cNum2]&bits) | (Gene[cNum2]&~bits);
	chld2.Gene[cNum2] = (chld2.Gene[cNum2]&bits) | (lover.Gene[cNum2]&~bits);
	return true;
}

//兩性繁殖,均勻交叉算子
bool Chromosome::UniCross(Chromosome& lover,Chromosome& chld1, Chromosome& chld2)
{
	if(GeneLen != lover.GeneLen) return false;
	OneChmType bit;
	for(int i=0; i<GeneLen; i++)
	{
		int cNum = i/(sizeof(OneChmType)*8);
		if((i-cNum*(sizeof(OneChmType)*8))==0) bit = 0x1;
		if(((float)rand()/RAND_MAX)>.5)
		{
			chld1.Gene[cNum] |= (this->Gene[cNum] & bit);
			chld2.Gene[cNum] |= (lover.Gene[cNum] & bit);
		}
		else
		{
			chld1.Gene[cNum] |= (lover.Gene[cNum] & bit);
			chld2.Gene[cNum] |= (this->Gene[cNum] & bit);
		}
		bit <<= 1;
	}
	return true;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品综合网| 国产黑丝在线一区二区三区| 日韩激情av在线| 成人免费观看视频| 欧美一级片免费看| 亚洲免费在线播放| 国产电影一区在线| 欧美电影在线免费观看| 亚洲日本一区二区| 国产suv精品一区二区6| 欧美一级欧美一级在线播放| 亚洲男人的天堂一区二区| 国内精品国产三级国产a久久 | 93久久精品日日躁夜夜躁欧美| 欧美性一级生活| 国产偷国产偷精品高清尤物| 蜜臀av一级做a爰片久久| 日本电影欧美片| 国产精品久久影院| 国产99久久久精品| 精品国产伦一区二区三区免费 | 欧美精品一区二区三区高清aⅴ | 亚洲另类在线制服丝袜| 99精品视频在线播放观看| 久久综合久久综合亚洲| 久久精品国产一区二区三区免费看| 色国产精品一区在线观看| 中文字幕一区二区在线播放| 成人夜色视频网站在线观看| 久久66热re国产| 亚洲色图色小说| 国产91精品一区二区麻豆亚洲| 91麻豆精品国产| 日韩精品电影一区亚洲| 91精品国产乱| 免费成人性网站| 精品国产免费视频| 国产一区二区在线观看免费 | 成人激情午夜影院| 国产午夜精品一区二区三区视频| 日本伊人精品一区二区三区观看方式| 欧美综合亚洲图片综合区| 亚洲激情图片一区| 欧美日韩精品是欧美日韩精品| 夜夜精品视频一区二区| 欧美日韩电影在线播放| 日日摸夜夜添夜夜添亚洲女人| 欧美国产日本韩| 国产精品123| 国产亚洲欧洲997久久综合| 国产精品原创巨作av| 国产精品丝袜在线| 色呦呦日韩精品| 日韩高清在线电影| 精品对白一区国产伦| 丰满少妇在线播放bd日韩电影| 亚洲欧美综合另类在线卡通| 欧美图区在线视频| 国内精品伊人久久久久av一坑| 欧美国产一区二区| 欧美视频你懂的| 美脚の诱脚舐め脚责91 | 久久综合精品国产一区二区三区| 国产精品一区专区| 一区二区久久久| 精品国产乱码久久久久久牛牛| 色婷婷av久久久久久久| 亚洲人成网站色在线观看| 91精品1区2区| 久久精品免费看| 亚洲人成人一区二区在线观看| 欧美女孩性生活视频| 国产精品一二三区| 亚洲成av人影院| 国产精品久久久99| 欧美一区中文字幕| av资源站一区| 蜜桃av噜噜一区| 亚洲天天做日日做天天谢日日欢| 正在播放一区二区| 不卡的av网站| 精品一区二区免费看| 一区二区三区美女视频| 久久久久久久久免费| 天堂午夜影视日韩欧美一区二区| 欧美成人三级电影在线| av在线这里只有精品| 奇米888四色在线精品| 亚洲欧美偷拍三级| 精品久久久影院| 欧美日韩国产片| 91在线精品一区二区| 国产成人免费在线视频| 日韩在线卡一卡二| 亚洲精品视频在线观看网站| 久久综合成人精品亚洲另类欧美| 欧美在线观看一二区| 99久精品国产| 一区二区三区在线免费视频| 日韩欧美国产系列| 欧美日韩美少妇| 一本色道久久综合精品竹菊| 丁香网亚洲国际| 国产精品亚洲一区二区三区妖精| 欧美bbbbb| 日韩av在线发布| 视频一区二区不卡| 天天做天天摸天天爽国产一区| 一区二区三区日本| 亚洲综合在线视频| 亚洲国产日韩精品| 亚洲综合色丁香婷婷六月图片| 亚洲欧美日韩国产综合| 亚洲欧美视频在线观看视频| 中文字幕一区在线观看视频| 中文字幕制服丝袜成人av| 中文字幕第一区综合| 国产精品毛片久久久久久久| 日本一区二区不卡视频| 国产精品乱码久久久久久| 国产精品免费看片| 亚洲欧洲日韩av| 亚洲精品成人在线| 亚洲第一狼人社区| 美女视频黄a大片欧美| 午夜伊人狠狠久久| 亚洲第一成人在线| 日本成人在线网站| 国内精品写真在线观看| 国产精品一区二区免费不卡| 国产在线精品国自产拍免费| 岛国av在线一区| 91色|porny| 欧美精品在线视频| 精品久久一二三区| 国产精品久久777777| 亚洲男帅同性gay1069| 亚欧色一区w666天堂| 激情欧美一区二区三区在线观看| 激情综合五月天| 99久久婷婷国产综合精品电影 | 成人综合在线视频| 色婷婷国产精品综合在线观看| 欧洲亚洲精品在线| 精品日韩一区二区三区| 亚洲国产综合在线| 国产成人精品1024| 老司机精品视频在线| 国产成人a级片| 91免费小视频| 日韩欧美电影一区| 亚洲人成网站影音先锋播放| 日韩电影免费在线观看网站| 国产99久久久国产精品| 欧美三级蜜桃2在线观看| 精品国产乱码久久| 亚洲精品v日韩精品| 九九热在线视频观看这里只有精品| www.日本不卡| 欧美一级免费大片| 亚洲日本va在线观看| 久久成人麻豆午夜电影| 99精品国产热久久91蜜凸| 日韩欧美一区二区三区在线| 国产精品卡一卡二| 韩国欧美一区二区| 欧美三区在线观看| 国产精品欧美久久久久无广告| 日本欧美久久久久免费播放网| 99九九99九九九视频精品| 久久亚洲一级片| 天天色综合成人网| 99综合影院在线| 国产亚洲成aⅴ人片在线观看| 亚洲国产精品视频| 欧洲一区在线观看| 久久老女人爱爱| 丝袜美腿高跟呻吟高潮一区| 91一区二区三区在线播放| 五月天网站亚洲| 91麻豆免费看片| 国产午夜精品一区二区三区视频| 日韩av一区二区三区| 欧美丝袜自拍制服另类| 中文字幕在线一区免费| 国产91精品一区二区麻豆亚洲| 日韩欧美亚洲国产另类| 日韩高清不卡在线| 欧美日韩免费一区二区三区| 亚洲精品视频在线| 91麻豆国产精品久久| 国产精品久久久久久久久免费桃花| 狠狠色丁香婷婷综合久久片| 日韩亚洲电影在线| 日本伊人色综合网| 日韩欧美激情四射| 久久电影国产免费久久电影| 日韩欧美国产一区二区三区| 蜜乳av一区二区三区| 精品久久国产老人久久综合|