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

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

?? ga.cpp

?? 基于VC開發的自適應遺傳算法源程序 大家一起學習吧
?? CPP
字號:
// GA.cpp: implementation of the GA class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "2level.h"
#include "GA.h"

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

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

GA::GA()
{
	
	

}

GA::~GA()
{
	

}


//不需要改變
int GA::constraint_check(double x[],global y)
{
	de_dragmodel yield;
	pressmodel press;
	speedmodel speed;
	torquemodel torque;
	powermodel power;
	double rH[5];
	int i;
	if((4.25>x[1])&&(x[1]>x[2])&&(x[2]>x[3])&&(x[3]>x[4])&&
		(x[1]<y.h[0]+0.2)&&(x[1]>y.h[0]-0.2)&&(x[2]<y.h[1]+0.2)&&(x[2]>y.h[1]-0.2)&&(x[3]<y.h[2]+0.2)&&(x[1]>y.h[2]-0.2))
	{
		y.h[0]=x[1];
		y.h[1]=x[2];
		y.h[2]=x[3];
				
		y.H[1]=y.h[0];
		y.H[2]=y.h[1];
		y.H[3]=y.h[2];
		
		//compute the relative press value  of  1 stand to 4 stand;

		rH[0]=(y.H[0]-y.h[0])/y.H0;
		rH[1]=(y.H[0]-y.h[1])/y.H0;
		rH[2]=(y.H[0]-y.h[2])/y.H0;
		rH[3]=(y.H[0]-y.h[3])/y.H0;
		rH[4]=(y.H[0]-y.h[4])/y.H0;

		for(i=0;i<=4;i++)
		{
			y.r[i]=(y.H[i]-y.h[i])/y.H[i];
		
		}
		
		//compute the yield ;
	
		for (i=0;i<=4;i++)
		{
			y.de_drag[i]=yield.de_drag(y.m,rH[i]);

		}
	
		//compute the press value of every stand;
	
		for (i=0;i<=4;i++)
		{
			y.P[i]=press.press1(i,y,y.de_drag[i]);
			if(y.P[i]>y.max_P)
			{
				return 0;
			}
		}
	
		//compute the rolling speed;
		for(i=0;i<=4;i++)
		{
			y.vr[i]=speed.roll_speed(i,y);
		}
	
		//compute the torque of every stand;
			
		for(i=0;i<=4;i++)
		{
			y.MM[i]=torque.torque(i,y);
			
		
		}
				
		//compute the power of every stand;
			
		for(i=0;i<=4;i++)
		{
			y.W[i]=power.power(i,y);
			if(y.W[i]>y.max_power[i])
			{
				return 0;
			}
		}
		return 1;
	}
	else
	{
		return 0;
	}
}

