3

我正在尝试使用带有 DEAP 的遗传算法来解决与背包问题没有太大区别的优化问题。染色体由整数向量表示,约束是向量的总和必须等于某个数字 X。在适应度评估中处理这个问题似乎效率低下,因为很少有交叉/突变会导致有一个向量,其和正好等于 X。

相反,我似乎应该将交叉和突变重新映射到有界的可能解决方案集中。我应该用 DEAP 中的装饰器来实现这个,还是有人知道更好的方法来处理这个?有没有人有针对这种情况的示例代码的链接?

4

1 回答 1

6

处理此问题的一种方法是在变化级别。您可以使用将无效个体重新映射到有效域的装饰器来装饰您最喜欢的变体方案。

在使用进化算法时,有多种方法可以有效地处理数值约束。我向您推荐 Coello Coello 的以下论文,该论文对可以使用的不同方法进行了广泛的调查。DEAP 文档有一些代码示例

Carlos A Coello Coello,与进化算法一起使用的理论和数值约束处理技术:最新技术的调查,应用力学和工程中的计算机方法,第 191 卷,第 11-12 期,2002 年 1 月 4 日,第 1245-1287 页, ISSN 0045-7825, http://dx.doi.org/10.1016/S0045-7825(01)00323-1http://www.sciencedirect.com/science/article/pii/S0045782501003231

请注意,应考虑重新映射的后果,因为交叉和突变应将遗传物质从父母转移到后代。如果您的映射对值进行了太多洗牌,则结果可能或多或少是随机搜索。也许您应该尝试定义产生较少无效个体的特定于问题的运算符。

另外,请注意,我是一名DEAP开发人员,答案也可以在邮件列表中找到。

于 2013-12-06T18:50:26.860 回答