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<m_iPopSize; ++i)
{
cfTotal += m_vecGenomes[i].dFitness;
if (cfTotal > fSlice)
{
SelectedGenome = i;
break;
}
}
return m_vecGenomes[SelectedGenome];
}
现在,程序通过循环来考察各基因组,把它们相应的适应性分数一个一个累加起来,直到这一 部分累加和 大于 fSlice 值时,
就返回该基因组。就是这样简单。
3.4.4.2 重温杂交操作(Crossover Revisited)
这一函数要求2个染色体在同一随机位置上断裂开,然后将它们在断开点以后的部分进行互换,以形成 2 个新的染色体 ( 子代 ) 。
void CgaBob::Crossover( const vector<int> &mum, const vector<int> &dad, vector<int> &baby1, vector<int> &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<cp; i++)
{
baby1.push_back(mum[i]);
baby2.push_back(dad[i]);
}
for (i=cp; i<mum.size(); i++)
{
baby1.push_back(dad[i]);
baby2.push_back(mum[i]);}
这两个小循环把 2 个 parent 染色体在杂交点( CP,crossover point )
以后的所有位进行了互换,并把新的染色体赋给了 2 个子代 : baby1 和 baby2 。
3.4.4.3 重温变异操作(Mutation Revisited)
这一函数所做的工作,不过就是沿着一个染色体的长度,一bit一bit地进行考察,并按m_dMutationRate给定的几率,将其中某些bit实行翻转。
void CgaBob::Mutate(vector<int> &vecBits)
{
for (int curBit=0; curBit<vecBits.size(); curBit++)
{ //是否要翻转此bit?
if (RandFloat() < m_dMutationRate)
( //是,就翻转此bit
vecBits[curBit] = !vecBits[curBit];
} }//移到下一个bit
}
基于遗传算法的排课系统
3星 · 超过75%的资源 需积分: 49 136 浏览量
2009-05-12
21:00:29
上传
评论 4
收藏 484KB RAR 举报
lovemusicge
- 粉丝: 2
- 资源: 7
最新资源
- 基于去中心化联邦学习的货运速度预测时空模型-A decentralized federated learning-based s
- 适合新手的 OpenAI Sora 详细使用教程
- 驱动总裁离线安装包01
- NT98336 SDK 114版本
- torch-1.8.1+cu111-cp38-cp38-linux-x86-64.whl +torchvision
- 智能提取字幕-intel
- 计算机设计 - VB+ACCESS网络计时管理系统设计(源代码+系统),保证可靠运行,毕业生可参考,免费资源下载
- 信号处理,通信原理,数字通信信号处理与系统分析
- 计算机设计 - vb+ACCESS身份证管理系统设计(LW+源代码),保证可靠运行,毕业生可参考,免费资源下载
- 智能提取字幕-win10
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论9