void GA::initialization(double H0,double h4,global y)
{
	
	int k;
	double h[4];
	
	double H[4];
	double x[5];
	bool nn;
	h[3]=y.h[3];
		
	//編碼
   
	for(k=1; k<=POP_SIZE; k++)
	{
		nn=false;
	 
		while(nn==false)
		{
			/*
			h[0]=myu(0.68*H0,0.9*H0);
			H[1]=h[0];
			h[1]=myu(0.65*H[1],0.9*H[1]);
			H[2]=h[1];
			h[2]=myu(0.7*H[2],0.9*H[2]);
			H[3]=h[2];
			*/
			
			h[0]=myu(y.h[0]-0.3,y.h[0]+0.3);
			H[1]=h[0];
			h[1]=myu(y.h[1]-0.3,y.h[1]+0.3);
			H[2]=h[1];
			h[2]=myu(y.h[2]-0.3,y.h[2]+0.3);
			H[3]=h[2];
		
			if(H[3]<h[3])
			{
				H[3]=1.05*h[3];
				h[2]=H[3];

			}
		
			if(H[2]<h[2])
			{
				H[2]=1.05*h[2];
				h[1]=H[2];
			}
			if(H[1]<h[1])
			{
				H[1]=1.05*h[1];
				h[0]=H[1];
			}

			x[1]=h[0];
			x[2]=h[1];
			x[3]=h[2];
			x[4]=1.5;
			
			if(constraint_check(x,y)==1)
			{
				CHROMOSOME[k][1]=h[0];
				CHROMOSOME[k][2]=h[1];
				CHROMOSOME[k][3]=h[2];
				nn=true;
						
			}
			
		}
		
	 }
	
	
	return;
}
void GA::objective_function(global y)
{
	double x1,x2,x3;
	de_dragmodel yield;
	pressmodel press;
	speedmodel speed;

	torquemodel torque;
	powermodel power;
	double sum_power_ratio=0; //功率平衡因數和
	double aver_power_ratio;  //平均功率平衡因數
  	
	double rH[5];
	int i,j;
	for(j = 1; j <= POP_SIZE; j++)
	{
		x1 = CHROMOSOME[j][1];
		x2 = CHROMOSOME[j][2];
		x3 = CHROMOSOME[j][3];
		
		y.h[4]=y.h5;
		y.h[0]=x1;
		y.h[1]=x2;
		y.h[2]=x3;
		y.h[3]=y.h[4]/(1-0.05);
		
		y.H[0]=y.H0;
		y.H[1]=y.h[0];
		y.H[2]=y.h[1];
		y.H[3]=y.h[2];
		y.H[4]=y.h[3];
		
		//compute the relative press value  of  1 stand to 4 stand;

		rH[0]=(y.H[0]-y.h[0])/y.H0;
		rH[1]=(y.H[0]-y.h[1])/y.H0;
		rH[2]=(y.H[0]-y.h[2])/y.H0;
		rH[3]=(y.H[0]-y.h[3])/y.H0;
		rH[4]=(y.H[0]-y.h[4])/y.H0;

		for(i=0;i<=4;i++)
		{
			y.r[i]=(y.H[i]-y.h[i])/y.H[i];
		
		}
		
		//compute the yield ;
	
		for (i=0;i<=4;i++)
		{
			y.de_drag[i]=yield.de_drag(y.m,rH[i]);

		}
	
		//compute the press value of every stand;
	
		for (i=0;i<=4;i++)
		{
			y.P[i]=press.press1(i,y,y.de_drag[i]);
		}
	
		//compute the rolling speed;
		for(i=0;i<=4;i++)
		{
			y.vr[i]=speed.roll_speed(i,y);
		}
	
		//compute the torque of every stand;
				
		for(i=0;i<=4;i++)
		{
			y.MM[i]=torque.torque(i,y);
		
		}
				
		//compute the power of every stand;
			
		for(i=0;i<=4;i++)
		{
			y.W[i]=power.power(i,y);
		}
		
		//計算平衡因數
		
		for(i=0;i<=3;i++)
		{
			y.power_ratio[i]=y.W[i]/y.max_power[i];
		}
		//compute the average power ratio
		
		for(i=1;i<=3;i++)
		{
			sum_power_ratio=sum_power_ratio+y.power_ratio[i];
		}
		aver_power_ratio=sum_power_ratio/3;
		
		y.ratio[0]=y.P[0]/y.P[1];
	
		y.ratio[1]=y.power_ratio[1]/aver_power_ratio;
		y.ratio[2]=y.power_ratio[2]/aver_power_ratio;
		y.ratio[3]=y.power_ratio[3]/aver_power_ratio;

		double a[4];
		a[0]=0.8;
		a[1]=1;
		a[2]=1;
		a[3]=1;
		
		OBJECTIVE[j][1]=0;
		for(i=0;i<=3;i++)
		{
			OBJECTIVE[j][1] = OBJECTIVE[j][1]+100*a[i]*(1-y.ratio[i])*(1-y.ratio[i]);
			
		}
		
	}
	for(j=1;j<=POP_SIZE;j++)
	{
	  OBJECTIVE[j][0]= OBJECTIVE[j][1];
	
	}
	return;
}

