青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

振動理論

我的C++實現(xiàn)之路

C++遺傳算法源程序

// CMVSOGA.h : main header file for the CMVSOGA.cpp
////////////////////////////////////////////////////////////////////
/////                                                          /////
/////                沈陽航空工業(yè)學(xué)院 動力工程系               /////
/////                       作者:李立新                       /////
/////                   完成日期:2006.08.02                   /////
/////                   修改日期:2007.04.10                                       /////
////////////////////////////////////////////////////////////////////

#if !defined(AFX_CMVSOGA_H__45BECA_61EB_4A0E_9746_9A94D1CCF767__INCLUDED_)
#define AFX_CMVSOGA_H__45BECA_61EB_4A0E_9746_9A94D1CCF767__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "Afxtempl.h"
#define variablenum 14
class CMVSOGA
{
public:
 CMVSOGA();
 ~CMVSOGA();
 void selectionoperator();
 void crossoveroperator();
 void mutationoperator();
 void initialpopulation(int, int ,double ,double,double *,double *);           //種群初始化
 void generatenextpopulation();          //生成下一代種群
 void evaluatepopulation();           //評價個體,求最佳個體
 void calculateobjectvalue();          //計算目標(biāo)函數(shù)值
 void calculatefitnessvalue();          //計算適應(yīng)度函數(shù)值
 void findbestandworstindividual();         //尋找最佳個體和最差個體
 void performevolution();   
 void GetResult(double *);
 void GetPopData(CList <double,double>&);
 void SetFitnessData(CList <double,double>&,CList <double,double>&,CList <double,double>&);
private:
 struct individual
 {
  double chromosome[variablenum];         //染色體編碼長度應(yīng)該為變量的個數(shù)
  double value;        
  double fitness;             //適應(yīng)度
 };
 double variabletop[variablenum];         //變量值
 double variablebottom[variablenum];         //變量值
 int popsize;              //種群大小
// int generation;              //世代數(shù)
 int best_index;  
 int worst_index;
 double crossoverrate;            //交叉率
 double mutationrate;            //變異率
 int maxgeneration;             //最大世代數(shù)
 struct individual bestindividual;         //最佳個體
 struct individual worstindividual;         //最差個體
 struct individual current;              //當(dāng)前個體
 struct individual current1;              //當(dāng)前個體
 struct individual currentbest;          //當(dāng)前最佳個體
 CList <struct individual,struct individual &> population;   //種群
 CList <struct individual,struct individual &> newpopulation;  //新種群
 CList <double,double> cfitness;          //存儲適應(yīng)度值
 //怎樣使鏈表的數(shù)據(jù)是一個結(jié)構(gòu)體????主要是想把種群作成鏈表。節(jié)省空間。
};
#endif

 

執(zhí)行文件:

// CMVSOGA.cpp : implementation file
//

