Java Choco CSP 使用变量总和进行优化
Java Choco CSP optimize using sum of variables
我正在使用 Choco 解决 CSP。我想做这样的事情:
BoolVar[] badRow = getBadRow();
solver.findOptimalSolution(ResolutionPolicy.MINIMIZE, sum(badRow));
换句话说,我希望系统找到一个解决方案,其中 badRow 中的真值最少。我不希望这是一个 "constraint" 因为那样系统就会失败,我想避免失败。但是我找不到任何方法来创建一个 IntVar 作为其他变量的总和。
我该如何完成?
我完全是从错误的角度来看的。我没有尝试将变量构建为其他变量的总和,而是创建了一个普通变量,然后 Constrain 它成为其他变量的总和,如下所示:
IntVar overflows = VariableFactory.integer("overflows", 0, maxOverflows, solver);
Constraint tracker = IntConstraintFactory.sum(badRow, overflows);
solver.post(tracker);
solver.findAllOptimalSolutions(ResolutionPolicy.MINIMIZE, overflows, true);
然后就解决了。没看到现在觉得好傻
我正在使用 Choco 解决 CSP。我想做这样的事情:
BoolVar[] badRow = getBadRow();
solver.findOptimalSolution(ResolutionPolicy.MINIMIZE, sum(badRow));
换句话说,我希望系统找到一个解决方案,其中 badRow 中的真值最少。我不希望这是一个 "constraint" 因为那样系统就会失败,我想避免失败。但是我找不到任何方法来创建一个 IntVar 作为其他变量的总和。
我该如何完成?
我完全是从错误的角度来看的。我没有尝试将变量构建为其他变量的总和,而是创建了一个普通变量,然后 Constrain 它成为其他变量的总和,如下所示:
IntVar overflows = VariableFactory.integer("overflows", 0, maxOverflows, solver);
Constraint tracker = IntConstraintFactory.sum(badRow, overflows);
solver.post(tracker);
solver.findAllOptimalSolutions(ResolutionPolicy.MINIMIZE, overflows, true);
然后就解决了。没看到现在觉得好傻