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

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

?? desolver.cpp

?? 遺傳算法的差異算法源代碼
?? CPP
字號:
#include <memory.h>
#include "DESolver.h"

#define Element(a,b,c)  a[b*nDim+c]
#define RowVector(a,b)  (&a[b*nDim])
#define CopyVector(a,b) memcpy((a),(b),nDim*sizeof(double))

DESolver::DESolver(int dim,int popSize) :
					nDim(dim), nPop(popSize),
					generations(0), strategy(stRand1Exp),
					scale(0.7), probability(0.5), bestEnergy(0.0),
					trialSolution(0), bestSolution(0),
					popEnergy(0), population(0)
{
	trialSolution = new double[nDim];
	bestSolution  = new double[nDim];
	popEnergy	  = new double[nPop];
	population	  = new double[nPop * nDim];

	return;
}

DESolver::~DESolver(void)
{
	if (trialSolution) delete trialSolution;
	if (bestSolution) delete bestSolution;
	if (popEnergy) delete popEnergy;
	if (population) delete population;

	trialSolution = bestSolution = popEnergy = population = 0;
	return;
}

void DESolver::Setup(double *min,double *max,
						int deStrategy,double diffScale,double crossoverProb)
{
	int i;

	strategy	= deStrategy;
	scale		= diffScale;
	probability = crossoverProb;
	
	for (i=0; i < nPop; i++)
	{
		for (int j=0; j < nDim; j++)
			Element(population,i,j) = RandomUniform(min[j],max[j]);

		popEnergy[i] = 1.0E20;
	}

	for (i=0; i < nDim; i++)
		bestSolution[i] = 0.0;

	switch (strategy)
	{
		case stBest1Exp:
			calcTrialSolution = Best1Exp;
			break;

		case stRand1Exp:
			calcTrialSolution = Rand1Exp;
			break;

		case stRandToBest1Exp:
			calcTrialSolution = RandToBest1Exp;
			break;

		case stBest2Exp:
			calcTrialSolution = Best2Exp;
			break;

		case stRand2Exp:
			calcTrialSolution = Rand2Exp;
			break;

		case stBest1Bin:
			calcTrialSolution = Best1Bin;
			break;

		case stRand1Bin:
			calcTrialSolution = Rand1Bin;
			break;

		case stRandToBest1Bin:
			calcTrialSolution = RandToBest1Bin;
			break;

		case stBest2Bin:
			calcTrialSolution = Best2Bin;
			break;

		case stRand2Bin:
			calcTrialSolution = Rand2Bin;
			break;
	}

	return;
}

bool DESolver::Solve(int maxGenerations)
{
	int generation;
	int candidate;
	bool bAtSolution;

	bestEnergy = 1.0E20;
	bAtSolution = false;

	for (generation=0;(generation < maxGenerations) && !bAtSolution;generation++)
		for (candidate=0; candidate < nPop; candidate++)
		{
			(this->*calcTrialSolution)(candidate);
			trialEnergy = EnergyFunction(trialSolution,bAtSolution);

			if (trialEnergy < popEnergy[candidate])
			{
				// New low for this candidate
				popEnergy[candidate] = trialEnergy;
				CopyVector(RowVector(population,candidate),trialSolution);

				// Check if all-time low
				if (trialEnergy < bestEnergy)
				{
					bestEnergy = trialEnergy;
					CopyVector(bestSolution,trialSolution);
				}
			}
		}

	generations = generation;
	return(bAtSolution);
}

void DESolver::Best1Exp(int candidate)
{
	int r1, r2;
	int n;

	SelectSamples(candidate,&r1,&r2);
	n = (int)RandomUniform(0.0,(double)nDim);

	CopyVector(trialSolution,RowVector(population,candidate));
	for (int i=0; (RandomUniform(0.0,1.0) < probability) && (i < nDim); i++) 
	{
		trialSolution[n] = bestSolution[n]
							+ scale * (Element(population,r1,n)
							- Element(population,r2,n));
		n = (n + 1) % nDim;
	}

	return;
}