double *GA::GA_1(global y)
{	
	int i;
	double pp[POP_SIZE+1];
	////////////////
	double sum_object;
	double sum_q;
	////////////////
	double *p;
	sum_object=0;
	sum_q=0;
	for(int j=0;j<=POP_SIZE;j++)
	{
		sum_object=sum_object+OBJECTIVE[j][0];

	}
	for(j=0;j<=POP_SIZE;j++)
	{
		q[j]=1-OBJECTIVE[j][0]/sum_object;
		sum_q=sum_q+q[j];
	}
	for(j=1;j<=POP_SIZE;j++)
	{
		q[j]=q[j-1]+q[j]/sum_q;
	}
	initialization(y.H0,y.h[4],y);
	evaluation(0,y);
	
	for(i=1; i<=GEN; i++) 
	{
		p=mutation_probability(i);
		for(j=1;j<=POP_SIZE;j++)
		{
			pp[j]=p[j];
		}
		selection();
		crossover2(y,i);
		mutation(y,pp,i);
		evaluation(i,y);
		/////////////////////////
		sum_object=0;
		sum_q=0;
		for(j=0;j<=POP_SIZE;j++)
		{
			sum_object=sum_object+OBJECTIVE[j][0];

		}
		for(j=0;j<=POP_SIZE;j++)
		{
			q[j]=1-OBJECTIVE[j][0]/sum_object;
			sum_q=sum_q+q[j];
		}
		for(j=1;j<=POP_SIZE;j++)
		{
			q[j]=q[j-1]+q[j]/sum_q;
		}
		////////////////////////
		if(OBJECTIVE[0][0]<0.1)
		{			
			break;
		}
		
	}
	
	CHROMOSOME[0][0]=i;
		
	return &CHROMOSOME[0][0];

		
}
void GA::evaluation(int gen,global y)
{
	double a;
	int   i, j, k, label;
	objective_function(y);
	if(gen==0)
	{
		for(k=0; k<=M; k++) OBJECTIVE[0][k]=OBJECTIVE[1][k];
		for(j = 1; j <= N; j++) CHROMOSOME[0][j]=CHROMOSOME[1][j];
	}
	for(i=0; i<POP_SIZE; i++)
	{                  
		//排序,從好到壞
	    label=0;  
	    a=OBJECTIVE[i][1];
	    for(j=i+1; j<=POP_SIZE; j++)
		{
			if((TYPE*a)<(TYPE*OBJECTIVE[j][1]))//找出最好值
			{
				a=OBJECTIVE[j][1];  
			    label=j;
			}
		}
	    if(label!=0) 
		{
			for(k=0; k<=M; k++) 
			{
				a=OBJECTIVE[i][k];
			    OBJECTIVE[i][k]=OBJECTIVE[label][k];
			    OBJECTIVE[label][k]=a;
			}
		    for(j=1; j<=N; j++) 
			{
				a=CHROMOSOME[i][j];
		        CHROMOSOME[i][j]=CHROMOSOME[label][j];
			    CHROMOSOME[label][j]=a;
			}
		}
  }
 
 return;
  
}

void GA::selection()
{
	double r, temp[POP_SIZE+1][N+1];
	int   i, j, k;
	for(i=1; i<=POP_SIZE; i++) 
	{
		r=myu(0, q[POP_SIZE]);
		for(j=0; j<=POP_SIZE; j++) 
		{
			if(r<=q[j]) 
			{
				for(k=1; k<=N; k++) temp[i][k]=CHROMOSOME[j][k];
				break;
			}
		}
	}
	for(i=1; i<=POP_SIZE; i++)
		for(k=1; k<=N; k++)
			CHROMOSOME[i][k]=temp[i][k];
}

