java - OR-Tools:限制给定范围的组合
问题描述
我正在创建一个简单的求解器应用程序。您可以检查下面的代码。
现在我想将作为解决方案创建的组合限制为一定数量。(例如:最大 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 个)。
解决方案
推荐阅读
- apache-flink - PyFlink 作业如何调用外部 jar?
- sas - SAS PROC SQL UNION ALL - 最小化列长度
- javascript - 我为代码“(this,R.layout.device_name)”的最后一行添加了什么?
- java - Firebase 提供程序上的错误
- spring - 使用 Spring 批处理将多个 csv 文件合并为单个 csv
- javascript - 如何打印以筛选存储在本地存储中的所有数组元素
- identityserver4 - IdenityServer4 - 在 MFA 之后不重定向
- node.js - 如何在节点js中使用静态变量?
- javascript - 如何在 Firestore 中获取引用数组?
- javascript - 在 getter 方法中实例化类是否内存效率低下?什么 OOP 设计可以防止这种情况发生?