void DESolver::Rand1Exp(int candidate)
{
	int r1, r2, r3;
	int n;

	SelectSamples(candidate,&r1,&r2,&r3);
	n = (int)RandomUniform(0.0,(double)nDim);

	CopyVector(trialSolution,RowVector(population,candidate));
	for (int i=0; (RandomUniform(0.0,1.0) < probability) && (i < nDim); i++) 
	{
		trialSolution[n] = Element(population,r1,n)
							+ scale * (Element(population,r2,n)
							- Element(population,r3,n));
		n = (n + 1) % nDim;
	}

	return;
}

void DESolver::RandToBest1Exp(int candidate)
{
	int r1, r2;
	int n;

	SelectSamples(candidate,&r1,&r2);
	n = (int)RandomUniform(0.0,(double)nDim);

	CopyVector(trialSolution,RowVector(population,candidate));
	for (int i=0; (RandomUniform(0.0,1.0) < probability) && (i < nDim); i++) 
	{
		trialSolution[n] += scale * (bestSolution[n] - trialSolution[n])
							 + scale * (Element(population,r1,n)
							 - Element(population,r2,n));
		n = (n + 1) % nDim;
	}

	return;
}

void DESolver::Best2Exp(int candidate)
{
	int r1, r2, r3, r4;
	int n;

	SelectSamples(candidate,&r1,&r2,&r3,&r4);
	n = (int)RandomUniform(0.0,(double)nDim);

	CopyVector(trialSolution,RowVector(population,candidate));
	for (int i=0; (RandomUniform(0.0,1.0) < probability) && (i < nDim); i++) 
	{
		trialSolution[n] = bestSolution[n] +
							scale * (Element(population,r1,n)
										+ Element(population,r2,n)
										- Element(population,r3,n)
										- Element(population,r4,n));
		n = (n + 1) % nDim;
	}

	return;
}

void DESolver::Rand2Exp(int candidate)
{
	int r1, r2, r3, r4, r5;
	int n;

	SelectSamples(candidate,&r1,&r2,&r3,&r4,&r5);
	n = (int)RandomUniform(0.0,(double)nDim);

	CopyVector(trialSolution,RowVector(population,candidate));
	for (int i=0; (RandomUniform(0.0,1.0) < probability) && (i < nDim); i++) 
	{
		trialSolution[n] = Element(population,r1,n)
							+ scale * (Element(population,r2,n)
										+ Element(population,r3,n)
										- Element(population,r4,n)
										- Element(population,r5,n));
		n = (n + 1) % nDim;
	}

	return;
}

void DESolver::Best1Bin(int candidate)
{
	int r1, r2;
	int n;

	SelectSamples(candidate,&r1,&r2);
	n = (int)RandomUniform(0.0,(double)nDim);

	CopyVector(trialSolution,RowVector(population,candidate));
	for (int i=0; i < nDim; i++) 
	{
		if ((RandomUniform(0.0,1.0) < probability) || (i == (nDim - 1)))
			trialSolution[n] = bestSolution[n]
								+ scale * (Element(population,r1,n)
											- Element(population,r2,n));
		n = (n + 1) % nDim;
	}

	return;
}

void DESolver::Rand1Bin(int candidate)
{
	int r1, r2, r3;
	int n;

	SelectSamples(candidate,&r1,&r2,&r3);
	n = (int)RandomUniform(0.0,(double)nDim);

	CopyVector(trialSolution,RowVector(population,candidate));
	for (int i=0; i < nDim; i++) 
	{
		if ((RandomUniform(0.0,1.0) < probability) || (i  == (nDim - 1)))
			trialSolution[n] = Element(population,r1,n)
								+ scale * (Element(population,r2,n)
												- Element(population,r3,n));
		n = (n + 1) % nDim;
	}

	return;
}

