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

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

?? sga(實數編碼).cpp

?? 通過javabean實現計算平均數與方差
?? CPP
字號:
/*-------------------------------------------------------------|
|求函數的最大值 :                                              | 
|       f(x,y)=21.5+x*sin(4*PI*x)+y*sin(20*PI*y)               | 
|                                                              | 
|      定義域  D:  -3<=x<=12.1 , 4.1<=y<=5.8                   | 
| 注:  目前最好結果:f(11.6255448,5.7250441)=38.8502944790207 |
|------------------------------------------------------------*/
#include "iostream.h"
#include "stdio.h"
#include "string"
#include "stdlib.h"
#include "time.h"
#include "math.h"
#include "iomanip.h"
#include "stdafx.h"

using namespace std;

#define PCROSSOVER       0.95 

#define PMUTATION        0.15 
#define POPSIZE          100
#define MAXGEN	         10000
#define PI       3.14159265
#define lbound1  -3
#define ubound1  12.1 
#define lbound2  4.1
#define ubound2  5.8
//double  PMUTATION=0.08;
////////////////////////////Individual Structure/////////////////////////// 
typedef struct Individual 
{
    double   x1;
    double   x2;
	double	fitness;
    double   rfitness;
    double   cfitness; 
}Individual;

Individual Population[POPSIZE+1];
Individual temp[POPSIZE];//定義一個臨時存儲空間存儲將要放入新群體的個體

double TotalFitness=0.0f;
//int curBest=0; 

double lbound[1],ubound[1];

double a;

int curGen=0; 
//////////////////////////Function Prototype//////////////////////////////
void    Initialize(); 

void   EvaluateFitness();

Individual  Roulette();

void Mutate(Individual *indiv);

void Crossover(Individual *dad, Individual *mom);

void GT_Crossover(int m);

int GetWorst(Individual *indiv, int size);

void    Elitist();

void    Report();

//////////////////////////Main()//////////////////////////////////////
int main()
{
    srand((int)time(NULL));

    int change=1;
    
    clock_t start, finish;   	  
    start=clock();
    
    Initialize();
    EvaluateFitness();   
    while(change&&curGen<MAXGEN)
    {  
	   EvaluateFitness();
       Individual dad, mom; 
       int i=0; 
       while(i<POPSIZE) 
	   {
	      dad=Roulette(); 
          do{
             mom = Roulette();
          }while((dad.x1==mom.x1)&&(dad.x2==mom.x2));
          
          Crossover(&dad,&mom); 
          Mutate(&dad);
		  Mutate(&mom);
		  temp[i++]=dad;
          temp[i++]=mom; 
       }
	   GT_Crossover(rand()%3 + 7);        
       //將后代個體放入新群體中 
       for (i=0; i<POPSIZE; i++)
	      Population[i] = temp[i];

       EvaluateFitness(); 

       Elitist(); 
       //Report(); 
       int j;
 //      for(j=1;j<POPSIZE;j++)
  //        if((Population[j].x1!=Population[j-1].x1)||(Population[j].x2!=Population[j-1].x2))  break;
  //     if (POPSIZE==j)   change=0;
       curGen++; 
       //PMUTATION=PMUTATION-0.008;
    }
    
    finish=clock();
    cout<<endl;
    //for (int i=0;i<POPSIZE;i++)
    //   cout<<Population[i].fitness<<endl;
 printf("%.13f\n",Population[POPSIZE].fitness);
	//   cout<<"進化"<<curGen<<"代后的最佳適應值為"<<Population[POPSIZE].fitness<<"耗時"<<(double)finish/1000<<"s"<<endl; 
//	if(getchar()!='\n') ;
    return 0; 
}//main 


//////////////////////////////Function Definition////////////////////////////////// 


//-------------------------Initialize Population------------------------------------------ 
void  Initialize()
{
 
	 for(int i=0;i<POPSIZE;i++)
     {  
       Population[i].x1=lbound1+(ubound1-lbound1)*(double)rand()/RAND_MAX;
       Population[i].x2=lbound2+(ubound2-lbound2)*(double)rand()/RAND_MAX;
       Population[i].fitness=0.0f;
       Population[i].rfitness=0.0f;
       Population[i].cfitness=0.0f;
     }
     return; 
}

