簡単なソルバー アプリケーションを作成しています。以下のコードを確認できます。
ここで、ソリューションとして作成される組み合わせを特定の数に制限したいと考えています。(例: 最大 1000)。ソルバーはデフォルトでステップ値 1 を使用するためです。101 の結果を入力2
します。ただし、ソリューションを合計すると5000 を超え、ソリューションの合計が 10000 を超えます。numberOfItems
numberOfItems
3
numberOfItems
4
入力に応じてステップ値を変更できるソルバーを構築する方法。配布に妥協することなく。
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 のみが表示されます)。