void GA::crossover(global y)
{
	int   i, j, jj, k, pop;
	double r, x[N+2], z[N+1];
	pop=POP_SIZE/2;
	for(i=1; i<=pop; i++) 
	{
		if(myu(0,1)>P_CROSSOVER) continue;
		j=(int)myu(1,POP_SIZE);
		jj=(int)myu(1,POP_SIZE);
		r=myu(0,1);
		//沒有直接編碼成二進制,而是用十進制編碼
		for(k=1; k<=N; k++) 
		{
			x[k]=r*CHROMOSOME[j][k]+(1-r)*CHROMOSOME[jj][k];   
			z[k]=r*CHROMOSOME[jj][k]+(1-r)*CHROMOSOME[j][k];
		}
		x[N+1]=1.5;
		if(constraint_check(x,y)==1)
			for(k=1; k<=N; k++) CHROMOSOME[j][k]=x[k];
		if(constraint_check(z,y)==1)
			for(k=1; k<=N; k++) CHROMOSOME[jj][k]=z[k];
	}
}
void  GA::crossover2(global y,int kk)
{
	double p1=1;
	double a=0.92;
	int   i, j, jj, k, pop;
	double r, x[N+2], z[N+1];
	p1=p1*exp(sqrt(sqrt(kk))*log(a));
	pop=POP_SIZE/2;
	for(i=1; i<=pop; i++) 
	{
		if(myu(0,1)<p1) continue;
		j=(int)myu(1,POP_SIZE);
		jj=(int)myu(1,POP_SIZE);
		r=myu(0,1);
		//沒有直接編碼成二進制,而是用十進制編碼
		for(k=1; k<=N; k++) 
		{
			x[k]=r*CHROMOSOME[j][k]+(1-r)*CHROMOSOME[jj][k];   
			z[k]=r*CHROMOSOME[jj][k]+(1-r)*CHROMOSOME[j][k];
		}
		x[N+1]=1.5;
		if(constraint_check(x,y)==1)
			for(k=1; k<=N; k++) CHROMOSOME[j][k]=x[k];
		if(constraint_check(z,y)==1)
			for(k=1; k<=N; k++) CHROMOSOME[jj][k]=z[k];
	}

}