//--------------------------Evaluate Fitness------------------------------------------- 
void EvaluateFitness()
{
    double x=0;
    TotalFitness =0; 
    int i;
	// 計算個體的適應值 
    for (i=0; i<POPSIZE; i++)
    {
	    double x,y;
	    x=Population[i].x1;
	    y=Population[i].x2;
        Population[i].fitness = 21.5+x*sin(4*PI*x)+y*sin(20*PI*y);  /////考慮加上一個數避免出現負值
    }    

    //群體總適應值
    for (i=0; i<POPSIZE; i++)
        TotalFitness += Population[i].fitness;    
    
    //計算個體相對適應值 
    if(0==TotalFitness) exit(0);
    else
    for (i=0; i<POPSIZE; i++)    
        Population[i].rfitness = Population[i].fitness/TotalFitness;//需要處理除數為0的情況 
    
    //計算個體累積適應值 
    Population[0].cfitness = Population[0].rfitness; 
	for (i=1;i<POPSIZE;i++)
        Population[i].cfitness = Population[i].rfitness + Population[i-1].cfitness;	 
    return;
}


//---------------通過輪盤選擇策略從舊群體中獲取個體 ---------------------------
Individual  Roulette()
{
	if(Population[POPSIZE - 1].cfitness <= (double)rand()/RAND_MAX)
		return Population[POPSIZE];
    for (int i=0; i<POPSIZE; i++)
	{
		if (Population[i].cfitness>(double)rand()/RAND_MAX) 
			return Population[i];
	}
	if(i == POPSIZE)
	{
		cout<<"ERROR";
		exit(1);
	}
}


//---------------------------------- 交叉 ---------------------------------------
void Crossover(Individual *dad, Individual *mom)
{
  if((double)rand()/RAND_MAX<PCROSSOVER)
  {
    double u1,u2;
    double v1,v2;
    a=(double)curGen/(double)MAXGEN; //a如何取比較合適 
    u1=(*dad).x1;
    u2=(*dad).x2;
    v1=(*mom).x1;
    v2=(*mom).x2;
    
    (*dad).x1=v1*a+u1*(1-a);
    (*dad).x2=v2*a+u2*(1-a);
    
    (*mom).x1=u1*a+v1*(1-a);
    (*mom).x2=u2*a+v2*(1-a);
  }
  return;
}

void GT_Crossover(int m)
{
	Individual tempindiv;
	int i, *index, *sel, select, size;
	double *r, s;
	index = new int[POPSIZE];
	sel = new int[m];
	r = new double[m];

	for(i=0; i < POPSIZE; i++)
		index[i] = i;
	size = POPSIZE;
	for(i = 0; i < m; i++)
	{
		select = rand()%size;
		sel[i] = index[select];
		index[select] = index[--size];
	}

	s = r[0] = -0.5 + (double)rand()/RAND_MAX * 2;
	for(i = 1; i < m - 1; i++)
	{
		r[i] = -0.5 + (double)rand()/RAND_MAX*(1.5 - s);
		s+= r[i];
	}
	r[m - 1] = 1 - s;

	tempindiv.x1 = 0;
	tempindiv.x2 = 0;
	
	if((double)rand()/RAND_MAX < 0.1)
		for(i=0; i < m; i++)
			tempindiv.x1 += Population[sel[i]].x1 * r[i];
	if((double)rand()/RAND_MAX < 0.1)
		for(i = 0; i < m; i++)
			tempindiv.x2 += Population[sel[i]].x2 * r[i];

	double x=tempindiv.x1;
	double y=tempindiv.x2;
    tempindiv.fitness = 21.5+x*sin(4*PI*x)+y*sin(20*PI*y); 

	int worstindex = GetWorst(Population, POPSIZE);
	if(tempindiv.fitness > Population[worstindex].fitness)
		Population[worstindex] = tempindiv;
	delete[] index;
	delete[] sel;
	delete[] r;
}

//------------------------------------單點變異---------------------------------------
void Mutate(Individual *indiv)
{
 	if ((double)rand()/RAND_MAX < PMUTATION)
	{
	   (*indiv).x1= lbound1+(ubound1-lbound1)*((double)rand()/RAND_MAX);
	   (*indiv).x2= lbound2+(ubound2-lbound2)*((double)rand()/RAND_MAX);
    }

	return;
}