void DESolver::RandToBest1Bin(int candidate)
{
	int r1, r2;
	int n;

	SelectSamples(candidate,&r1,&r2);
	n = (int)RandomUniform(0.0,(double)nDim);

	CopyVector(trialSolution,RowVector(population,candidate));
	for (int i=0; i < nDim; i++) 
	{
		if ((RandomUniform(0.0,1.0) < probability) || (i  == (nDim - 1)))
			trialSolution[n] += scale * (bestSolution[n] - trialSolution[n])
									+ scale * (Element(population,r1,n)
												- Element(population,r2,n));
		n = (n + 1) % nDim;
	}

	return;
}

void DESolver::Best2Bin(int candidate)
{
	int r1, r2, r3, r4;
	int n;

	SelectSamples(candidate,&r1,&r2,&r3,&r4);
	n = (int)RandomUniform(0.0,(double)nDim);

	CopyVector(trialSolution,RowVector(population,candidate));
	for (int i=0; i < nDim; i++) 
	{
		if ((RandomUniform(0.0,1.0) < probability) || (i  == (nDim - 1)))
			trialSolution[n] = bestSolution[n]
								+ scale * (Element(population,r1,n)
											+ Element(population,r2,n)
											- Element(population,r3,n)
											- Element(population,r4,n));
		n = (n + 1) % nDim;
	}

	return;
}

void DESolver::Rand2Bin(int candidate)
{
	int r1, r2, r3, r4, r5;
	int n;

	SelectSamples(candidate,&r1,&r2,&r3,&r4,&r5);
	n = (int)RandomUniform(0.0,(double)nDim);

	CopyVector(trialSolution,RowVector(population,candidate));
	for (int i=0; i < nDim; i++) 
	{
		if ((RandomUniform(0.0,1.0) < probability) || (i  == (nDim - 1)))
			trialSolution[n] = Element(population,r1,n)
								+ scale * (Element(population,r2,n)
											+ Element(population,r3,n)
											- Element(population,r4,n)
											- Element(population,r5,n));
		n = (n + 1) % nDim;
	}

	return;
}

void DESolver::SelectSamples(int candidate,int *r1,int *r2,
										int *r3,int *r4,int *r5)
{
	if (r1)
	{
		do
		{
			*r1 = (int)RandomUniform(0.0,(double)nPop);
		}
		while (*r1 == candidate);
	}

	if (r2)
	{
		do
		{
			*r2 = (int)RandomUniform(0.0,(double)nPop);
		}
		while ((*r2 == candidate) || (*r2 == *r1));
	}

	if (r3)
	{
		do
		{
			*r3 = (int)RandomUniform(0.0,(double)nPop);
		}
		while ((*r3 == candidate) || (*r3 == *r2) || (*r3 == *r1));
	}

	if (r4)
	{
		do
		{
			*r4 = (int)RandomUniform(0.0,(double)nPop);
		}
		while ((*r4 == candidate) || (*r4 == *r3) || (*r4 == *r2) || (*r4 == *r1));
	}

	if (r5)
	{
		do
		{
			*r5 = (int)RandomUniform(0.0,(double)nPop);
		}
		while ((*r5 == candidate) || (*r5 == *r4) || (*r5 == *r3)
													|| (*r5 == *r2) || (*r5 == *r1));
	}

	return;
}

/*------Constants for RandomUniform()---------------------------------------*/
#define SEED 3
#define IM1 2147483563
#define IM2 2147483399
#define AM (1.0/IM1)
#define IMM1 (IM1-1)
#define IA1 40014
#define IA2 40692
#define IQ1 53668
#define IQ2 52774
#define IR1 12211
#define IR2 3791
#define NTAB 32
#define NDIV (1+IMM1/NTAB)
#define EPS 1.2e-7
#define RNMX (1.0-EPS)

