Вступ
Написати розв'язувач для цілого лінійного програмування .
Виклик
Ваше завдання - написати розв'язувач для цілого лінійного програмування (ILP). В ILP задаються лінійні нерівності сукупності невідомих (усі цілі числа), а мета - знайти мінімум чи максимум лінійної функції.
Наприклад, для нерівностей (приклад, взятий із змішаного цілого лінійного програмування )
4x+2y-15≤0
x+2y- 8≤0
x+ y- 5≤0
- x ≤0
- y ≤0
а об'єктивної функції 3x+2y
максимум об'єктивної функції повинен бути 12
( x=2,y=3
), тоді як мінімум повинен бути 0
( x=y=0
).
Вхід подається у вигляді 2d масиву (або будь-якого еквівалента, що відповідає стандартним специфікаціям), кожен рядок відповідає одній нерівності, за винятком кінцевого рядка. Числа в масиві є коефіцієнтами, а ≤0
частина завжди опущена. Якщо n
в кожному ряду є елементи, це означає, що є n-1
невідомі.
Останній рядок масиву відповідає лінійній функції. Перераховані коефіцієнти
Наприклад, вхідний масив для вказаної вище проблеми є
[[4,2,-15],[1,2,-8],[1,1,-5],[-1,0,0],[0,-1,0],[3,2,0]].
Вихід повинен бути мінімальним та максимальним, поданим у будь-якій розумній формі.
Для наступної проблеми (з вищезазначеної проблеми знімаються два обмеження):
[[4,2,-15],[1,2,-8],[1,1,-5],[3,2,0]].
Максимум все ще є 12
, але мінімум не існує, а цільова функція може мати довільно великі (в значенні абсолютного значення) негативні значення. У цьому випадку програма повинна виводити 12
, слідуючи хибному значенню, яке вирішує відповідь. Інша справа, що рішення взагалі немає, наприклад,
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[3,2,0]].
У цьому випадку також слід виводити помилкові значення. Добре було б розрізнити випадок, коли «оптимальне значення» для цільової функції - нескінченність, і випадок, коли рішення взагалі немає, але це не потрібно.
Вхід містить лише цілі коефіцієнти як для нерівностей, так і для цільової функції. Усі невідомі також є цілими числами. Коефіцієнт матриці нерівностей гарантовано має повний ранг.
Випробування
Кредит на @KirillL. для пошуку помилки в оригінальному тестовому наборі та поглиблення мого розуміння проблем ILP.
Input
Output
[[4,2,-15],[1,2,-8],[1,1,-5],[-1,0,0],[0,-1,0],[3,2,1]]
[1,13]
[[4,2,-15],[1,2,-8],[1,1,-5],[3,2,0]]
[-inf, 12]
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[3,2,0]]
[NaN, NaN]
[[-1,-1,-1,-1,-1,8],[1,1,1,1,0,0],[5,5,5,5,6,7]]
[55, inf]
[[-1,-1,-1,-1,-1,8],[1,1,1,1,0,0],[0,0,0,0,0,4]]
[4, 4]
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[0,0,4]]
[NaN, NaN]
Технічні характеристики
Не потрібно турбуватися про обробку винятків.
Це код-гольф , найменша кількість виграних байтів.
Максимальне число невідомих:
9
. Максимальне число нерівностей:12
.Ви можете взяти вхід і надати вихід через будь-яку стандартну форму , і ви можете вільно вибрати формат.
Як завжди, тут застосовуються лазівки за замовчуванням .