⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_crossover.cpp

📁 我自己写的一个用于图编码的遗传算法
💻 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 + -