test_mutate.cpp

来自「我自己写的一个用于图编码的遗传算法」· C++ 代码 · 共 81 行

CPP
81
字号
#include "GraphGenome.h"
#include <utility>
using std::pair;
using std::make_pair;

double calculate3(Genome* genome)
{
	return 1.0;
}

#include "GAException.h"
#include <iostream>
using std::cout;
using std::endl;

#include "FlipMutator.h"
#include "SwapMutator.h"

void test_mutate()
{
	cout<<"\n基因变异实验....."<<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=&calculate3;

	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;

		Mutator* mutator=new FlipMutator();		
		cout<<"p1开始变异....."<<endl;
		mutator->applyMutate(p1,0.5);

		cout<<"变异后p1: "<<p1->toString()<<endl;

		cout<<"\np2开始变异...."<<endl;
		mutator->applyMutate(p2,0.005);

		cout<<"变异后p2: "<<p2->toString()<<endl;


		cout<<"\n现在开始进行交换变异(swap)操作....."<<endl;
		Mutator* mutator2=new SwapMutator();		
		cout<<"p1开始变异....."<<endl;
		mutator2->applyMutate(p1,0.5);

		cout<<"变异后p1: "<<p1->toString()<<endl;

		cout<<"\np2开始变异...."<<endl;
		mutator2->applyMutate(p2,0.005);

		cout<<"变异后p2: "<<p2->toString()<<endl;

	}
	catch(GAException& e)
	{
		cout<<e.what()<<endl;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?