我正在尝试使用DEAP遗传算法来解决一个与背包问题不同的优化问题.染色体由整数向量表示,约束条件是向量之和必须等于某个数字X.在适应性评估中处理这个问题似乎效率低,因为相对较少的交叉/突变会导致有一个总和恰好等于X的向量.
相反,似乎我应该将交叉和突变重新映射到有限的可能解决方案中.我应该在DEAP中使用装饰器来实现这个,还是有人知道更好的方法来解决这个问题?有没有人有这种情况的示例代码的链接?
处理此问题的一种方法是在变化级别.您可以使用装饰器修饰您最喜欢的变体方案,该装饰器将无效个体重新映射到有效域.
在使用进化算法时,有多种方法可以有效地处理数值约束.我推荐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-1 .http://www.sciencedirect.com/science/article/pii/S0045782501003231
请注意,重新映射的后果应考虑在内,因为交叉和突变应将遗传物质从父母转移到后代.如果您的映射会使值过多,则结果可能或多或少是随机搜索.也许您应该尝试定义产生较少无效个体的特定问题的运算符.
另外,请注意我是DEAP开发人员,也可以在邮件列表中找到答案.