2015-08-24 4 views
0

Я пытаюсь построить целочисленную программу, которая имеет решение x2> x1 при x3 = 1, однако cplex кажется чем-то нечетным с ограничением c1 (x2 - x1 + 99 x3> -99), возможно, это ошибка округления. Есть ли другой синтаксис, который я могу использовать для выражения c1 (x2 - x1 + 99 x3> -99), чтобы получить желаемый результат? БлагодаряILOG CPLEX: x2> x1 (целочисленное ограничение)

Проблема Файл

Maximize 
obj: x1 + x2 
Subject To 
c1: x2 - x1 + 99 x3 > -99 
c3: x3 = 1 
Bounds 
1 <= x1 <= 2 
1 <= x2 <= 2 
Binary 
x3 
General 
x1 
x2 

CPLEX Решение

MIP - Integer optimal solution: Objective = 4.0000000000e+00 
Solution time = 0.00 sec. Iterations = 0 Nodes = 0 
Deterministic time = 0.00 ticks (1.11 ticks/sec) 

CPLEX> Incumbent solution 
Variable Name   Solution Value 
x1       2.000000 
x2       2.000000 
+0

Речь идет не о форматировании. Ограничение, которое у вас есть, тривиально выполняется для любого значения (x1, x2) в (1,2). Вместо этого попробуйте это ограничение: 'c1: x2 - x1 - 99x3> -98.999' (RHS - -99 плюс эпсилон) –

ответ

0

Там не может быть "строго больше, чем" ограничение в CPLEX. Следовательно, CPLEX интерпретирует то, что вы предоставляете как «больше или равно». Попробуйте

x2 - x1 + 99 x3 >= -98.99999999 

P.S: Точность по умолчанию для CPLEX составляет 8 цифр.