作业帮 > 综合 > 作业

基本遗传算法源程序近期正在使用遗传算法进行曲线拟合,以前从来没有接触过遗传算法,所以求哪个牛人给个基本遗传算法的源程序,

来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/11 16:43:28
基本遗传算法源程序
近期正在使用遗传算法进行曲线拟合,以前从来没有接触过遗传算法,所以求哪个牛人给个基本遗传算法的源程序,最好能有详细文档.
基本遗传算法源程序近期正在使用遗传算法进行曲线拟合,以前从来没有接触过遗传算法,所以求哪个牛人给个基本遗传算法的源程序,
下面这个链接中,遗传算法的详细说明和例子都有了
再给你补充几个例子:
3.4.4.1重温轮盘赌选择 (Roulette Whell Selection Revisited )
SGenome& CgaBob::RouletteWheelSelection()
{
double fSlice = RandFloat()*m_dTotalFitnessScore;
我们从零到整个适应分范围内随机选取了一实数fSlice .
我喜欢把此数看作整个适应性分数饼图中的一块,如早先在图3.4中所示.
〔但并不是其中一块,译注〕
double cfTotal = O;
int SelectedGenome = 0;
for (int i=O; i fSlice)
{
SelectedGenome = i;
break;
}
}
return m_vecGenomes[SelectedGenome];
}
现在,程序通过循环来考察各基因组,把它们相应的适应性分数一个一个累加起来,直到这一 部分累加和 大于 fSlice 值时,
就返回该基因组.就是这样简单.
3.4.4.2 重温杂交操作(Crossover Revisited)
这一函数要求2个染色体在同一随机位置上断裂开,然后将它们在断开点以后的部分进行互换,以形成 2 个新的染色体 ( 子代 ) .
void CgaBob::Crossover( const vector &mum,const vector &dad,vector &baby1,vector &baby2)
{
这一函数共传入 4 个参数,参数传递均采用引用( reference )方式,
其中前2 个传入父辈 parent 的染色体(别忘记 ,染色体只是一个整数型的矢量std::vector ),
后 2 个则是用来 copy 子代染色体的空矢量.
if ( (RandFloat() > m_dCrossoverRate) || (mum == dad) )
{
baby1 = mum;
baby2 = dad;
return;
}
这里,首先是进行检测,看 mum 和 dad 两个上辈是否需要进行杂交.
杂交发生的概率是由参数 m_dCrossoverRate 确定.
如果不发生杂交,则2个上辈染色体不作任何改变地就直接复制为子代,函数立即返回.
int cp = RandInt(0,m_iChromoLength - 1) ;
沿染色体的长度随机选择一个点来裂开染色体.
for (int i=0; i