资源简介
遗传算法 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
相关资源
- atmega128 串口通讯(RS485.c)
- AppGameKit安装包
- 使用C++超级玛丽制作-100%源码公开-不
- C++ 游戏疯狂的赛车
- 学习 FPGA 书籍分享
- 基于遗传算法的机器人路径规划
- C++实现的改进遗传算法
- C++商品管理系统50页报告+源码。代码
- C++课程设计五子棋基于Qt4
- 遗传算法解决车辆调度问题
- 最短路径的篇论文及必经节点的遗传
- c语言实现的遗传算法
- 遗传算法代码NSGA-II
- Getting Started with C++ Audio Programming for
- C语言编写双人剪刀石头布联机游戏代
- C++遗传算法解决柔性作业车间调度附
- HLS:C语言转换FPGA教程ug871
- 用c语言实现的遗传算法单目标优化
- 基于xilinx FPGA设计的DDS多种波形信号发
- Mastering C++ Game Development.pdf
- Gauss消去法、列主元素消去法、Dooli
- C++游戏开发指南C++ Game Development Cook
- SDL Game Development.pdf
- C++ Game Development Cookbook
- 遗传算法c++源程序
- 遗传算法解决背包问题(C++版本)
- OMRON SYSMAC gateway-C#/C++
- Galil运动控制卡程序
- 基于OpenCV的步态能量图源代码GEI Gai
- CGAL编程指南c++版
评论
共有 条评论