#include "stdafx.h"
//#include "vld.h"
#include "CMVSOGA.h"
#include "math.h"
#include "stdlib.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMVSOGA.cpp
CMVSOGA::CMVSOGA()
{
 best_index=0;  
 worst_index=0;
 crossoverrate=0;            //交叉率
 mutationrate=0;            //變異率
 maxgeneration=0;
}
CMVSOGA::~CMVSOGA()
{
 best_index=0;  
 worst_index=0;
 crossoverrate=0;            //交叉率
 mutationrate=0;            //變異率
 maxgeneration=0;
 population.RemoveAll();   //種群
 newpopulation.RemoveAll();  //新種群
 cfitness.RemoveAll(); 
}
void CMVSOGA::initialpopulation(int ps, int gen ,double cr ,double mr,double *xtop,double *xbottom)  //第一步,初始化。
{
 //應(yīng)該采用一定的策略來保證遺傳算法的初始化合理,采用產(chǎn)生正態(tài)分布隨機(jī)數(shù)初始化?選定中心點(diǎn)為多少?
 int i,j;
 popsize=ps;
 maxgeneration=gen;
 crossoverrate=cr;
 mutationrate =mr;
 for (i=0;i<variablenum;i++)
 {
  variabletop[i] =xtop[i];
  variablebottom[i] =xbottom[i];
 }
 //srand( (unsigned)time( NULL ) );  //尋找一個真正的隨機(jī)數(shù)生成函數(shù)。
 for(i=0;i<popsize;i++)
 { 
  for (j=0;j<variablenum ;j++)
  {
   current.chromosome[j]=double(rand()%10000)/10000*(variabletop[j]-variablebottom[j])+variablebottom[j];
  }
  current.fitness=0;
  current.value=0;
  population.InsertAfter(population.FindIndex(i),current);//除了初始化使用insertafter外,其他的用setat命令。
 }
}
void CMVSOGA::generatenextpopulation()//第三步,生成下一代。
{
 //srand( (unsigned)time( NULL ) );
 selectionoperator();
 crossoveroperator();
 mutationoperator();
}
//void CMVSOGA::evaluatepopulation()   //第二步,評價個體,求最佳個體
//{
// calculateobjectvalue();
// calculatefitnessvalue();   //在此步中因該按適應(yīng)度值進(jìn)行排序.鏈表的排序.
// findbestandworstindividual();
//}
void CMVSOGA:: calculateobjectvalue()  //計算函數(shù)值,應(yīng)該由外部函數(shù)實現(xiàn)。主要因為目標(biāo)函數(shù)很復(fù)雜。
{
 int i,j;
    double x[variablenum];
 for (i=0; i<popsize; i++)
 {
  current=population.GetAt(population.FindIndex(i)); 
  current.value=0;
  //使用外部函數(shù)進(jìn)行,在此只做結(jié)果的傳遞。
  for (j=0;j<variablenum;j++)
  {
   x[j]=current.chromosome[j];
   current.value=current.value+(j+1)*pow(x[j],4);
  }
  ////使用外部函數(shù)進(jìn)行,在此只做結(jié)果的傳遞。
  population.SetAt(population.FindIndex(i),current);
 }
}

