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


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. 0≤z1,z2,z≤1
  2. х-N(1-z1)≤0
  3. -х-Nz1≤-1
  4. -х-N(1-z2)≤0
  5. х-Nz2≤-1
  6. z1+z2-1≤z
  7. z≤z1
  8. z≤z2

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


Це, здається, має помилку. Я припускаю, що ви маєте намір . Однак для 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-хт+у-1≤1-у1-у≤т1-у≤у

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

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