我正在创建一个简单的解算器应用程序。你可以查看下面的代码。
现在,我想将作为解决方案创建的组合限制为一定数量。(例如:最多1000个)。因为解算器使用步长值1作为默认值。输入
2
对于
numberOfItems
结果是101。但如果我
项目数
到
3
总解决方案将超过5000,如果
项目数
是
4
总解决方案将超过10000个。
如何构建能够根据输入更改步长值的解算器。在不影响分配的情况下。
int totalCumilation = 100; //adding values of all item should equal to this. User might give 100 to 100000
int numberOfItems = 3; //User might give 2..25
Solver solver = new Solver("MY_CP");
IntVar[] weights = solver.makeIntVarArray(numberOfItems, 0, totalCumilation, "weights");
solver.addConstraint(solver.makeEquality(solver.makeSum(weights), totalCumilation));
DecisionBuilder decisionBuilder = solver.makeDefaultPhase(weights);
solver.solve(decisionBuilder);
while (solver.nextSolution()) {
for (int i = 0; i < weights.length; i++) {
System.out.println(weights[i]);
}
System.out.println("");
}
System.out.println("Finished");
我在代码中还提到了一些约束条件。一旦传播出最佳解决方案(如1000项)。我将探索(放大)更多的解决方案(在应用这些约束之后,5000个生成的项目可能会变成3000个,我们将只展示其中的1000个)。