void CMVSOGA::mutationoperator()  //對于浮點(diǎn)數(shù)編碼,變異算子的選擇具有決定意義。
          //需要guass正態(tài)分布函數(shù),生成方差為sigma,均值為浮點(diǎn)數(shù)編碼值c。
{
// srand((unsigned int) time (NULL));
 int i,j;
 double r1,r2,p,sigma;//sigma高斯變異參數(shù)
 
 for (i=0;i<popsize;i++)
 {
  current=population.GetAt(population.FindIndex(i));

  //生成均值為current.chromosome,方差為sigma的高斯分布數(shù)
  for(j=0; j<variablenum; j++)
  {   
   r1 = double(rand()%10001)/10000;
   r2 = double(rand()%10001)/10000;
   p = double(rand()%10000)/10000;
   if(p<mutationrate)
   {
    double sign;
    sign=rand()%2;
    sigma=0.01*(variabletop[j]-variablebottom [j]);
    //高斯變異
    if(sign)
    {
     current.chromosome[j] = (current.chromosome[j]
      + sigma*sqrt(-2*log(r1)/0.4323)*sin(2*3.1415926*r2));
    }
    else
    {
     current.chromosome[j] = (current.chromosome[j]
      - sigma*sqrt(-2*log(r1)/0.4323)*sin(2*3.1415926*r2));
    }
    if (current.chromosome[j]>variabletop[j])
    {
     current.chromosome[j]=double(rand()%10000)/10000*(variabletop[j]-variablebottom[j])+variablebottom[j];
    }
    if (current.chromosome[j]<variablebottom [j])
    {
     current.chromosome[j]=double(rand()%10000)/10000*(variabletop[j]-variablebottom[j])+variablebottom[j];
    }
   }
  }
  population.SetAt(population.FindIndex(i),current);
 }
}
void CMVSOGA::selectionoperator()   //從當(dāng)前個體中按概率選擇新種群,應(yīng)該加一個復(fù)制選擇,提高種群的平均適應(yīng)度
{
 int i,j,pindex=0;
 double p,pc,sum;
 i=0;
 j=0;
 pindex=0;
 p=0;
 pc=0;
 sum=0.001;
 newpopulation.RemoveAll();
 cfitness.RemoveAll();
  //鏈表排序
// population.SetAt (population.FindIndex(0),current); //多余代碼
 for (i=1;i<popsize;i++)
 { 
  current=population.GetAt(population.FindIndex(i));
  for(j=0;j<i;j++)   //從小到大用before排列。
  {
   current1=population.GetAt(population.FindIndex(j));//臨時借用變量
   if(current.fitness<=current1.fitness)  
   {
    population.InsertBefore(population.FindIndex(j),current);
    population.RemoveAt(population.FindIndex(i+1));
    break;
   }
  }
//  m=population.GetCount();
 }
 //鏈表排序
 for(i=0;i<popsize;i++)//求適應(yīng)度總值,以便歸一化,是已經(jīng)排序好的鏈。
 {
  current=population.GetAt(population.FindIndex(i)); //取出來的值出現(xiàn)問題.
  sum+=current.fitness;
 }
 for(i=0;i<popsize; i++)//歸一化
 {
  current=population.GetAt(population.FindIndex(i)); //population 有值,為什么取出來的不正確呢??
  current.fitness=current.fitness/sum;
  cfitness.InsertAfter (cfitness .FindIndex(i),current.fitness);
 }
 
 for(i=1;i<popsize; i++)//概率值從小到大;
 {
  current.fitness=cfitness.GetAt (cfitness.FindIndex(i-1))
   +cfitness.GetAt(cfitness.FindIndex(i));   //歸一化
  cfitness.SetAt (cfitness .FindIndex(i),current.fitness);
  population.SetAt(population.FindIndex(i),current);
 }
 for (i=0;i<popsize;)//輪盤賭概率選擇。本段還有問題。
 {
  p=double(rand()%999)/1000+0.0001;  //隨機(jī)生成概率
  pindex=0;  //遍歷索引
  pc=cfitness.GetAt(cfitness.FindIndex(1));  //為什么取不到數(shù)值???20060910
  while(p>=pc&&pindex<popsize) //問題所在。
  {
   pc=cfitness.GetAt(cfitness .FindIndex(pindex));
   pindex++;
  }
  //必須是從index~popsize,選擇高概率的數(shù)。即大于概率p的數(shù)應(yīng)該被選擇,選擇不滿則進(jìn)行下次選擇。
  for (j=popsize-1;j<pindex&&i<popsize;j--)
  {
   newpopulation.InsertAfter (newpopulation.FindIndex(0),
    population.GetAt (population.FindIndex(j)));
   i++;
  }
 }
 for(i=0;i<popsize; i++)
 {
  population.SetAt (population.FindIndex(i),
   newpopulation.GetAt (newpopulation.FindIndex(i)));
 }
// j=newpopulation.GetCount();
// j=population.GetCount();
 newpopulation.RemoveAll();
}

//current   變化后,以上沒有問題了。