double DESolver::RandomUniform(double minValue,double maxValue)
{
	long j;
	long k;
	static long idum;
	static long idum2=123456789;
	static long iy=0;
	static long iv[NTAB];
	double result;

	if (iy == 0)
		idum = SEED;

	if (idum <= 0)
	{
		if (-idum < 1)
			idum = 1;
		else
			idum = -idum;

		idum2 = idum;

		for (j=NTAB+7; j>=0; j--)
		{
			k = idum / IQ1;
			idum = IA1 * (idum - k*IQ1) - k*IR1;
			if (idum < 0) idum += IM1;
			if (j < NTAB) iv[j] = idum;
		}

		iy = iv[0];
	}

	k = idum / IQ1;
	idum = IA1 * (idum - k*IQ1) - k*IR1;

	if (idum < 0)
		idum += IM1;

	k = idum2 / IQ2;
	idum2 = IA2 * (idum2 - k*IQ2) - k*IR2;

	if (idum2 < 0)
		idum2 += IM2;

	j = iy / NDIV;
	iy = iv[j] - idum2;
	iv[j] = idum;

	if (iy < 1)
		iy += IMM1;

	result = AM * iy;

	if (result > RNMX)
		result = RNMX;

	result = minValue + result * (maxValue - minValue);
	return(result);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级亚洲高清视频| 久久不见久久见免费视频7| 亚洲精品中文在线影院| 亚洲va欧美va天堂v国产综合| 国产一区二区在线影院| 欧美日韩一本到| 国产精品久久久久一区二区三区共| 亚洲国产精品综合小说图片区| 国产二区国产一区在线观看| 欧美精品精品一区| 亚洲精品免费视频| www.亚洲在线| 久久亚洲免费视频| 亚洲成av人片在www色猫咪| av一区二区久久| 国产欧美日韩三级| 国产一区不卡视频| 欧美一区二区三区免费观看视频| 一级日本不卡的影视| 成人久久久精品乱码一区二区三区| 日韩视频免费观看高清完整版在线观看 | 91.成人天堂一区| 亚洲日本在线观看| www.欧美色图| 亚洲国产精品ⅴa在线观看| 国产伦精品一区二区三区视频青涩| 欧美精选在线播放| 日本亚洲天堂网| 91精品国产91久久综合桃花 | 2019国产精品| 久久国产成人午夜av影院| 777久久久精品| 午夜影院久久久| 欧美丝袜第三区| 亚洲主播在线观看| 欧美亚洲国产bt| 亚洲国产一区二区三区青草影视| 色美美综合视频| 亚洲18女电影在线观看| 91精品国产美女浴室洗澡无遮挡| 日本一区中文字幕 | 欧美日韩一级二级三级| 图片区日韩欧美亚洲| 日韩午夜激情av| 激情久久五月天| 国产人成亚洲第一网站在线播放| 成人深夜福利app| 亚洲欧美另类小说视频| 欧美日韩日日摸| 久久99精品视频| 青青草伊人久久| 国产精品卡一卡二| 日韩西西人体444www| 9191精品国产综合久久久久久| 欧美乱妇15p| 久久久91精品国产一区二区三区| 国产精品毛片a∨一区二区三区| 中文字幕成人在线观看| 亚洲自拍欧美精品| 亚洲成人免费看| 国产一区二区三区在线观看免费 | 精品伦理精品一区| 国产美女精品人人做人人爽| 中文字幕高清不卡| 欧美亚日韩国产aⅴ精品中极品| 天堂成人免费av电影一区| 精品免费99久久| 91国偷自产一区二区三区观看 | 日韩一级在线观看| 国产 日韩 欧美大片| 亚洲愉拍自拍另类高清精品| 日韩一区二区在线播放| 成人av一区二区三区| 日韩高清电影一区| 国产精品理伦片| 欧美成人一级视频| 欧美在线观看一区| 国产成人精品免费在线| 丝袜国产日韩另类美女| 国产精品你懂的在线欣赏| 欧美午夜精品久久久久久超碰| 久久精品国产久精国产爱| 亚洲另类在线一区| 国产欧美中文在线| 日韩视频免费观看高清完整版 | 亚洲少妇30p| 日韩久久久精品| 在线观看www91| www.欧美日韩国产在线| 精品亚洲欧美一区| 亚洲综合色成人| 欧美激情中文字幕一区二区| 日韩精品在线网站| 欧美在线免费观看视频| 99久久精品国产毛片| 国产美女精品在线| 激情综合色综合久久| 天堂影院一区二区| 亚洲老妇xxxxxx| 中文字幕亚洲综合久久菠萝蜜| 精品国产乱码久久久久久免费| 欧美综合天天夜夜久久| 91小视频免费观看| 国产福利视频一区二区三区| 蜜臀久久99精品久久久久久9| 亚洲综合一区二区| 亚洲日韩欧美一区二区在线| 国产精品系列在线| 国产欧美精品一区| 久久久亚洲高清| 久久久蜜臀国产一区二区| 精品免费国产一区二区三区四区| 日韩色视频在线观看| 日韩欧美国产电影| 欧美成人猛片aaaaaaa| 欧美成人激情免费网| 91麻豆精品国产| 91 com成人网| 日韩欧美中文字幕一区| 日韩一区二区在线观看视频播放| 日韩三级视频在线看| 精品国产免费一区二区三区四区 | 悠悠色在线精品| 亚洲私人黄色宅男| 一区二区三区欧美日韩| 亚洲成人福利片| 一区二区激情小说| 亚洲柠檬福利资源导航| 亚洲免费在线观看视频| 亚洲午夜免费电影| 日韩电影在线一区二区三区| 日本欧美一区二区三区| 捆绑调教美女网站视频一区| 精品一区二区日韩| 国产精品 日产精品 欧美精品| 国产成人精品一区二| 99久久精品国产一区| 欧美在线看片a免费观看| 欧美情侣在线播放| 精品国产乱子伦一区| 久久午夜色播影院免费高清| 国产精品盗摄一区二区三区| 一区二区日韩av| 日韩精品电影在线| 国产成人福利片| 在线精品视频免费播放| 欧美一区二区在线免费播放| 久久午夜羞羞影院免费观看| 亚洲欧美日韩精品久久久久| 亚洲一区二区三区激情| 国产精品一区二区久激情瑜伽| 91小视频在线| 337p日本欧洲亚洲大胆精品 | 国产日韩综合av| 亚洲女爱视频在线| 韩国在线一区二区| 97久久人人超碰| 日韩写真欧美这视频| 国产精品久久久久久久久免费丝袜 | 亚洲大尺度视频在线观看| 精品在线播放午夜| 在线观看中文字幕不卡| 久久理论电影网| 日韩1区2区日韩1区2区| 在线观看成人免费视频| 国产欧美日韩另类一区| 美女尤物国产一区| 在线观看视频一区| 国产精品女上位| 精品综合久久久久久8888| 欧美日韩日本视频| 亚洲精品视频在线| 国产河南妇女毛片精品久久久 | 日韩和欧美的一区| 91小宝寻花一区二区三区| 久久精品一区四区| 看片网站欧美日韩| 欧美丰满高潮xxxx喷水动漫 | 日韩电影在线免费| 国产jizzjizz一区二区| 日韩久久久久久| 日韩福利电影在线| 欧美性色aⅴ视频一区日韩精品| 欧美国产1区2区| 国产乱码精品一区二区三区忘忧草| 777久久久精品| 亚洲成在人线免费| 欧美日韩一区在线| 亚洲福利一二三区| 欧洲一区在线电影| 一区av在线播放| 欧美吞精做爰啪啪高潮| 亚洲欧美成aⅴ人在线观看| 波多野结衣精品在线| 国产精品丝袜黑色高跟| 成人h动漫精品| 国产精品久久久久久久久久久免费看| 国产美女av一区二区三区| 26uuu亚洲综合色| 国产精品中文欧美|