cplexを使用して、SATの問題を数回解決し、変数の方向(IloCplex.BranchDirection.Up | IloCplex.BranchDirection.Down)と優先順位を変更してさまざまな解決策を取得したいと思います。しかし、私はいつも同じ解決策を手に入れます(数千が存在します)。
私は多かれ少なかれ次のことをします:
IloCplex solver = new IloCplex();
solver.addEq(...);
solver.addGe(...);
solver.addLe(...);
while (true) {
Collections.shuffle(vars);
for (IloIntVar var : vars) {
solver.setDirection(variables.get(object), random.nextBoolean() ? IloCplex.BranchDirection.Up : IloCplex.BranchDirection.Down);
solver.setPriority(variables.get(object), vars.indexOf(var));
}
solver.solve();
for (IloIntVar var : vars) {
value = solver.getValue(var);
}
}
各反復で変数ごとに異なる(可能であれば)値を取得したいと思います。誰かが私のせいがどこにあるかわかりますか?すべてのsolver.clear*メソッドを試してリセットしましたが、これは役に立ちませんでした。