void CMVSOGA:: crossoveroperator()   //非均勻算術(shù)線性交叉,浮點(diǎn)數(shù)適用,alpha ,beta是(0,1)之間的隨機(jī)數(shù)
          //對種群中兩兩交叉的個體選擇也是隨機(jī)選擇的。也可取beta=1-alpha;
          //current的變化會有一些改變。
{
 int i,j;
 double alpha,beta;
 CList <int,int> index;
 int point,temp;
 double p;
// srand( (unsigned)time( NULL ) );
 for (i=0;i<popsize;i++)//生成序號
 {
  index.InsertAfter (index.FindIndex(i),i);
 }
 for (i=0;i<popsize;i++)//打亂序號
 {
  point=rand()%(popsize-1);
  temp=index.GetAt(index.FindIndex(i));
  index.SetAt(index.FindIndex(i),
   index.GetAt(index.FindIndex(point)));  
  index.SetAt(index.FindIndex(point),temp);
 }
 for (i=0;i<popsize-1;i+=2)
 {//按順序序號,按序號選擇兩個母體進(jìn)行交叉操作。
  p=double(rand()%10000)/10000.0;
  if (p<crossoverrate)
  {  
   alpha=double(rand()%10000)/10000.0;
   beta=double(rand()%10000)/10000.0;
   current=population.GetAt(population.FindIndex(index.GetAt(index.FindIndex(i))));
   current1=population.GetAt(population.FindIndex(index.GetAt(index.FindIndex(i+1))));//臨時使用current1代替
   for(j=0;j<variablenum;j++)
   { 
    //交叉
    double sign;
    sign=rand()%2;
    if(sign)
    {
     current.chromosome[j]=(1-alpha)*current.chromosome[j]+
      beta*current1.chromosome[j];
    }
    else
    {
     current.chromosome[j]=(1-alpha)*current.chromosome[j]-
      beta*current1.chromosome[j];
    }
    if (current.chromosome[j]>variabletop[j])  //判斷是否超界.
    {
     current.chromosome[j]=double(rand()%10000)/10000*(variabletop[j]-variablebottom[j])+variablebottom[j];
    }
    if (current.chromosome[j]<variablebottom [j])
    {
     current.chromosome[j]=double(rand()%10000)/10000*(variabletop[j]-variablebottom[j])+variablebottom[j];
    }
    if(sign)
    {
     current1.chromosome[j]=alpha*current.chromosome[j]+
      (1- beta)*current1.chromosome[j];
    }
    else
    {
     current1.chromosome[j]=alpha*current.chromosome[j]-
      (1- beta)*current1.chromosome[j];
    }
    if (current1.chromosome[j]>variabletop[j])
    {
     current1.chromosome[j]=double(rand()%10000)/10000*(variabletop[j]-variablebottom[j])+variablebottom[j];
    }
    if (current1.chromosome[j]<variablebottom [j])
    {
     current1.chromosome[j]=double(rand()%10000)/10000*(variabletop[j]-variablebottom[j])+variablebottom[j];
    }
   }
   //回代
  }
  newpopulation.InsertAfter  (newpopulation.FindIndex(i),current);
  newpopulation.InsertAfter  (newpopulation.FindIndex(i),current1);
 }
 ASSERT(newpopulation.GetCount()==popsize);
 for (i=0;i<popsize;i++)
 {
  population.SetAt (population.FindIndex(i),
   newpopulation.GetAt (newpopulation.FindIndex(i)));
 }
 newpopulation.RemoveAll();
 index.RemoveAll();
}
void CMVSOGA:: findbestandworstindividual( )  
{
 int i;
 bestindividual=population.GetAt(population.FindIndex(best_index));
 worstindividual=population.GetAt(population.FindIndex(worst_index));
 for (i=1;i<popsize; i++)
 {
  current=population.GetAt(population.FindIndex(i));
  if (current.fitness>bestindividual.fitness)
  {
   bestindividual=current;
   best_index=i;
  }
  else if (current.fitness<worstindividual.fitness)
  {
   worstindividual=current;
   worst_index=i;
  }
 }
 population.SetAt(population.FindIndex(worst_index),
  population.GetAt(population.FindIndex(best_index)));
 //用最好的替代最差的。
 if (maxgeneration==0)
 {
  currentbest=bestindividual;
 }
 else
 {
  if(bestindividual.fitness>=currentbest.fitness)
  {
   currentbest=bestindividual;
  }
 }
}
void CMVSOGA:: calculatefitnessvalue() //適應(yīng)度函數(shù)值計算,關(guān)鍵是適應(yīng)度函數(shù)的設(shè)計
          //current變化,這段程序變化較大,特別是排序。
{
 int  i;
 double temp;//alpha,beta;//適應(yīng)度函數(shù)的尺度變化系數(shù)
 double cmax=100;
 for(i=0;i<popsize;i++)
 {
  current=population.GetAt(population.FindIndex(i));
  if(current.value<cmax)
  {
   temp=cmax-current.value;
  }
  else
  {
   temp=0.0;
  }
  /*
  if((population[i].value+cmin)>0.0)
  {temp=cmin+population[i].value;}
 else
 {temp=0.0;
   }
  */
  current.fitness=temp;
  population.SetAt(population.FindIndex(i),current); 
 }
}
void CMVSOGA:: performevolution() //演示評價結(jié)果,有冗余代碼,current變化,程序應(yīng)該改變較大
{
 if (bestindividual.fitness>currentbest.fitness)
 {
  currentbest=population.GetAt(population.FindIndex(best_index));
 }
 else
 {
  population.SetAt(population.FindIndex(worst_index),currentbest);
 }
}
void CMVSOGA::GetResult(double *Result)
{
 int i;
 for (i=0;i<variablenum;i++)
 {
  Result[i]=currentbest.chromosome[i];
 }
 Result[i]=currentbest.value;
}

