Я пытаюсь реализовать ILP с использованием CPLEX Java и долгое время сталкивался с проблемой. Вот несколько переменных НРП:cplex boolVarArray, дающий двойные значения
IloIntVar above = new IloIntVar[numRect][];
IloIntVar below = new IloIntVar[numRect][];
IloIntVar left = new IloIntVar[numRect][];
IloIntVar right = new IloIntVar[numRect][];
for (int i = 0; i < numRect; i++) {
above[i] = cplex.boolVarArray(numRect);
below[i] = cplex.boolVarArray(numRect);
left[i] = cplex.boolVarArray(numRect);
right[i] = cplex.boolVarArray(numRect);
}
Значение numRect равно 1. В конце вывода программы I эти значения:
for (int i = 0; i < numRect; i++) {
for (int j = i + 1; j < numRect; j++) {
System.out.println(cplex.getValue(left[i][j]));
System.out.println(cplex.getValue(right[i][j]));
System.out.println(cplex.getValue(above[i][j]));
System.out.println(cplex.getValue(below[i][j]));
System.out.println(cplex.getValue(left[i][j]) +
cplex.getValue(right[i][j]) +
cplex.getValue(above[i][j]) +
cplex.getValue(below[i][j]));
}
}
Вот выход я получаю:
0.0
0.0
9.313225750491594E-10
0.9999999990686774
1.0
Я не понимаю, почему я получаю двойные значения вместо булевых. Любая помощь будет оценена по достоинству. Благодарю.
Спасибо. Это была большая помощь. – user1009285