void GA::mutation(global y,double pp[POP_SIZE+1],int kk)
{
	int i, j, k;
	double x[N+1], z[N+1], infty, direction[N+1];
	double INFTY=0.8, precision=0.001;
	double a=0.7;
	INFTY=1.2*exp(sqrt(sqrt(kk))*log(a));
		
	for(i=1; i<=POP_SIZE; i++)
	{
		if(myu(0,1)<pp[i]) continue;
		for(k=1; k<=N; k++) x[k] = CHROMOSOME[i][k];
		for(k=1; k<=N; k++)
		{
			direction[k]=myu(-1,1);
		}
		infty=myu(0,INFTY);
		while(infty>precision) 
		{
			for(j=1; j<=N; j++) z[j]=x[j]+infty*direction[j];
			if(constraint_check(z,y)==1) 
			{
				for(k=1; k<=N; k++) CHROMOSOME[i][k]=z[k];
				break;
			}
			infty=myu(0,infty);
		}
	}
}
double *GA::mutation_probability(int k)
{
	double p1;
	double p2;
	double a;
	double pc[POP_SIZE+1];
	//////////////
	//中間變量;
	double min;
	double sum;
	double aver;
	//////////////
	p1=0.2;
	p2=0.02;
	a=0.9;
	min=OBJECTIVE[1][1];
	sum=0;
	aver=0;
	/*
	for(int i=2;i<=POP_SIZE;i++)
	{
		if(OBJECTIVE[i][1]<min)
		{
			min=OBJECTIVE[i][1];
		}
		sum=sum+OBJECTIVE[i][1];
	}
	aver=sum/POP_SIZE;
	for(i=1;i<=POP_SIZE;i++)
	{
		if(OBJECTIVE[i][1]>aver)
		{
			pc[i]=p1;
			pc[i]=pc[i]*exp(sqrt(k)*log(a));
		}
		else
		{
			pc[i]=p2+(p1-p2)*(OBJECTIVE[i][1]-min)/(aver-min);
			pc[i]=pc[i]*exp(sqrt(k)*log(a));
		}

	}
	*/
	
	///////////////////////////////////////////////////////////
	for(int i=2;i<=POP_SIZE;i++)
	{
		if(OBJECTIVE[i][1]>min)
		{
			min=OBJECTIVE[i][1];
		}
		sum=sum+OBJECTIVE[i][1];
	}
	aver=sum/POP_SIZE;
	for(i=1;i<=POP_SIZE;i++)
	{
		if(OBJECTIVE[i][1]<aver)
		{
			pc[i]=p1;
			pc[i]=pc[i]*exp(sqrt(k)*log(a));
		}
		else
		{
			pc[i]=p2+(p1-p2)*(min-OBJECTIVE[i][1])/(min-aver);
			pc[i]=pc[i]*exp(sqrt(k)*log(a));
		}

	}
	
	///////////////////////////////////////////////////
	return &pc[0];

}
double GA::myu(double a, double b) // Uniform Distribution
{
  double y;
  if(a>b) {
	AfxMessageBox("請重新調整數據范圍");
	exit(1);
  }
  y = (double)rand()/(RAND_MAX);
  return (a+(b-a)*y); 
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区 二区| 亚洲欧洲性图库| 欧美日韩视频在线第一区| jlzzjlzz亚洲女人18| 国产精品资源在线| 国产在线麻豆精品观看| 裸体在线国模精品偷拍| 六月丁香婷婷色狠狠久久| 麻豆精品国产91久久久久久| 久久精品99国产国产精| 极品少妇一区二区| 韩国女主播一区二区三区| 国产在线精品一区二区| 国产成人超碰人人澡人人澡| 成人蜜臀av电影| a4yy欧美一区二区三区| 色综合久久久网| 欧美亚洲另类激情小说| 91精品国产色综合久久不卡蜜臀 | 国产喷白浆一区二区三区| 久久九九久久九九| 亚洲日本护士毛茸茸| 亚洲女人小视频在线观看| 亚洲福利国产精品| 日本欧美一区二区| 国产99久久久精品| 欧美亚洲高清一区| 久久这里只有精品6| 日韩毛片精品高清免费| 日韩电影免费在线看| 国产精品一二三区| 欧美色综合网站| 国产午夜精品一区二区| 夜夜嗨av一区二区三区四季av| 视频一区二区欧美| 成人午夜免费视频| 欧美一区二区三区日韩| 国产精品久久免费看| 亚洲人xxxx| 日本不卡视频一二三区| av电影在线观看不卡| 日韩欧美一级在线播放| 亚洲欧洲中文日韩久久av乱码| 日韩精品免费专区| 99久久精品免费观看| xf在线a精品一区二区视频网站| 亚洲欧美区自拍先锋| 国产伦理精品不卡| 在线观看视频91| 国产日韩v精品一区二区| 亚洲成人一区二区| 色悠久久久久综合欧美99| 精品99999| 免费成人av资源网| 在线观看国产91| 国产精品全国免费观看高清| 日本aⅴ免费视频一区二区三区 | 在线免费观看成人短视频| 精品少妇一区二区三区视频免付费| 亚洲欧美日韩在线| 国产成人免费视频精品含羞草妖精 | 亚洲精品久久久蜜桃| 国产在线视频一区二区三区| 欧美一区二区视频在线观看2020| 中文字幕制服丝袜一区二区三区| 韩国欧美国产1区| 欧美一区二区视频在线观看| 亚洲成人福利片| 欧洲一区二区三区免费视频| 国产精品理伦片| 成人免费福利片| 欧美高清在线视频| 丰满亚洲少妇av| 国产精品乱人伦| 成人性生交大片免费 | 成人av第一页| 国产午夜精品一区二区| 极品尤物av久久免费看| 久久综合久久鬼色| 国产一区二区影院| 国产亚洲福利社区一区| 东方欧美亚洲色图在线| 中文字幕不卡在线观看| 国产高清不卡一区| 国产精品亲子乱子伦xxxx裸| 成人福利视频在线| 亚洲黄色av一区| 欧美日韩大陆一区二区| 日日摸夜夜添夜夜添国产精品 | 韩国视频一区二区| 久久丝袜美腿综合| 国产精品1区2区3区在线观看| 欧美激情一区二区三区蜜桃视频| 成人激情综合网站| 亚洲午夜激情网页| 精品va天堂亚洲国产| 成人中文字幕在线| 亚洲午夜在线电影| 欧美xxxxxxxx| 99视频国产精品| 五月天国产精品| 日韩三级伦理片妻子的秘密按摩| 久久99国产精品久久99 | 亚洲午夜精品在线| 91麻豆精品国产| 国产乱码精品一区二区三区五月婷 | 日韩在线卡一卡二| 久久色在线观看| 欧美视频日韩视频| 韩国一区二区三区| 伊人夜夜躁av伊人久久| 精品日韩在线一区| 91久久国产综合久久| 狠狠色综合色综合网络| 亚洲精品中文在线| 精品国一区二区三区| 色综合 综合色| 国产黑丝在线一区二区三区| 亚洲成av人片在线观看| 日本一区二区三区国色天香| 欧美色视频在线| 成人不卡免费av| 免费在线观看视频一区| 尤物在线观看一区| 久久久久久久久久久电影| 欧美日韩aaaaaa| 99久久久免费精品国产一区二区 | 91影院在线免费观看| 蜜桃av一区二区在线观看| 亚洲三级在线观看| 久久久蜜桃精品| 精品少妇一区二区| 欧美日韩一区成人| 成人高清伦理免费影院在线观看| 天堂资源在线中文精品| 一区二区三区在线播放| 国产精品热久久久久夜色精品三区 | 欧洲亚洲国产日韩| 99久久久精品| 国产成人h网站| 国产一区二区三区综合| 日韩av不卡一区二区| 亚洲成人午夜影院| 一区二区三区四区在线| 亚洲免费av网站| 亚洲免费av观看| 亚洲激情欧美激情| 亚洲乱码一区二区三区在线观看| 亚洲国产岛国毛片在线| 久久久久久久网| 国产日产精品1区| 欧美激情一区二区| 国产精品国产自产拍高清av| 国产欧美日韩麻豆91| 欧美国产日韩a欧美在线观看| 久久免费视频一区| 久久精品这里都是精品| 国产欧美在线观看一区| 国产拍揄自揄精品视频麻豆| 亚洲国产经典视频| 国产精品久久久久久久久免费丝袜 | www亚洲一区| 国产三级欧美三级日产三级99 | 91在线小视频| 91视频在线观看| 欧美午夜宅男影院| 欧美一级日韩一级| 久久久午夜电影| 亚洲视频一二三区| 亚洲国产精品久久久久婷婷884 | 国产婷婷精品av在线| 中文字幕巨乱亚洲| 一区二区三区加勒比av| 日韩成人精品视频| 国产盗摄一区二区三区| 一本色道综合亚洲| 欧美日韩高清一区二区| 久久先锋影音av| 一区二区三区四区五区视频在线观看| 亚洲综合成人在线视频| 婷婷成人激情在线网| 激情都市一区二区| 一本久道久久综合中文字幕| 欧美日韩精品高清| 久久久精品影视| 亚洲成国产人片在线观看| 亚洲国产日产av| 国内成人精品2018免费看| 91小视频在线免费看| 欧美一级二级在线观看| 国产精品国产馆在线真实露脸| 亚洲国产中文字幕| 国产成人精品亚洲午夜麻豆| 色偷偷88欧美精品久久久| 日韩欧美色综合网站| 国产精品成人午夜| 久久国产精品免费| 欧美性受极品xxxx喷水| 久久精品一区二区三区不卡牛牛| 亚洲一级二级在线|