使用 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* 方法来重置它,但这并没有帮助。