void CMVSOGA::GetPopData(CList <double,double>&PopData) 
{
 PopData.RemoveAll();
 int i,j;
 for (i=0;i<popsize;i++)
 {
  current=population.GetAt(population.FindIndex(i));
  for (j=0;j<variablenum;j++)
  {
   PopData.AddTail(current.chromosome[j]);
  }
 }
}
void CMVSOGA::SetFitnessData(CList <double,double>&PopData,CList <double,double>&FitnessData,CList <double,double>&ValueData)
{
 int i,j;
 for (i=0;i<popsize;i++)
 { 
  current=population.GetAt(population.FindIndex(i)); //就因為這一句,出現(xiàn)了很大的問題。 
  for (j=0;j<variablenum;j++)
  {
   current.chromosome[j]=PopData.GetAt(PopData.FindIndex(i*variablenum+j));
  }
  current.fitness=FitnessData.GetAt(FitnessData.FindIndex(i));
  current.value=ValueData.GetAt(ValueData.FindIndex(i));
  population.SetAt(population.FindIndex(i),current);
 }
 FitnessData.RemoveAll();
 PopData.RemoveAll();
 ValueData.RemoveAll();
}

posted on 2007-05-26 08:14 唯月釋懷 閱讀(15092) 評論(7)  編輯 收藏 引用

Feedback

# re: C++遺傳算法源程序 2007-05-26 17:38 pass86

我也寫過一點(diǎn),從書上改編的。
/********************************************************************
Filename: aiWorld.h
Purpose: 遺傳算法,花朵演化。
Author: pass86
E-mail: pass86@gmail.com
Created: 2007/03/29
Id:
Copyright:
Licence:
*********************************************************************/
#ifndef AIWORLD_H_
#define AIWORLD_H_

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cmath>

#define kMaxFlowers 10

using std::cout;
using std::endl;

class ai_World
{
public:
ai_World()
{
srand(time(0));
}
~ai_World() {}

int temperature[kMaxFlowers]; //溫度
int water[kMaxFlowers]; //水質(zhì)
int sunlight[kMaxFlowers]; //陽光
int nutrient[kMaxFlowers]; //養(yǎng)分
int beneficialInsect[kMaxFlowers]; //益蟲
int harmfulInsect[kMaxFlowers]; //害蟲

int currentTemperature;
int currentWater;
int currentSunlight;
int currentNutrient;
int currentBeneficialInsect;
int currentHarmfulInsect;

/**
第一代花朵
*/
void Encode();

/**
花朵適合函數(shù)
*/
int Fitness(int flower);

/**
花朵演化
*/
void Evolve();

/**
返回區(qū)間[start, end]的隨機(jī)數(shù)
*/
inline int tb_Rnd(int start, int end)
{
if (start > end)
return 0;
else
{
//srand(time(0));
return (rand() % (end + 1) + start);
}
}

/**
顯示數(shù)值
*/
void show();
};
// ----------------------------------------------------------------- //
void ai_World::Encode()
// ----------------------------------------------------------------- //

{
int i;

for (i=0;i<kMaxFlowers;i++)
{
temperature[i]=tb_Rnd(1,75);
water[i]=tb_Rnd(1,75);
sunlight[i]=tb_Rnd(1,75);
nutrient[i]=tb_Rnd(1,75);
beneficialInsect[i]=tb_Rnd(1,75);
harmfulInsect[i]=tb_Rnd(1,75);
}

currentTemperature=tb_Rnd(1,75);
currentWater=tb_Rnd(1,75);
currentSunlight=tb_Rnd(1,75);
currentNutrient=tb_Rnd(1,75);
currentBeneficialInsect=tb_Rnd(1,75);
currentHarmfulInsect=tb_Rnd(1,75);

currentTemperature=tb_Rnd(1,75);
currentWater=tb_Rnd(1,75);
currentSunlight=tb_Rnd(1,75);
currentNutrient=tb_Rnd(1,75);
currentBeneficialInsect=tb_Rnd(1,75);
currentHarmfulInsect=tb_Rnd(1,75);

}
// ----------------------------------------------------------------- //
int ai_World::Fitness(int flower)
// ----------------------------------------------------------------- //

