通过上一篇文章的讲解,应该大概了解遗传算法的大概。这一篇我们来讲解简单遗传算法SGA中的一个例子:Y=x^2。通过这个例子,我们就可以清楚的知道,遗传算法是怎么操作的。
编译环境:VS2012,c++11
主函数:
#include "stdafx.h"
#include"math.h"
#include"SGA.h"
int _tmain(int argc, _TCHAR* argv[])
{
SGA *s=SGA::createSGA(0.01,0.2,5,10,5);
s->initgenertion();
s->generatenextpopulation();
return 0;
}
这里我们主要考虑到,代码的复用性。所以讲算子函数定义成了虚函数,也就是接口,不同的问题可能选择,交叉,变异操作是一样的,计算适应度是不一样的,这时候只需要继承这个类,然后重载计算适应度函数,就可以了。
#pragma once
#include<math.h>
class GA
{
public:
GA(void);
~GA(void);
//选择操作
virtual void selectoperator()=0;
//交换操作
virtual void crossoveroperator()=0;
//计算种群适应度
virtual void calculateobjectfitness()=0;
//变异操作
virtual void mutationoperator()=0;
//
};
简单遗传算法类:
#pragma once
#include<vector>
#include"individual.h"
#include"GA.h"
using std::vector;
using std::iterator;
using namespace std;
class SGA:public GA
{
public:
SGA(void);
~SGA(void);
//
bool init(double pc,double pm,int maxgenertion,int popsize,int chromlength);
//初始化种群
void initgenertion();
//评估种群
void evaludatepop();
//选择函数
virtual void selectoperator();
//交换操作
virtual void crossoveroperator();
//变异操作
virtual void mutationoperator();
//计算种群适应