Использование командной строки soplex для вывода решения - PullRequest
1 голос
/ 03 мая 2020

Итак, принимая тривиальную задачу, test.lp

Maximize
 obj: b1 + b2
Subject To
 c1: + 2 b1 + 2 b2  <= 3
Binary
 b1 b2
End

Имеет сразу очевидный ответ, что либо b1, либо b2 должно быть 1, а остальные 0.

Я могу запустите SoPlex как:

soplex --lpfile test.lp -X -x

, который выдает:

SoPlex status       : problem is solved [optimal]
Solving time (sec)  : 0.00
Iterations          : 1
Objective value     : 1.50000000e+00


Primal solution (name, value):
b1      5.0000000000000000e-01
b2      1.0000000000000000e+00

Что ясно, что это "нормализовало" проблему делив все на 2 (как вы можете видеть, цель равна 1,5, а не 3, и она возвращает решение, b1 равно 0,5 вместо 1).

Поэтому мой вопрос заключается в том, как вывести фактическое решение переменной. Желательно в своем собственном файле. Кажется, это было бы действительно очевидно, но я не могу ничего найти после нескольких часов поиска и экспериментов!

1 Ответ

2 голосов
/ 04 мая 2020

Решение совершенно правильное. Ваше ограничение ограничивает либо b1, либо b2 значением 0,5, тогда как другая переменная может равняться 1. Это делает ограничение жестким и приводит к оптимальному значению решения 1,5.

Обратите внимание, что SoPlex является чистым Решатель LP, так что указание переменных в виде двоичного файла будет просто игнорироваться решателем. Вам следует проверить SCIP , если вы хотите решить задачи целочисленной оптимизации.

...