📄 test_crossover.cpp
字号:
#include "RandomGenerationCrossover.h"
#include "SinglePointCrossover.h"
#include "TwoPointCrossover.h"
#include "UniformCrossover.h"
#include "GraphGenome.h"
#include <utility>
using std::pair;
using std::make_pair;
double calculate2(Genome* genome)
{
return 1.0;
}
#include "GAException.h"
#include <iostream>
using std::cout;
using std::endl;
void test_RandomGeneration_crossover()
{
cout<<"\n基因交叉实验,交叉方法:RandomGenerationCrossover......"<<endl;
typedef pair<int,int> GraphGeneType;
GraphGeneType genes[]={
make_pair(0,1),
make_pair(1,6),
make_pair(0,1),
make_pair(1,6),
make_pair(0,1),
make_pair(0,1),
make_pair(0,1),
make_pair(1,6),
make_pair(0,1)
};
typedef Genome::Evaluator Evaluator;
Evaluator eval=&calculate2;
int num=sizeof(genes)/sizeof(genes[0]);
MyRandom::init((unsigned int)time(NULL));
try
{
Genome* p1=new GraphGenome(genes,genes+num,eval);
p1->randomAll();
cout<<"p1: "<<p1->toString()<<endl;
Genome* p2=p1->clone();
p2->randomAll();
cout<<"p2: "<<p2->toString()<<endl;
GraphGenome* c1=NULL;
GraphGenome* c2=NULL;
Crossover* crossover=new RandomGenerationCrossover();
crossover->applyCross(p1,p2,(Genome*&)c1,(Genome*&)c2);
cout<<"c1: "<<c1->toString()<<endl;
cout<<"c2: "<<c2->toString()<<endl;
cout<<"c1 class type: "<<c1->getClass().getName()<<endl;
cout<<"c2 class type: "<<c2->getClass().getName()<<endl;
cout<<"p1: "<<p1->toString()<<endl;
cout<<"p2: "<<p2->toString()<<endl;
cout<<"\n现在更换交叉算子....."<<endl;
Crossover* crossover2=new SinglePointCrossover();
crossover2->applyCross(p1,p2,(Genome*&)c1,(Genome*&)c2);
cout<<"c1: "<<c1->toString()<<endl;
cout<<"c2: "<<c2->toString()<<endl;
cout<<"父代:"<<endl;
cout<<"p1: "<<p1->toString()<<endl;
cout<<"p2: "<<p2->toString()<<endl;
cout<<"\n现在更换交叉算子....."<<endl;
Crossover* crossover3=new TwoPointCrossover();
crossover3->applyCross(p1,p2,(Genome*&)c1,(Genome*&)c2);
cout<<"c1: "<<c1->toString()<<endl;
cout<<"c2: "<<c2->toString()<<endl;
cout<<"父代:"<<endl;
cout<<"p1: "<<p1->toString()<<endl;
cout<<"p2: "<<p2->toString()<<endl;
cout<<"\n现在更换交叉算子....."<<endl;
Crossover* crossover4=new UniformCrossover();
((UniformCrossover*)crossover4)->setProbability(0.3);
crossover4->applyCross(p1,p2,(Genome*&)c1,(Genome*&)c2);
cout<<"c1: "<<c1->toString()<<endl;
cout<<"c2: "<<c2->toString()<<endl;
cout<<"父代:"<<endl;
cout<<"p1: "<<p1->toString()<<endl;
cout<<"p2: "<<p2->toString()<<endl;
}
catch(GAException& e)
{
cout<<e.what()<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -