首页 > 解决方案 > OR-Tools:限制给定范围的组合

问题描述

我正在创建一个简单的求解器应用程序。您可以检查下面的代码。

现在我想将作为解决方案创建的组合限制为一定数量。(例如:最大 1000)。由于求解器默认使用步长值 1。输入结果2numberOfItems101。但如果我使numberOfItems3解决方案将超过 5000,如果numberOfItems4总解决方案将超过 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 个)。

标签: javaconstraint-programmingor-tools

解决方案


推荐阅读