智能优化算法学习记录(一):GA算法

本文详细介绍了遗传算法如何通过种群操作、编码策略和约束处理解决TSP和0-1背包问题,包括选择、交叉、变异等步骤,以及编码时的注意事项和优化技巧。
摘要由CSDN通过智能技术生成

遗传算法解TSP与0-1背包问题

算法策略

遗传算法借鉴仿生学原理,通过随机化生成种群,对种群进行个体选择,交叉,变异,重组和约束处理操作。不断进行迭代,让种群中的染色体(个体---问题的一个解)多样性增强的同时,也让种群朝着Fitnv(适应度函数)增加(具体增加或减少看问题以及函数操作)的方向进化,从而找到全局的最优解。

从算法策略可以看出,遗传算法也适合解决多模态问题。其次算法通过约束处理,选择,还有重组操作让种群中Fitnv朝着我们想要的方向发展。交叉和变异操作是在满足种群染色体的多样性。

算法步骤

第一阶段:输入数据  对于TSP问题即N个城市的坐标信息;对于0-1背包问题即物品价值向量,物品质量向量,背包最大承载质量;

第二阶段:参数处理 第一步也是最重要的一步就是编码(encode),种群中每个染色体就是问题的一个解的形式,用合适的方式编码去表示问题的解很重要。还有初始化种群等参数处理。

第三阶段: 主循环 让种群经过Maxgen次迭代,每次迭代中经历select(),crossover(),mutate(), combina(),操作。选择出适应度最好的个体,并且记录。

第四阶段: 可视化 适应度随着迭代次数发生的变化,最优化结果的输出;

各部分的学习心得,注意事项,技巧

part1: 编码时,本次我在刚开始自己尝试解决TSP问题时,在生成每个染色体Individual时就保证了首尾元素一致,也就是问题的约束(回到出发城市)。但是这样会让后面的交叉,变异操作不好进行,不利于后续处理,事实上,我们没必要去用一个闭环线路来表示一个解,因为闭环线路只是在我们计算该解的路径长or花费时间的时候才用到,我们完全可以就用Individual=randperm(n)来表示,因为解就是Individual1=(individual,individual(1))。

select()  有两种操作:1,轮盘赌和代沟GGAP。一个种群中Fitnv=[Fitnv1,Fitnv2,.....,Fitnvn] ,正常的如果要让种群超Fitnv大的方向进化,只需要c=cumsum(Fitnv),r=rand,index=find(r<=c,1,'first')返回被选中个体的序号,一共选择Nselch个, 如果方向是小,可以取倒数,即1./Fitnv 。    2, 二元锦标赛。通过两两比较选出较好的那个。选出的群体中可能会有重复的(也可以剔除掉重复的,在剩下的里面选,亦或者给一定的概率去选择当前较差的个体,因为当前较差的个体在后面的交叉,变异中未必不会更优,这也是对遗传算法模型的一种优化---允许一定数量较差的个体)。

crossover()操作: 对于0-1背包问题,可以直接交换两个父代个体的片段;对于TSP这种不允许城市重复的,可以将两个父代个体的片段互换都加到最前面,再剔除重复出现的元素。

mutate()操作: 包括逆序,插入,随机两个元素互换位置。具体操作代码见下图

约束处理需要注意和学习的是在0-1背包问题中,但当前Individual不满足约束的时候,策略是:排序性价比,先把性价比低的拿出来(是依次都拿出来,直到满足约束为止),然后看背包是否还有空间,再将拿出来的按性价比排序,从高的先装进去。

【注】好好理解,清楚算法的策略和实现步骤; 好好研究具体策略的实现方法;认真研究,积累优秀代码是怎么写的。

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值