资源简介
遗传算法 C++实现 控制台演示版本 附有详尽注释
注:因为是单数浮点数编码,所以未使用基因重组函数
如果看完仍然不懂,欢迎参看本人博客的一篇关于GA的文章
http://blog.csdn.net/emiyasstar__/article/details/6938608
代码片段和文件信息
#include
#include
#include
#include
#include
#include“GA.h“
using namespace std;
//srand((unsigned) time(NULL));
double random()
{
double randNum;
randNum=rand()*1.0/RAND_MAX;
return randNum;
}
GenAlg::GenAlg()
{
}
void GenAlg::init(int popsize double MutRate double CrossRate int GenLenghtdouble LeftPointdouble RightPoint)
{
popSize = popsize;
mutationRate = MutRate;
crossoverRate = CrossRate;
chromoLength = GenLenght;
totalFitness = 0;
generation = 0;
//fittestGenome = 0;
bestFitness = 0.0;
worstFitness = 99999999;
averageFitness = 0;
maxPerturbation=0.004;
leftPoint=LeftPoint;
rightPoint=RightPoint;
//清空种群容器,以初始化
vecPop.clear();
for (int i=0; i
{
//类的构造函数已经把适应性评分初始化为0
vecPop.push_back(Genome());
//把所有的基因编码初始化为函数区间内的随机数。
for (int j=0; j
{
vecPop[i].vecGenome.push_back(random() *
(rightPoint - leftPoint) + leftPoint);
}
}
}
void GenAlg::Reset()
{
totalFitness=0;
//bestFitness=0;
//worstFitness=9999;
averageFitness=0;
}
void GenAlg::CalculateBestWorstAvTot()
{
for (int i=0; i
{
//累计适应性分数.
totalFitness+= vecPop[i].fitness;
if(vecPop[i].fitness>=bestFitness)
{
bestFitness=vecPop[i].fitness;
fittestGenome=vecPop[i];
}
if(vecPop[i].fitness<=worstFitness)
worstFitness=vecPop[i].fitness;
}
averageFitness=totalFitness/popSize;
}
Genome GenAlg:: GetChromoRoulette()
{
//产生一个0到人口总适应性评分总和之间的随机数.
//中m_dTotalFitness记录了整个种群的适应性分数总和)
double Slice = (random()) * totalFitness;
//这个基因将承载转盘所选出来的那个个体.
Genome TheChosenOne;
//累计适应性分数的和.
double FitnessSoFar = 0;
//遍历总人口里面的每一条染色体。
for (int i=0; i
{
//累计适应性分数.
FitnessSoFar += vecPop[i].fitness;
//如果累计分数大于随机数就选择此时的基因.
if (FitnessSoFar >= Slice)
{
TheChosenOne = vecPop[i];
break;
}
}
//返回转盘选出来的个体基因
return TheChosenOne;
}
void GenAlg::Mutate(vector &chromo)
{
//遵循预定的突变概率对基因进行突变
for (int i=0; i
{
//如果发生突变的话
if (random() < mutationRate)
{
//使该权值增加或者减少一个很小的随机数值
chromo[i] += ((random()-0.5) * maxPerturbation);
//保证袋鼠不至于跳出自然保护区.
if(chromo[i] < leftPoint)
{
chromo[i] = rightPoint;
}
else if(chromo[i] > rightPoint)
{
chromo[i] = leftPoint;
}
//以上代码非基因变异的一般性代码只是用来保证基因编码的可行性。
}
}
}
//此函数产生新的一代见证着整个进化的全过程.
//以父代种群的基因组容器作为参数传进去该函数将往该容器里放入新一代的基因组(当然是经过了优胜劣汰的)
void GenAlg::Epoch(vector &vecNewPop)
{
//用类的成员变量来储存父代的基因组(在此之前m_vecPop储存的是不带估值的所有基因组)
vecPop = vecNewPop;
//初始化相关变量
Reset();
//为相关变量赋值
CalculateBestWorstAvTot();
//清空装载新种群的容器
vecNewPop.clear();
//产生新一代的
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5847 2011-11-05 15:26 GA遗传算法\GA.cpp
文件 2929 2011-11-05 15:09 GA遗传算法\GA.h
文件 566 2011-11-05 15:23 GA遗传算法\main.cpp
目录 0 2011-11-05 15:25 GA遗传算法
----------- --------- ---------- ----- ----
9342 4
相关资源
- C++实现的遗传算法实现TSP问题
- xilinx Vivado HLS技术性能优化指南
- Vivado HLS 视频课程总结
- 遗传算法C语言版已运行
- C++ 基于遗传算法的矩形排样 具有可视
- 遗传算法和BP人工神经网络算法C++实现
- proteus仿真,用atmega16控制12864显示屏
- TSP问题遗传算法C/C++实现
- C++遗传算法
- 排样遗传算法(c++)
- 89c51控制PGA2310音量调节C语言
- 一个简单的遗传算法的模板
- Lynx prime 图形界面应用
- C++实现遗传算法
- funcode 坦克大战代码
- ElGamal算法
- ElGamal签名 加密
- osgActiveX源码
- 多目标优化算法(一)NSGA2C语言版
- 爬山法、模拟退火法、遗传算法实现
- 遗传算法解决TSP问题代码 C++
- W5500的FPGA驱动开发和应用
- 基于FPGA的数字时钟设计
- 遗传算法c++实现模板
- 遗传算法实现N皇后问题
- Back-propagation Neural NetBP神经网络算法实
- GAlib遗传算法工具箱C++类库
- 矩阵运算C代码含求逆
评论
共有 条评论