我正在创建一个简单的求解器应用程序。您可以检查下面的代码。
现在我想将作为解决方案创建的组合限制为一定数量。(例如:最大 1000)。由于求解器默认使用步长值 1。输入结果2
为numberOfItems
101。但如果我使numberOfItems
总3
解决方案将超过 5000,如果numberOfItems
是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 个)。