//------------------------------實施精英策略------------------------------------- 
void  Elitist()
{
    double best,worst;
    int bestIndex,worstIndex;
    best=Population[0].fitness;
    worst=Population[0].fitness;
    for (int i=0;i<POPSIZE-1; ++i)
    {
      if(Population[i].fitness > Population[i+1].fitness)
      {      
        if (Population[i].fitness >= best)
        {
            best = Population[i].fitness;
            bestIndex = i;
         }
         if (Population[i+1].fitness <= worst)
         {
            worst = Population[i+1].fitness;
            worstIndex = i + 1;
         }
       }
       else
       {
          if (Population[i].fitness <= worst)
          {
              worst = Population[i].fitness;
              worstIndex = i;
           }
           if (Population[i+1].fitness >= best)
           {
              best = Population[i+1].fitness;
              bestIndex = i + 1;
            }
        }
      }

    //若新群體的最好個體比前一代的最好個體還好,則新群體的個體放入POPSIZE單元中; 
    //否則用前一代的最佳個體置換當前群體的最壞個體
    if (best >= Population[POPSIZE].fitness)
    {
       Population[POPSIZE] = Population[bestIndex];
    }
    else
    {
       Population[worstIndex] = Population[POPSIZE];
    } 
}

int GetWorst(Individual *indiv, int size)
{
	int worstindex = 0;
	for(int i = 1; i < size; i++)
	{
		if(indiv[i].fitness < indiv[worstindex].fitness)
			worstindex = i;
	}
	return worstindex;
}

//-------------------Print Information of Generations------------------------

