首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义Jenetics中的约束

定义Jenetics中的约束
EN

Stack Overflow用户
提问于 2018-11-21 12:50:42
回答 3查看 281关注 0票数 2

我以前曾使用过MOEA框架,它知道约束的概念。也就是说,一个问题的解决方案可能有很好的适应性,但是不可行的。例如,在使用背包问题时,特定的项目组合可能会带来高额利润,但它们的重量超过了背包的容量。相应的适应度函数将包括如下行:

代码语言:javascript
复制
// Set the fitness (=> profit) of the solution (=> knapsack).
solution.setObjective(0, profit)
// Set the constrain (=> 0.0 if OK, , otherwise the distance to the boundary).
solution.setConstraint(0, (weight <= capacity) ? 0.0 : weight - capacity)

在多目标背包问题中,另一个例子是不允许背包使用已经在另一个背包中使用的项目的约束。

杰尼提斯有类似的东西吗?或者,我如何将约束编码为适应度函数(或其他地方)的一部分?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-12 13:39:21

对于Jenetic v5.0.0phenotypeValidatorgenotypeValidator都已被删除,但现在可以定义Constraint (另请参阅用户指南,第2.5节):

代码语言:javascript
复制
Engine.builder(/* ... */)
        .constraint(Constraint.of(phenotype -> /* test validity */)
        .build();

人们还可以实现Constraintrepair方法来尝试修复给定的个体。

请注意(见这个答案):

Constraint接口是指在检查个人的有效性时,作为最后一道防线。…除test外,Constraint的第二个重要方法是repair方法。此方法试图修复给定的个人。在不定义此方法的情况下,只创建了一个新的随机表型。

票数 1
EN

Stack Overflow用户

发布于 2018-11-21 15:33:53

杰尼提斯不直接支持约束。您可以在phenotypeValidator中设置Engine.Builder。这将拒绝Phenotypes并重新创建无效的个人。不完全是一种约束,而是一种。第二种可能性是返回这些值的所有目标的最小适应值。

票数 3
EN

Stack Overflow用户

发布于 2020-04-11 12:27:16

还请考虑验证您在适应度函数本身内的约束,并返回一个与您正在优化的值相反的值。这可能会降低总体性能,但允许您在更高的级别上验证结果。

例如,如果您对一个双值的最大化只是返回最小的负二倍作为适应度函数的结果,如果优化的解决方案没有通过这些约束。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53412433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档