Я пытаюсь решить проблемы с целым программированием. Я пытался как использовать SCIP и LPSolveРешение целочисленной линейной программы: почему решатели, претендующие на разрешимый экземпляр, недопустимы?
Например, учитывая окончательные значения A и B, я хочу, чтобы решить для Вала в следующих C# код:
Int32 a = 0, b = 0;
a = a*-6 + b + 0x74FA - valA;
b = b/3 + a + 0x81BE - valA;
a = a*-6 + b + 0x74FA - valA;
b = b/3 + a + 0x81BE - valA;
// a == -86561, b == -32299
Что я реализовал, как это целое программа в формате LP (усечения деление вызывает несколько осложнений):
min: ;
+valA >= 0;
+valA < 92;
remAA_sign >= 0;
remAA_sign <= 1;
remAA <= 2;
remAA >= -2;
remAA +2 remAA_sign >= 0;
remAA +2 remAA_sign <= 2;
remAA +4294967296 remAA_range >= -2147483648;
remAA +4294967296 remAA_range <= 2147483647;
remAA +4294967296 remAA_range +2147483648 remAA_sign >= 0;
remAA +4294967296 remAA_range +2147483648 remAA_sign <= 2147483648;
-1 remAA +4294967296 remAA_range +3 remAA_mul3 = 0;
remAB_sign >= 0;
remAB_sign <= 1;
remAB <= 2;
remAB >= -2;
remAB +2 remAB_sign >= 0;
remAB +2 remAB_sign <= 2;
remAB +4294967296 remAB_range >= -2147483648;
remAB +4294967296 remAB_range <= 2147483647;
remAB +4294967296 remAB_range +2147483648 remAB_sign >= 0;
remAB +4294967296 remAB_range +2147483648 remAB_sign <= 2147483648;
+1431655765 remAA +1 offA -2 valA +1 offB -1 remAB +4294967296 remAB_range +3 remAB_mul3 = 0;
a = -86561;
b = -32299;
offA = 29946;
offB = 33214;
-4 offA +3 valA +1431655765 remAA +1 offB +4294967296 Fa - a = 0;
+477218588 remAA -1431655769 offA -1431655764 valA -1431655763 offB +1431655765 remAB +4294967296 Fb - b = 0;
int valA;
int remAA;
int remAA_range;
int remAA_sign;
int remAA_mul3;
int remAB;
int remAB_range;
int remAB_sign;
int remAB_mul3;
int Fa;
int Fb;
int offA;
int offB;
int a;
int b;
А потом попытался решить:
The model is INFEASIBLE
Однако я знаю, что существует приемлемое решение, потому что я знаю переменное назначение, которое работает. Добавление следующих условий вызывает решение можно найти:
a = -86561;
b = -32299;
offA = 29946;
offB = 33214;
valA = 3;
remAA = 0;
remAA_range = 0;
remAA_sign = 0;
remAA_mul3 = 0;
remAB = 1;
remAB_range = 0;
remAB_sign = 0;
remAB_mul3 = -21051;
Fa = 0;
Fb = 21054;
Два различных решателей утверждали это осуществимо проблемой является недопустимой. Я нарушаю какое-то неписаное состояние? Что происходит? Существуют ли решатели, которые фактически решают проблему?
Если вы построите свою модель, экспортируйте .lp-файл и отправьте его мне, я запустил его через CPLEX. У этого есть хорошая информация о конфликте (неосуществимости). Мой адрес электронной почты - это мое имя пользователя в gmail dot com. Наверное, вы могли бы просто положить его на Пастбин или что-то подобное. – raoulcousins
@raoul Я отправил по электронной почте файлы lp-cplex, которые я использовал с помощью scip. –
Я решил это с помощью CPLEX, и это было возможно. Оптимальное решение имело объективное значение функции, равное нулю. Это было то же самое, что и релаксация LP, которая имела базисную матрицу с номером условия (каппа) 3,4. С дополнительными ограничениями объектная функция была одинаковой; число условий 4.6.Я не уверен, что CPLEX делает под капотом, который отличается от SCIP для этой конкретной проблемы. Не могли бы вы решить вашу модель с neos-server.org и использовать CPLEX? – raoulcousins