У ролях булевих, для цілого лінійного програмування


11

Я хочу висловити таке обмеження в цілій лінійній програмі:

у={0якщо х=01якщо х0.

У мене вже є цілі змінні х,у і мені обіцяють, що . Як я можу виразити вищевказане обмеження у формі, придатній для використання з цілим лінійним розв'язувачем лінійного програмування?-100х100

Це, ймовірно, вимагатиме введення деяких додаткових змінних. Які нові змінні та обмеження мені потрібно додати? Чи можна це зробити чисто з однією новою змінною? Два?

Це рівнозначно, це питання про те, як застосувати обмеження

у0 якщо і тільки якщо х0.

в контексті, де я вже маю обмеження, що означають і .0 y 1|х|1000у1


(Моя мета - виправити помилку в https://cs.stackexchange.com/a/12118/755 .)


1
Що ви пробували? Ви спробували опрацювати деякі приклади, щоб побачити, чи бачите ви візерунок? Якщо так, чи спробували ви здогадатися, а потім спробували довести це?
Бріка

1
Хе! Я бачу, що ти там робив , @Brika. Якщо вам цікаво побачити те, що я спробував, дивіться тут , а також це пояснення, чому це насправді було неправильно . Якщо ви хочете побачити мою наступну спробу, дивіться мою відповідь . Дякую за прочитання моїх старих запитань, і якщо їх можна буде покращити на майбутнє, я хотів би почути будь-які пропозиції, які у вас можуть бути!
DW

Це дуже добре. ;)
Бріка

Відповіді:


4

Я думаю, що я можу це зробити з однією додатковою бінарною змінною δ{0,1} :

-100ух100у
0,001у-100.001δх-0,001у+100.001(1-δ)

Оновлення

Це передбачає, що х є суцільною змінною . Якщо обмежимо х на цілочисельну величину , то друге обмеження можна спростити до:

у-101δх-у+101(1-δ)


1
Я перевірив це правильно, випробувавши його вичерпно за допомогою невеликої програми. Дякую за рішення!
DW

@ErwinKalvelagen, чи не могли б ви пояснити свою логіку дельтою бінарної змінної, наприклад, для більш загального випадку, якщо y = {a: x> 0, b: x <0}.
Нік

1
@ Nick Двійкова змінна використовується для моделювання конструкції "АБО". Дивіться тут відповідь на своє запитання.
Ервін Калвелаген

@ErwinKalvelagen, чудова відповідь, я намагався застосувати ваш підхід до мого запитання тут cs.stackexchange.com/questions/64794/… .
Нік

1
@GonzaloSolera Насправді я помилявся: я вважав, що є суцільною змінною. Дійсно, коли x має ціле число, ми можемо перемістити 0,001 до 1, як ви запропонували. xх
Ервін Калвелаген

1

Наступне не дуже, але це працює. Нехай , N = 100 у конкретному випадку у питанні. Тоді ми маємо такі обмеження.0хNN=100

  1. 0z1,z2,z1
  2. х-N(1-z1)0
  3. -х-Nz1-1
  4. -х-N(1-z2)0
  5. х-Nz2-1
  6. z1+z2-1z
  7. zz1
  8. zz2

Інтуїція така. . Це кодується в обмеженнях 2 і 3. Аналогічно обмеження 4 і 5 кодують z 2 = 1z1=1х0 . Останні три обмеження виражають z = z 1z 2 .z2=1х0z=z1z2


Це, здається, має помилку. Я припускаю, що ви маєте намір . Однак для x = 100 це все-таки неправильно : ми хочемо в цьому випадку примусити y = 1 ( z = 0 ), але вибору для z 1 , z 2, який задовольняє всі рівняння, не існує, як рівняння x - N z 2- 1 вимагає x < N (тобто x 99 ). Таким чином, ця ILP дає неправильний результат, колиz=1-ух=100у=1z=0z1,z2х-Nz2-1х<Nх99 : ми хочемох=99 , але у нас y = 0 . Крім тогонеобхідний діапазон для х , як зазначено в питанні - N х N ,НЕ 0 х N . у=1у=0х-NхN0хN
DW

1

Ось рішення, яке використовує дві тимчасові змінні. Нехай - цілі нульові або одиничні змінні, із задуманим значенням, що t = 1, якщо x 0 , u = 1, якщо x 0 , y = ¬ ( t u ) . Вони можуть бути виконані з такими обмеженнями:т,ут=1х0у=1х0у=¬(ту)

0т,у,у11+х101т101+х1-х101у101-хт+у-11-у1-ут1-уу

На жаль, ця відповідь невірна. Це обмежить по першій частині першого нетривіального обмеження , коли питання питає дано х 100 . Хіба помилки на заборі не цікаві? (Дітто для x - 99. )х99х100х-99
TLW

@TLW, дякую за те, що це спіймав! Я відредагував свою відповідь, щоб виправити помилку. Я вичерпно перевірив це за допомогою невеликої програми, і я думаю, це має бути правильним зараз.
DW
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.