0

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

我想优化一家公司的汽车资源,即汽车数量车型。我已经有一个健身功能calcFitness(carList),可以评估给定的设置,如“商务车、运输车”或“商务车、商务车、运输车”。现在,问题是,如何使用 GA 解决这个可变长度问题。

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

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

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

4

1 回答 1

1

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

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

于 2016-12-04T23:24:42.897 回答