void Report()
{
    cout<<"TotalFitness is  "<<TotalFitness<<endl; 
	cout.setf(ios::left,ios::adjustfield);
    cout.fill(' ');
    cout<<setw(16)<<"變量值";
    cout<<setw(10)<<"Fitness";
    cout<<setw(18)<<"RelativeFitness";
    cout<<setw(20)<<"CumulativeFitness"<<endl; 
    cout.setf(ios::right,ios::adjustfield); 
    for(int i=0;i<POPSIZE;i++)
    {
       cout<<setw(16)<<Population[i].x1<<" "<<Population[i].x2;
       cout<<setw(10)<<Population[i].fitness;
       cout<<setw(18)<<Population[i].rfitness;
       cout<<setw(20)<<Population[i].cfitness<<endl; 
    }
    return; 
} 



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99日本精品| aaa国产一区| 成人美女在线视频| 91福利精品第一导航| 91丝袜呻吟高潮美腿白嫩在线观看| 99久久免费精品高清特色大片| 欧美视频日韩视频| 国产亚洲精品福利| 香蕉av福利精品导航| 国产一区二区精品久久| 91蝌蚪porny九色| 日韩女优av电影| 亚洲一区二区三区美女| 美女免费视频一区二区| 91麻豆国产香蕉久久精品| 日韩手机在线导航| 亚洲精品国产一区二区精华液 | 国产精品无码永久免费888| 亚洲综合在线视频| 国产成人免费视频网站 | 91原创在线视频| 91在线观看污| 久久精品在线免费观看| 日韩经典一区二区| 色综合久久久网| 日韩美女视频一区| 国产乱码精品一区二区三区五月婷| 欧美亚洲自拍偷拍| 亚洲18女电影在线观看| 99精品热视频| 自拍偷在线精品自拍偷无码专区| 狠狠色2019综合网| 日韩一区二区三免费高清| 日韩国产欧美三级| 欧美三级中文字幕在线观看| 亚洲欧美日韩综合aⅴ视频| 国产精品主播直播| 欧美一区二区三区系列电影| 亚洲二区在线观看| 色视频一区二区| 中文乱码免费一区二区| 丁香婷婷综合网| 久久久国产精品麻豆 | 日韩理论片一区二区| 懂色av中文字幕一区二区三区| 精品国产一区二区国模嫣然| 蜜臀a∨国产成人精品| 91精品国产入口| 久久精品国产成人一区二区三区 | 国产精品免费看片| 国产成人在线网站| 国产丝袜美腿一区二区三区| 国产乱对白刺激视频不卡| 精品1区2区在线观看| 午夜婷婷国产麻豆精品| 国产精品麻豆99久久久久久| 成人综合在线网站| 日韩欧美国产系列| 免费亚洲电影在线| 国产精品毛片久久久久久久| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 亚洲.国产.中文慕字在线| 欧美精品日韩一区| 久久国产婷婷国产香蕉| 欧美一区二区三区不卡| 久久精品国产免费看久久精品| 26uuu亚洲| 99精品久久久久久| 丝袜美腿亚洲综合| 日韩欧美一卡二卡| 大桥未久av一区二区三区中文| 欧美韩日一区二区三区| 欧洲色大大久久| 久久99精品久久久| 欧美国产一区二区| 欧美色视频在线| 日韩avvvv在线播放| 久久久精品2019中文字幕之3| 9i看片成人免费高清| 亚洲精品综合在线| 欧美mv日韩mv| 色婷婷久久久久swag精品| 首页亚洲欧美制服丝腿| 亚洲色图19p| 日韩欧美电影一区| av不卡在线播放| 蜜桃精品视频在线| 欧美一区二区三区的| av成人免费在线观看| 理论电影国产精品| 国产欧美日韩久久| 欧美乱熟臀69xxxxxx| 国产成人免费高清| 午夜精彩视频在线观看不卡| 欧美刺激午夜性久久久久久久| 国产精品白丝jk黑袜喷水| 亚洲一卡二卡三卡四卡无卡久久| 欧美一区二区美女| 99精品国产热久久91蜜凸| 免费日韩伦理电影| 亚洲福利视频三区| 国产精品三级电影| 欧美成人性战久久| 欧美欧美欧美欧美首页| 国产精品综合av一区二区国产馆| 亚洲成人一区在线| 国产精品不卡在线观看| 精品国产91洋老外米糕| 666欧美在线视频| 欧美三级视频在线播放| 色屁屁一区二区| 色视频欧美一区二区三区| av在线不卡网| proumb性欧美在线观看| www.欧美精品一二区| 99久久er热在这里只有精品15 | 日本在线观看不卡视频| 日韩经典一区二区| 久久国内精品视频| 国产乱一区二区| 国产美女一区二区| 国产91清纯白嫩初高中在线观看| 国产麻豆日韩欧美久久| 国产在线精品一区二区夜色| 精品一区精品二区高清| 国产乱码精品1区2区3区| 国产黄色成人av| 99国产精品久| 在线视频你懂得一区二区三区| 欧美专区亚洲专区| 欧美日韩国产经典色站一区二区三区| 91福利视频久久久久| 91精品婷婷国产综合久久| 日韩欧美www| 国产精品护士白丝一区av| 亚洲男人的天堂在线aⅴ视频| 一区二区三区日韩欧美| 亚洲3atv精品一区二区三区| 日韩电影一区二区三区| 韩国三级电影一区二区| 成人黄色av电影| 欧美视频在线不卡| 精品美女在线播放| 一色屋精品亚洲香蕉网站| 亚洲综合视频在线观看| 毛片av一区二区| 福利电影一区二区三区| 日本韩国欧美一区| 日韩视频免费直播| 亚洲视频图片小说| 亚洲3atv精品一区二区三区| 国产一区高清在线| 色婷婷综合中文久久一本| 欧美成人在线直播| 亚洲精品成人精品456| 美腿丝袜在线亚洲一区| 大胆亚洲人体视频| 制服丝袜在线91| 中文字幕制服丝袜成人av| 日韩精品欧美成人高清一区二区| 国产成人精品www牛牛影视| 欧美综合一区二区| 国产亚洲综合av| 天堂蜜桃91精品| 99综合电影在线视频| 久久精品一区蜜桃臀影院| 一区二区在线观看视频| 久久99日本精品| 欧美系列一区二区| 欧美激情艳妇裸体舞| 免费看日韩精品| 在线欧美小视频| 国产农村妇女精品| 麻豆国产欧美日韩综合精品二区| 91小视频在线观看| 久久久久久久久久久久久久久99 | 久久电影国产免费久久电影| 色丁香久综合在线久综合在线观看| 久久久久久99精品| 久久99热狠狠色一区二区| 欧美日韩一本到| 亚洲欧美偷拍卡通变态| 成人美女视频在线观看18| 久久精品夜夜夜夜久久| 久久99国产精品麻豆| 这里只有精品视频在线观看| 一区二区三区四区蜜桃 | 中文字幕欧美三区| 精品在线亚洲视频| 日韩一级片在线观看| 首页国产欧美日韩丝袜| 欧美日韩国产不卡| 一区二区三区四区在线播放| 91麻豆国产福利在线观看| 中文字幕日韩一区二区| 不卡视频在线观看| 国产精品乱码一区二区三区软件 | 亚洲日本青草视频在线怡红院| 国产91精品免费| 国产精品免费久久|