{
int theFitness;


theFitness=abs(temperature[flower]-currentTemperature);
theFitness=theFitness+abs(water[flower]-currentWater);
theFitness=theFitness+abs(sunlight[flower]-currentSunlight);
theFitness=theFitness+abs(nutrient[flower]-currentNutrient);
theFitness=theFitness+abs(beneficialInsect[flower]-currentBeneficialInsect);
theFitness=theFitness+abs(harmfulInsect[flower]-currentHarmfulInsect);

return (theFitness);

}
// ----------------------------------------------------------------- //
void ai_World::Evolve()
// ----------------------------------------------------------------- //

{
int fitTemperature[kMaxFlowers];
int fitWater[kMaxFlowers];
int fitSunlight[kMaxFlowers];
int fitNutrient[kMaxFlowers];
int fitBeneficialInsect[kMaxFlowers];
int fitHarmfulInsect[kMaxFlowers];
int fitness[kMaxFlowers];
int i;
int leastFit=0;
int leastFitIndex;

for (i=0;i<kMaxFlowers;i++)
if (Fitness(i)>leastFit)
{
leastFit=Fitness(i);
leastFitIndex=i;
}

temperature[leastFitIndex]=temperature[tb_Rnd(0,kMaxFlowers - 1)];
water[leastFitIndex]=water[tb_Rnd(0,kMaxFlowers - 1)];
sunlight[leastFitIndex]=sunlight[tb_Rnd(0,kMaxFlowers - 1)];
nutrient[leastFitIndex]=nutrient[tb_Rnd(0,kMaxFlowers - 1)];
beneficialInsect[leastFitIndex]=beneficialInsect[tb_Rnd(0,kMaxFlowers - 1)];
harmfulInsect[leastFitIndex]=harmfulInsect[tb_Rnd(0,kMaxFlowers - 1)];

for (i=0;i<kMaxFlowers;i++)
{
fitTemperature[i]=temperature[tb_Rnd(0,kMaxFlowers - 1)];
fitWater[i]=water[tb_Rnd(0,kMaxFlowers - 1)];
fitSunlight[i]=sunlight[tb_Rnd(0,kMaxFlowers - 1)];
fitNutrient[i]=nutrient[tb_Rnd(0,kMaxFlowers - 1)];
fitBeneficialInsect[i]=beneficialInsect[tb_Rnd(0,kMaxFlowers - 1)];
fitHarmfulInsect[i]=harmfulInsect[tb_Rnd(0,kMaxFlowers - 1)];
}

for (i=0;i<kMaxFlowers;i++)
{
temperature[i]=fitTemperature[i];
water[i]=fitWater[i];
sunlight[i]=fitSunlight[i];
nutrient[i]=fitNutrient[i];
beneficialInsect[i]=fitBeneficialInsect[i];
harmfulInsect[i]=fitHarmfulInsect[i];
}

for (i=0;i<kMaxFlowers;i++)
{
if (tb_Rnd(1,100)==1)
temperature[i]=tb_Rnd(1,75);
if (tb_Rnd(1,100)==1)
water[i]=tb_Rnd(1,75);
if (tb_Rnd(1,100)==1)
sunlight[i]=tb_Rnd(1,75);
if (tb_Rnd(1,100)==1)
nutrient[i]=tb_Rnd(1,75);
if (tb_Rnd(1,100)==1)
beneficialInsect[i]=tb_Rnd(1,75);
if (tb_Rnd(1,100)==1)
harmfulInsect[i]=tb_Rnd(1,75);
}

}
void ai_World::show()
{
// cout << "\t temperature water sunlight nutrient beneficialInsect harmfulInsect\n";
cout << "current\t " << currentTemperature << "\t " << currentWater << "\t ";
cout << currentSunlight << "\t " << currentNutrient << "\t ";
cout << currentBeneficialInsect << "\t " << currentHarmfulInsect << "\n";
for (int i=0;i<kMaxFlowers;i++)
{
cout << "Flower " << i << ": ";
cout << temperature[i] << "\t ";
cout << water[i] << "\t ";
cout << sunlight[i] << "\t ";
cout << nutrient[i] << "\t ";
cout << beneficialInsect[i] << "\t ";
cout << harmfulInsect[i] << "\t ";
cout << endl;
}
}
#endif // AIWORLD_H_

