简单的遗传算法MATLAB实现(2)

2019-04-16 22:41

varfitness_value,

fitness_table;/*fitness_value为种群的适应度,fitness_table为种群累积适应度*/ fori=1:pop_size

r = rand*fitness_table(pop_size);/*随机生成一个随机数,在0和总适应度之间,因为

fitness_table(pop_size)为最后一个个体的累积适应度,即为总适应度*/ first = 1; last = pop_size;

mid = round((last+first)/2); idx = -1;

/*下面按照排中法选择个体*/ while (first <= last) && (idx == -1) if r >fitness_table(mid) first = mid;

elseif r

mid = round((last+first)/2); if (last - first) == 1 idx = last; break; end if end while

for j=1:chromo_size pop_new(i,j)=pop(idx,j); end for end for

/*是否精英选择*/ if elitism

p = pop_size-1; else

p = pop_size; end if fori=1:p

for j=1:chromo_size

pop(i,j) = pop_new(i,j);/*若是精英选择,则只将pop_new前pop_size-1个个体赋给pop,最后一个为前代最优个体保留*/

end for end for 1.3 交叉操作

交叉操作是对任意两个个体进行的(在这里我们实现的算法是直接对相邻的两个个体进行的)。随机选择两个个体,如下图所示

然后随机生成一个实数0<=r<=1, 如果r

if(rand

cross_pos = round(rand * chromo_size);/*交叉位置*/

if or (cross_pos == 0, cross_pos == 1) continue;/*若交叉位置为0或1,则不进行交叉*/ end if

for j=cross_pos:chromo_size

pop(i,j)<->pop(i+1,j);/*交换*/ end for end if end for 1.4 变异操作

变异操作是对单个个体进行的。首先生成一个随机实数0<=r<=1, 如果r

如个体需要进行变异操作,首先需要确定变异位置(rand*chromo_size),若为0则不进行变异,否则则

对该位置的二进制数字进行变异:1变成0, 0变成1.(当然也可以选择多点进行变异) 单点变异的具体算法描述如下: Mutation algorithm fori=1:pop_size

if rand

mutate_pos = round(rand*chromo_size);/*变异位置*/

ifmutate_pos == 0

continue;/*若变异位置为0,则不进行变异*/ end if

pop(i,mutate_pos) = 1 - pop(i, mutate_pos);/*将变异位置上的数字至反*/ end if end for

1.5 遗传算法流程

遗传算法计算流程图如下图所示


简单的遗传算法MATLAB实现(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:礼林镇2012年政府工作报告征求意见稿

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: