Что касается вашего первого вопроса, у вас есть несколько вариантов. Чтобы увидеть сгенерированные ограничения, вы можете просто экспортировать вашу модель в формат LP, чтобы увидеть читаемую пользователем версию модели. Например, пример программы LPex1.java
, поставляемой с CPLEX, показывает, как экспортировать модель в формат LP:
// write model to file
cplex.exportModel("lpex1.lp");
В качестве альтернативы, если мы возьмем пример программы LPex1.java
, мы можем добавить следующий код для печати ограничений вручную:
// print constraints
System.out.println("Constraints:");
for (int i = 0; i < rng[0].length; ++i) {
System.out.println(" " + rng[0][i]);
}
Объекты IloRange
отображаются красиво с toString
. Это напечатает что-то вроде следующего:
Constraints:
IloRange c1 : -infinity <= (-1.0*x1 + 1.0*x2 + 1.0*x3) <= 20.0
IloRange c2 : -infinity <= (1.0*x1 - 3.0*x2 + 1.0*x3) <= 30.0
Что касается вашего второго вопроса, вам нужно позвонить IloCplex.refineConflict , чтобы вычислить конфликты (как указано в другом ответе). Параметр ConflictDisplay
«Определяет, сколько информации CPLEX сообщает, когда работает средство уточнения конфликта». Из ваших комментариев вы уже должны иметь доступ к ограничениям (если вы еще этого не сделали, просто сохраните их в массиве или в какой-либо другой структуре данных); у вас нет для использования IloLPMatrix
для использования refineConflict
метода. Пример в этом technote показывает, как распечатать конфликты после вызова refineConflict
.