//test.cpp
#include <iostream>
#include "ai_World.h"

using namespace std;

int main()
{
ai_World a;
a.Encode();
// a.show();
for (int i = 0; i < 10; i++)
{
cout << "Generation " << i << endl;
a.Evolve();
a.show();
}

system("PAUSE");
return 0;
}
  回復(fù)  更多評論   

# re: C++遺傳算法源程序 2007-05-27 19:04 江水獸

啊哈 當(dāng)初我也寫過 只是沒有像這樣如此具有遺傳算法的特點(diǎn) 當(dāng)時只是為了選修課寫的一個具有基本功能的GA Program  回復(fù)  更多評論   

# re: C++遺傳算法源程序 2007-06-25 17:33 7777

垃圾 什么你都往上傳  回復(fù)  更多評論   

# re: C++遺傳算法源程序 2007-10-21 08:15 starlet

作者不知道有沒有聯(lián)系方式,有問題請教  回復(fù)  更多評論   

# re: C++遺傳算法源程序 2008-04-20 02:33 阿毛

你好,我在做遺傳算法解決vrp問題的畢業(yè)論文,有問題想指教,有償求助,急,望回復(fù),我的q是267497220  回復(fù)  更多評論   

# re: C++遺傳算法源程序 2008-10-19 21:57

謝謝,我如果有新的代碼,也給大家傳上來共享!  回復(fù)  更多評論   

# re: C++遺傳算法源程序 2011-04-20 16:28 sjiao888

你好,我在做遺傳算法的畢業(yè)論文,有問題想指教,我的QQ是709375489  回復(fù)  更多評論   



只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


My Links

Blog Stats

常用鏈接

留言簿(5)

隨筆檔案

文章檔案

