遗传算法 - 可变长度优化策略

Genetic Algortihm - Strategies for variable length optimizations

我有一个问题想用遗传算法 (GA) 解决。您可以将其简化为以下问题:

我想优化一家公司的拼车,即汽车数量车型。我已经有一个适应度函数 calcFitness(carList) 可以评估给定的设置,例如 'business car, transporter' 或 'business car, business car, transporter'。现在,问题是,如何使用 GA 解决这个变长问题。

我有四个想法可以解决这些问题:

  1. 也许以某种方式实现允许可变长度染色体的 GA 并在单个 运行 中解决问题(不确定是否可能?)
  2. 估计最大可行的汽车数量(例如 20)和 运行 从 1 到 20 的每个车位编号的固定长度 GA,并比较 20 个结果
  3. 与#2 类似,但没有固定上限:您从 1 辆车开始并增加插槽数量,直到增加数量的最佳解决方案比前面的解决方案更差(基于梯度的方法)
  4. 两个堆叠的固定长度 GA:父 GA 单独负责优化汽车槽的数量,在其适应度函数中,另一个优化这些槽分配的 GA 被称为

您如何看待这些通用方法?对于这些可变长度的情况,还有其他想法或 GA 的替代方案吗?

可变长度当然是可能的,而且看起来是这个问题最自然的表现。为什么会成为问题?唯一的实质性区别在于交叉操作。虽然单点是微不足道的(您只需在 a 内选择一个点,在 b 内选择一个点并自动获得可变长度的后代),但连续交叉通常会更好,这需要一些可变长度更直观。但这可以在经过彻底的单独测试后实施。

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