遗传算法编码必须满足一定约束条件时咋交叉
遗传算法做约束优化,一般有以下几种方法
方法1一开始设计编码规则时,让解编码就只可能在可行区域内。
典型的例子是遗传算法做实数函数的优化,会给出 upper bound和lower bound,然后无论怎样的染色体,解码后都在这两个bound之间
方法2设计合理的交叉算子和变异算子,使得满足这些算子本身的特性的前提下,还让算子运算后的染色体也在可行域内。
这种方法需要一定的智力去想,需要注意满足算子本身的特性,不小心就会使算法的搜索区域被错误的减小,导致效果不好
典型的例子是TSP的经典解法,参见论文: Goldberg and Lingel, "Alleles, loci, and the traveling salesman problem", 1985.
方法3罚函数法。万能方法。
但罚函数太多或太严格,会导致效果很差。
方法4在变异/交叉之后加入一个判断语句,判断是否满足约束条件,如果不满足,有两个策略:
超出边界的放到边界上。(粒子群算法经常这么做)或者超出边界的,重新初始化。(差分进化算法经常这么做)
以上方法都在 scikit-opt 中有实现
参考资料:
Goldberg and Lingel, "Alleles, loci, and the traveling salesman problem", 1985.
scikit-opt: https://github.com/guofei9987/scikit-opt
■网友
要么换个编码方式,要么对于不符合条件的情况加个大的penalty。不可行解很难单纯通过控制编码和交叉、突变的方式来限制。
■网友
在遗传算法交叉,变异过程中,往往容易出现不可行解。一般采用修复法、罚函数法等方式对个体编码进行改进。为了便于理解,引入背包问题进行说明。
引例1:价值向量
质量向量
背包载重
; 物品个数
; 最大选择数量
;
问题模型为:
s.t.
则问题为:在不超过背包载重
的条件下,在
个物品中选择不超过
个物品,使得物品的价值最大。下面介绍几类常见的编码改进方式的具体过程。
1.修复法
修复法一般采用贪心策略对不可行解进行修复,使个体编码满足约束条件。
例如对于个体编码
而言,此时,个体编码在公式(2)中的值
,不满足约束。
首先,修复法得到物品的价值密度向量
推荐阅读
- 【编码】提醒:购买时注意外观和这俩编码 南京电动自行车超标车临牌更换只剩20天
- 为啥这个算法误差的看起来这么小
- 使用算法帮助人们筛选reader的信息是否存在可能
- 请问如果想成为算法工程师的话,大学选专业是选软件工程好还是计算机科学与技术好。
- 吕良伟|吕良伟19岁独子罕曝光,被指没遗传爸爸好基因,福相满满引热议
- 神经网络算法是否真的属于人工智能范畴
- |常州市省级非遗传承人增至59位
- 以算法为例,是否存在讲解者认为“懂得自然懂了,不懂的我说再多也白搭”的心理
- 豆瓣FM的推荐算法还有哪些可以改进的地方
- 如果已确定图像中物体的位置, 常用的目标分割和提取算法有哪些