My sohu blog

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99pao成人国产永久免费视频| 欧美亚洲专区| 91久久一区二区| 亚洲国产毛片完整版| 亚洲国产精品成人综合| 亚洲国产精品久久久久| 亚洲精品欧美| 欧美一区二区三区精品电影| 久久免费视频这里只有精品| 欧美高清在线播放| 一本色道久久88精品综合| 午夜视频在线观看一区二区| 另类图片国产| 国产精品色婷婷久久58| 伊大人香蕉综合8在线视| 日韩午夜精品视频| 久久精品女人| 亚洲免费av片| 久久蜜桃资源一区二区老牛| 欧美三级免费| 亚洲国产精品成人| 欧美在线精品一区| 亚洲欧洲在线看| 亚洲午夜久久久| 欧美成人中文字幕| 国产一区在线看| 在线亚洲免费视频| 免费在线观看精品| 亚洲一区二区三区中文字幕在线 | 国产精品国产三级国产普通话三级 | 亚洲日韩欧美视频一区| 亚洲综合日韩在线| 欧美精品1区| 樱花yy私人影院亚洲| 午夜一区二区三区不卡视频| 91久久精品国产91性色| 欧美永久精品| 国产日韩欧美视频| 午夜精品久久| 亚洲一区二区三区涩| 欧美精品九九| 亚洲精品中文字| 亚洲大片一区二区三区| 久久精品国产成人| 国产原创一区二区| 久久全球大尺度高清视频| 亚洲女爱视频在线| 国产精品福利影院| 亚洲尤物影院| 亚洲一区二区伦理| 国产精品每日更新| 亚洲在线中文字幕| 一本色道久久综合狠狠躁篇怎么玩| 一区二区日韩精品| 欧美日韩中文在线观看| 亚洲一区欧美一区| 亚洲影视在线播放| 国产乱肥老妇国产一区二| 亚洲一本大道在线| 一区二区三区免费观看| 国产精品福利在线观看网址| 亚洲欧美日韩精品一区二区| 亚洲无线观看| 国产亚洲欧美日韩在线一区| 久久久久久欧美| 麻豆视频一区二区| 一本大道av伊人久久综合| 日韩视频在线一区二区| 国产精品色午夜在线观看| 久久国产成人| 久久综合色播五月| 99在线|亚洲一区二区| 一本久道久久综合狠狠爱| 国产精品高潮粉嫩av| 欧美中文字幕视频| 久久免费国产精品| 亚洲九九精品| 亚洲欧美日韩一区二区在线 | 国产一区二区无遮挡| 男男成人高潮片免费网站| 久久影视三级福利片| 亚洲精品视频啊美女在线直播| 欧美在线观看一区| 久久精品国产96久久久香蕉| 亚洲欧洲在线视频| 亚洲免费影视第一页| 亚洲国产精品久久久久秋霞蜜臀 | 亚洲理论在线观看| 亚洲综合精品| 亚洲经典在线看| 亚洲永久精品国产| 亚洲精品国精品久久99热| 一区二区三区不卡视频在线观看| 欧美激情网友自拍| 欧美中文字幕视频| 欧美日韩三级电影在线| 久久九九精品99国产精品| 鲁鲁狠狠狠7777一区二区| 亚洲嫩草精品久久| 欧美韩日一区| 久久噜噜亚洲综合| 国产精品草草| 亚洲风情亚aⅴ在线发布| 国产日韩欧美精品在线| 亚洲伦理在线| 亚洲国产精品久久久久久女王| 美女主播精品视频一二三四| 国产精品乱看| 亚洲美女视频| 亚洲精品国产精品国自产观看| 欧美大片免费观看| 国产欧美日韩一区二区三区| 亚洲欧洲日本专区| 影音先锋亚洲一区| 欧美在线精品一区| 欧美一区二区三区成人| 欧美日韩一区二区三区视频| 亚洲缚视频在线观看| 伊人久久大香线蕉av超碰演员| 免费不卡亚洲欧美| 韩国成人精品a∨在线观看| 亚洲综合欧美日韩| 亚洲欧美一区二区三区极速播放| 亚洲视频中文| 亚洲一区二区三区中文字幕在线| 一区二区三区免费观看| 一区二区精品在线观看| 欧美成人午夜77777| 亚洲成人在线视频播放 | 国产精品网曝门| 亚洲图片在线观看| 亚洲一区尤物| 国产精品久久久久久模特| 日韩视频在线免费| 99国产精品久久久久老师| 欧美精品一区在线| 日韩一级在线| 亚洲欧美日本日韩| 国产毛片久久| 欧美影片第一页| 久久久久久9| 亚洲国产精品久久久久久女王| 在线亚洲高清视频| 欧美中文字幕精品| 黄色成人在线| 欧美大片免费| 最新国产精品拍自在线播放| 日韩亚洲欧美成人| 国产精品毛片a∨一区二区三区| 欧美成人午夜| 亚洲午夜激情在线| 国产欧美一区二区三区视频| 久久精品99| 亚洲精品免费在线观看| 亚洲欧美激情视频| 黑人巨大精品欧美黑白配亚洲| 99www免费人成精品| 久久精品国产99国产精品澳门| 欧美另类变人与禽xxxxx| 一区二区久久久久| 久久精品一本| 亚洲国产精品久久久久久女王| 午夜精品久久久久久久99黑人 | 欧美久久成人| 亚洲女优在线| 欧美高清在线观看| 一区二区三区国产盗摄| 国产亚洲一区在线| 欧美激情综合亚洲一二区| 亚洲资源在线观看| 亚洲二区视频| 久久精品三级| 一本色道久久综合亚洲精品婷婷| 欧美 日韩 国产在线| 亚洲欧美综合另类中字| 亚洲国产日韩欧美综合久久 | 欧美视频中文字幕| 久久爱www久久做| 亚洲毛片一区| 欧美大片在线观看| 久久精品一区中文字幕| 亚洲午夜高清视频| 亚洲国产精品传媒在线观看 | 欧美日韩在线播放| 久久精品综合一区| 中文久久乱码一区二区| 欧美超级免费视 在线| 午夜精品视频在线观看| 亚洲精品视频在线观看免费| 狠狠色综合色综合网络| 国产精品一香蕉国产线看观看| 亚洲婷婷在线| 一本色道久久综合| 亚洲日本精品国产第一区| 牛牛影视久久网| 欧美一区二区精品久久911| 亚洲一区二区三区精品视频| 日韩视频在线你懂得| 亚洲黑丝一区二区| 亚洲高清资源|