Genetic Algortihm - 可变长度优化的策略

Genetic Algortihm - 可变长度优化的策略

问题描述:

我有一个问题,我想用遗传算法(GA)来解决。你可以把它简化为以下问题:Genetic Algortihm - 可变长度优化的策略

我想优化公司,这意味着,在汽车数量车型的拼车。我已经有一个健身功能calcFitness(carList),它评估给定的设置,如'商务车,运输车'或'商务车,商务车,运输车'。现在,问题是,如何使用GA来解决这个可变长度问题。

我有四个想法,你怎么能解决这些问题一般为:(?不知道,如果可能的话)

  1. 也许在某种程度上实现GA允许可变长度的染色体,并在单次运行解决问题
  2. 估算最大可行数量的汽车(例如20辆),并为1到20的每个汽车插槽号码运行固定长度的GA并比较20个结果
  3. 与#2类似,但没有固定的上限: 1辆车,并增加插槽的数量,直到增加的数字的最佳解决方案比前面的更差olution(基于梯度的方法)
  4. 两个堆叠的固定长度气:父GA是用于优化汽车槽另一GA的,并在其适应度函数优化这些时隙的assignement数量单独负责叫做

你对这些一般方法有什么看法?对于这些可变长度的情况,GA有没有其他想法或可能的替代方案

可变长度当然是可能的,并且这个问题似乎是最自然的表示。为什么会是一个问题?唯一的实质性差异将是交叉操作。虽然单点是微不足道的(你只需在a之内选择一个点,在b之内的一个点,并自动获得一个可变长度的后代),但连续交叉通常更好,这需要更多的直觉和可变长度。但是,这可以在进行彻底的单独测试后实施。

准备好你的算法可能会发现,染色体越好,它可以产生更好的结果(在某些情况下)。你不会像在遗传程序设计中那样得到指数膨胀(基因型是树而不是线性序列),但染色体长度可能开始不舒服地增长。您可能需要在健身功能中考虑这一点,或者您可以通过立即拒绝超过某个限制的候选人来模拟像#2这样的解决方案。

+0

谢谢你的回答。连续交叉是什么意思?你会允许突变来改变染色体长度吗? – nkxandroid

+1

是的,但是有帮助的特定形式取决于问题。例如,在我目前的遗传算法中,我有多个基因添加,删除,k个基因被l个基因取代,......但其中很大一部分是针对该领域的。通常,它应该足以一次修改(变更,添加,删除)一个。 –

+1

连续交叉=没有预定数量的交叉点。在固定长度上,这将会在每个位置上翻转有偏见的硬币,不管是否交叉。 –