Java Jenetics中约束的定义

Java Jenetics中约束的定义,java,optimization,genetic-algorithm,jenetics,Java,Optimization,Genetic Algorithm,Jenetics,我以前曾与了解约束概念的。也就是说,问题的解决方案可能具有良好的适应性,但不可行。例如,使用背包时,物品的特定组合可能会带来高额利润,但它们的重量超过背包的容量。相应的适应度函数将包括以下行: // Set the fitness (=> profit) of the solution (=> knapsack). solution.setObjective(0, profit) // Set the constrain (=> 0.0 if OK, , otherwise t

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

// 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)
//设置解决方案(=>背包)的适合度(=>利润)。
解决方案。设置目标(0,利润)
//设置约束(=>0.0(如果确定),否则设置到边界的距离)。
解决方案。setConstraint(0,(权重不直接支持约束。您可以在中设置a。这将拒绝
表型
,并重新创建无效个体。不完全是约束,而是一种约束。第二种可能是为这些值返回所有目标的最小适应度值。

不直接支持约束。您可以设置in.这将拒绝表型,并重新创建无效个体。不完全是一种约束,而是一种约束。第二种可能性是为这些值返回所有目标的最小适应值。

从Jenetic开始,两者都已删除,但现在可以定义a(另请参见第2.5节):

还可以实现
约束
的方法来尝试修复给定的个体

请注意(见):

它[约束
接口]是检查个人有效性的最后一道防线。[…]第二个重要方法[除了测试]
Constraint
的一种方法是
repair
方法。该方法试图修复给定的个体。在不定义该方法的情况下,只创建一个新的随机表型

截至Jenetic,和已被删除,但现在可以定义a(另见第2.5节):

还可以实现
约束
的方法来尝试修复给定的个体

请注意(见):

它[约束接口]是检查个人有效性的最后一道防线。[…]第二个重要方法[除了测试]
Constraint
的一种方法是
repair
方法。该方法试图修复给定的个体。在不定义该方法的情况下,只创建一个新的随机表型


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


例如,如果一个双值的最大化只是由于适应度函数返回最低的负一倍,如果优化的解决方案不通过约束。

也请考虑在健身函数本身中验证你的约束,并且返回一个值与你所优化的结果相反。降低总体性能,但允许您在更高级别上验证结果


例如,如果您对一个双精度值进行最大化,只要根据适应度函数返回最低的负双精度值,如果优化的解决方案没有通过约束条件。

谢谢,但这与前面所说的基本相同:“第二种可能是返回这些值的所有目标的最小适应度值。”谢谢,但这与前面所说的基本相同:“第二种可能性是返回所有目标的最小适合度值。”
Engine.builder(/* ... */)
        .constraint(Constraint.of(phenotype -> /* test validity */)
        .build();