📄 swapmutator.cpp
字号:
#include "SwapMutator.h"
#include "MyRandom.h"
#include "Genome.h"
#include "GAException.h"
#include <iostream>
using std::cout;
using std::endl;
SwapMutator::SwapMutator()
{
/* REGISTER_GENOME(GraphGenome);*/
}
void SwapMutator::applyMutate(Genome* genome,double mutateRate)
{
if(!isGenomeReg(genome->getClass().getName()))
{
throw GAException("SwapMutator不能应用于所有的编码类型");
}
else if(mutateRate>=1)
{
throw GAException("SwapMutator变异率不能超过1");
}
else if(mutateRate<=0)
{
throw GAException("SwapMutator变异率不能小于等于0");
}
else
{
cout<<"变异率:"<<mutateRate<<endl;
double comparator=MyRandom::randomDouble();
if(comparator<mutateRate)
{
int swap1=MyRandom::randomInt(0,genome->size()-1);
int swap2=MyRandom::randomInt(0,genome->size()-1);
while(swap1==swap2)
{
swap2=MyRandom::randomInt(0,genome->size()-1);//保证swap1和swap2不一样
}
cout<<"第"<<swap1<<"点与第"<<swap2<<"点进行交换"<<endl;
genome->swap(swap1,swap2);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -