Відмінності між версіями «Комбінаторні методи. Метод гілок та меж»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
 
(не показані 3 проміжні версії цього учасника)
Рядок 1: Рядок 1:
 
 
== Комбінаторні методи ==
 
== Комбінаторні методи ==
  
В основі комбінаторних методів є перебір можливих варіантів розв’язків поставленої задачі. Для розв’язування задач цілочис-лового програмування ефективнішим за метод Гоморі є метод гілок і меж. Спочатку, як і в разі методу Гоморі, симплексним методом розв’язується послаблена (без умов цілочисловості) за-дача. Потім вводиться правило перебору.
+
В основі комбінаторних методів є перебір можливих варіантів розв’язків поставленої задачі. Для розв’язування задач цілочислового програмування ефективнішим за метод Гоморі є метод гілок і меж. Спочатку, як і в разі методу Гоморі, симплексним методом розв’язується послаблена (без умов цілочисловості) за-дача. Потім вводиться правило перебору.
  
 
Нехай потрібно знайти <math>x_j</math> — цілочислову змінну, значення якої <math>x_j= x'_j</math> в оптимальному плані послабленої задачі є дробовим. Очевидно, що в деякому околі даної точки також не існує цілочислових значень, тому відповідний проміжок можна виключити з множини допустимих планів задачі в подальшому розгляді. Та-ким проміжком є інтервал між найближчими до <math>x'_j</math> цілочисловими значеннями. Можна стверджувати, що на інтервалі <math> \left [ \left [ x'_j \right ] ; \left [ x'_j \right ] + 1 \right ] </math>цілих значень немає.
 
Нехай потрібно знайти <math>x_j</math> — цілочислову змінну, значення якої <math>x_j= x'_j</math> в оптимальному плані послабленої задачі є дробовим. Очевидно, що в деякому околі даної точки також не існує цілочислових значень, тому відповідний проміжок можна виключити з множини допустимих планів задачі в подальшому розгляді. Та-ким проміжком є інтервал між найближчими до <math>x'_j</math> цілочисловими значеннями. Можна стверджувати, що на інтервалі <math> \left [ \left [ x'_j \right ] ; \left [ x'_j \right ] + 1 \right ] </math>цілих значень немає.
  
Наприклад, якщо <math>x'_j = 2,7</math> дістаємо інтервал \left [ 2;3 \right ] , де, очевидно, немає <math>x_j</math> , яке набуває цілого значення і оптимальний розв’язок буде знаходитися або в інтервалі <math>x_j \le 2</math>, або <math>x_j \ge 3</math> Виключення проміжку \left [ 2;3 \right ] з множини допустимих планів здійснюється введенням до системи обмежень початкової задачі додаткових нерів¬ностей. Тобто допустиме ціле значення <math>x_j</math> має задовольняти одну з нерівностей виду:
+
Наприклад, якщо <math>x'_j = 2,7</math> дістаємо інтервал <math>\left [ 2;3 \right ]</math> , де, очевидно, немає <math>x_j</math> , яке набуває цілого значення і оптимальний розв’язок буде знаходитися або в інтервалі <math>x_j \le 2</math>, або <math>x_j \ge 3</math> Виключення проміжку <math>\left [ 2;3 \right ]</math> з множини допустимих планів здійснюється введенням до системи обмежень початкової задачі додаткових нерівностей. Тобто допустиме ціле значення <math>x_j</math> має задовольняти одну з нерівностей виду:
 
<math>x_j \le \left [ x'_j \right ]</math> або <math>x_j \ge \left [ x'_j \right ] +1</math>
 
<math>x_j \le \left [ x'_j \right ]</math> або <math>x_j \ge \left [ x'_j \right ] +1</math>
  
Дописавши кожну з цих умов до задачі з послабленими обме-женнями, дістанемо дві, не пов’язані між собою, задачі. Тобто, [[Постановка_цілочислової_задачі_ЛП._Геометрична_інтерпретація | початкову задачу цілочислового програмування]] поділимо на дві задачі з урахуванням умов цілочисловості змінних, значення яких в оптимальному плані послабленої задачі є дробовими.
+
Дописавши кожну з цих умов до задачі з послабленими обмеженнями, дістанемо дві, не пов’язані між собою, задачі. Тобто, [[Постановка_цілочислової_задачі_ЛП._Геометрична_інтерпретація | початкову задачу цілочислового програмування]] поділимо на дві задачі з урахуванням умов цілочисловості змінних, значення яких в оптимальному плані послабленої задачі є дробовими.
 
Це означає, що симплекс-методом розв’язуватимемо дві такі задачі:
 
Це означає, що симплекс-методом розв’язуватимемо дві такі задачі:
  
Рядок 56: Рядок 55:
 
<center> <math>x_j \ge  \left [ x'_j \right ] </math>  '''(10)'''</center>
 
<center> <math>x_j \ge  \left [ x'_j \right ] </math>  '''(10)'''</center>
  
де <math>x'_j</math>  — дробова компонента розв’язку початкової задачі цілочислового програмування. Наведені задачі (1)—(5) і (6)—(10) спочатку посла-б¬люємо, тобто розв’язуємо з відкиданням обмежень (4) і (9). Якщо знайдені оптимальні плани задовольняють умови цілочисловості, то ці плани є розв’язками початкової задачі цілочислового програмування. Інакше пошук розв’язку задачі триває. Для дальшого розгалуження вибираємо розв’язок задачі з більшим значенням цільової функції, якщо йдеться про максимізацію, і навпаки — з меншим значенням цільової функції в разі її мінімізації. Подальше розгалуження виконується доти, доки не буде встановлено неможливість поліпшення розв’язку. Здобутий останній план — оптимальний.
+
де <math>x'_j</math>  — дробова компонента розв’язку початкової задачі цілочислового програмування. Наведені задачі (1)—(5) і (6)—(10) спочатку послаблюємо, тобто розв’язуємо з відкиданням обмежень (4) і (9). Якщо знайдені оптимальні плани задовольняють умови цілочисловості, то ці плани є розв’язками початкової задачі цілочислового програмування. Інакше пошук розв’язку задачі триває. Для дальшого розгалуження вибираємо розв’язок задачі з більшим значенням цільової функції, якщо йдеться про максимізацію, і навпаки — з меншим значенням цільової функції в разі її мінімізації. Подальше розгалуження виконується доти, доки не буде встановлено неможливість поліпшення розв’язку. Здобутий останній план — оптимальний.
 
   
 
   
Розв’язування цілочислових задач методом гілок і меж можна значно прискорити. Очевидно, що кожна наступна задача, яку отримують в процесі розв’язування відрізняється від попере-дньої лише одним обмеженням. Досить буде почергово приєд-нати нові обмеження виду (5) і (10) до останньої симплекс-таблиці попередньої задачі та вилучити (в разі необхідності) не-потрібні «старі» обмеження.
+
Розв’язування цілочислових задач методом гілок і меж можна значно прискорити. Очевидно, що кожна наступна задача, яку отримують в процесі розв’язування відрізняється від попередньої лише одним обмеженням. Досить буде почергово приєднати нові обмеження виду (5) і (10) до останньої симплекс-таблиці попередньої задачі та вилучити (в разі необхідності) непотрібні «старі» обмеження.
  
Геометрично введення додаткових лінійних обмежень виду (5) та (10) в систему обмежень початкової задачі означає проведення гіперплощин (прямих), що розтинають багатогранник (багатокутник) допустимих планів відповідної задачі лінійно-го програмування у такий спосіб, що уможливлюється включення в план найближчої цілої точки цього багатокутника.  
+
Геометрично введення додаткових лінійних обмежень виду (5) та (10) в систему обмежень початкової задачі означає проведення гіперплощин (прямих), що розтинають багатогранник (багатокутник) допустимих планів відповідної задачі лінійного програмування у такий спосіб, що уможливлюється включення в план найближчої цілої точки цього багатокутника.  
 
<center>[[Файл:Clip_image002.gif‎]]</center> Допустимо, що А — точка максимуму, тоді за методом гілок та меж багатокутник допустимих планів задачі ABCOD поділяється на дві частини прямими <math>x'_1 = \left [ x'_1 \right ]</math> та <math>x'_1 = \left [ x'_1 \right ]+1</math>, що виключає з розгляду точку А, координата якої <math>x'_1</math> є не цілим числом.
 
<center>[[Файл:Clip_image002.gif‎]]</center> Допустимо, що А — точка максимуму, тоді за методом гілок та меж багатокутник допустимих планів задачі ABCOD поділяється на дві частини прямими <math>x'_1 = \left [ x'_1 \right ]</math> та <math>x'_1 = \left [ x'_1 \right ]+1</math>, що виключає з розгляду точку А, координата якої <math>x'_1</math> є не цілим числом.
  
Рядок 94: Рядок 93:
  
 
Якщо задача (1)—(3) не має розв’язку (цільова функція необмежена, або система обмежень несумісна), то задача (1)—(4) також не має розв’язку.
 
Якщо задача (1)—(3) не має розв’язку (цільова функція необмежена, або система обмежень несумісна), то задача (1)—(4) також не має розв’язку.
2. Коли в умовно-оптимальному плані є дробові значення, то вибирають одну з нецілочислових змінних <math>x_i</math> і визначають її цілу частину <math> \left [ x'_i \right ]</math>3. 3. Записують два обмеження, що відтинають нецілочисло-ві розв’язки:
+
 
 +
2. Коли в умовно-оптимальному плані є дробові значення, то вибирають одну з нецілочислових змінних <math>x_i</math> і визначають її цілу частину <math> \left [ x'_i \right ]</math>
 +
 
 +
3. Записують два обмеження, що відтинають нецілочислові розв’язки:
 
<center><math>x_i \le  \left [ x'_i \right ] </math> </center>
 
<center><math>x_i \le  \left [ x'_i \right ] </math> </center>
 
<center><math>x_i \ge  \left [ x'_i \right ] +1</math> </center>
 
<center><math>x_i \ge  \left [ x'_i \right ] +1</math> </center>
4. Кожну з одержаних нерівностей приєднують до обме-жень початкової задачі. В результаті отримують дві нові ціло-числові задачі лінійного програмування.
+
4. Кожну з одержаних нерівностей приєднують до обмежень початкової задачі. В результаті отримують дві нові цілочислові задачі лінійного програмування.
 +
 
 
5. У будь-якій послідовності розв’язують обидві задачі.  
 
5. У будь-якій послідовності розв’язують обидві задачі.  
У разі, коли отримано цілочисловий розв’язок хоча б однієї із задач, значення цільової функції цієї задачі зіставляють з почат¬ковим значенням.  
+
У разі, коли отримано цілочисловий розв’язок хоча б однієї із задач, значення цільової функції цієї задачі зіставляють з початковим значенням.  
Якщо різниця не більша від заданого числа \epsilon, то процес розв’язування може бути закінчено.  
+
Якщо різниця не більша від заданого числа <math>\epsilon</math>, то процес розв’язування може бути закінчено.  
У разі, коли цілочисловий розв’язок одержано в обох задачах, то з роз¬в’язком початкової зіставляється той, який дає краще значення цільової функції.  
+
У разі, коли цілочисловий розв’язок одержано в обох задачах, то з розв’язком початкової зіставляється той, який дає краще значення цільової функції.  
Якщо ж в обох задачах одержано нецілочислові розв’язки, то для дальшого гілкування вибирають ту задачу, для якої здо-буто краще значення цільової функції і здійснюють перехід до кроку 2.
+
Якщо ж в обох задачах одержано нецілочислові розв’язки, то для дальшого гілкування вибирають ту задачу, для якої здобуто краще значення цільової функції і здійснюють перехід до кроку 2.

Поточна версія на 11:24, 14 травня 2012

Комбінаторні методи

В основі комбінаторних методів є перебір можливих варіантів розв’язків поставленої задачі. Для розв’язування задач цілочислового програмування ефективнішим за метод Гоморі є метод гілок і меж. Спочатку, як і в разі методу Гоморі, симплексним методом розв’язується послаблена (без умов цілочисловості) за-дача. Потім вводиться правило перебору.

Нехай потрібно знайти Неможливо розібрати вираз (невідома помилка): x_j

— цілочислову змінну, значення якої Неможливо розібрати вираз (невідома помилка): x_j= x'_j
в оптимальному плані послабленої задачі є дробовим. Очевидно, що в деякому околі даної точки також не існує цілочислових значень, тому відповідний проміжок можна виключити з множини допустимих планів задачі в подальшому розгляді. Та-ким проміжком є інтервал між найближчими до Неможливо розібрати вираз (невідома помилка): x'_j
цілочисловими значеннями. Можна стверджувати, що на інтервалі Неможливо розібрати вираз (невідома помилка):  \left [ \left [ x'_j \right ] ; \left [ x'_j \right ] + 1 \right ] 

цілих значень немає.

Наприклад, якщо Неможливо розібрати вираз (невідома помилка): x'_j = 2,7

дістаємо інтервал Неможливо розібрати вираз (невідома помилка): \left [ 2;3 \right ]
, де, очевидно, немає Неможливо розібрати вираз (невідома помилка): x_j
, яке набуває цілого значення і оптимальний розв’язок буде знаходитися або в інтервалі Неможливо розібрати вираз (невідома помилка): x_j \le 2

, або Неможливо розібрати вираз (невідома помилка): x_j \ge 3

Виключення проміжку Неможливо розібрати вираз (невідома помилка): \left [ 2;3 \right ]
з множини допустимих планів здійснюється введенням до системи обмежень початкової задачі додаткових нерівностей. Тобто допустиме ціле значення Неможливо розібрати вираз (невідома помилка): x_j
має задовольняти одну з нерівностей виду:

Неможливо розібрати вираз (невідома помилка): x_j \le \left [ x'_j \right ]

або Неможливо розібрати вираз (невідома помилка): x_j \ge \left [ x'_j \right ] +1


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

перша задача:

Неможливо розібрати вираз (невідома помилка): \max \,(\min )\,\,F=\sum\limits_{j=1}^n {c_{j} x_{j} } (1)

за умов:

Неможливо розібрати вираз (невідома помилка): \sum\limits_{j=1}^n {a_{ij} x_{j} } \left\{ {\begin{array}{l} \le \\ = \\ \ge \\ \end{array}} \right\}b_{i} \quad \left( {i=\overline {1,m} } \right); (2)


Неможливо розібрати вираз (невідома помилка): x_{j} \ge 0 \quad \left( {j=\overline {1,n} } \right); (3)


Неможливо розібрати вираз (невідома помилка): \ \quad x_{j}
- цілі числа  Неможливо розібрати вираз (невідома помилка): \left( {j=\overline {1,n} } \right);
(4)
Неможливо розібрати вираз (невідома помилка): x_j \le \left [ x'_j \right ] (5)

друга задача:

Неможливо розібрати вираз (невідома помилка): \max \,(\min )\,\,F=\sum\limits_{j=1}^n {c_{j} x_{j} } (6)

за умов:

Неможливо розібрати вираз (невідома помилка): \sum\limits_{j=1}^n {a_{ij} x_{j} } \left\{ {\begin{array}{l} \le \\ = \\ \ge \\ \end{array}} \right\}b_{i} \quad \left( {i=\overline {1,m} } \right); (7)


Неможливо розібрати вираз (невідома помилка): x_{j} \ge 0 \quad \left( {j=\overline {1,n} } \right); (8)


Неможливо розібрати вираз (невідома помилка): \ \quad x_{j}
- цілі числа  Неможливо розібрати вираз (невідома помилка): \left( {j=\overline {1,n} } \right);
(9)
Неможливо розібрати вираз (невідома помилка): x_j \ge \left [ x'_j \right ] (10)

де Неможливо розібрати вираз (невідома помилка): x'_j

 — дробова компонента розв’язку початкової задачі цілочислового програмування. Наведені задачі (1)—(5) і (6)—(10) спочатку послаблюємо, тобто розв’язуємо з відкиданням обмежень (4) і (9). Якщо знайдені оптимальні плани задовольняють умови цілочисловості, то ці плани є розв’язками початкової задачі цілочислового програмування. Інакше пошук розв’язку задачі триває. Для дальшого розгалуження вибираємо розв’язок задачі з більшим значенням цільової функції, якщо йдеться про максимізацію, і навпаки — з меншим значенням цільової функції в разі її мінімізації. Подальше розгалуження виконується доти, доки не буде встановлено неможливість поліпшення розв’язку. Здобутий останній план — оптимальний.

Розв’язування цілочислових задач методом гілок і меж можна значно прискорити. Очевидно, що кожна наступна задача, яку отримують в процесі розв’язування відрізняється від попередньої лише одним обмеженням. Досить буде почергово приєднати нові обмеження виду (5) і (10) до останньої симплекс-таблиці попередньої задачі та вилучити (в разі необхідності) непотрібні «старі» обмеження.

Геометрично введення додаткових лінійних обмежень виду (5) та (10) в систему обмежень початкової задачі означає проведення гіперплощин (прямих), що розтинають багатогранник (багатокутник) допустимих планів відповідної задачі лінійного програмування у такий спосіб, що уможливлюється включення в план найближчої цілої точки цього багатокутника.

Clip image002.gif
Допустимо, що А — точка максимуму, тоді за методом гілок та меж багатокутник допустимих планів задачі ABCOD поділяється на дві частини прямими Неможливо розібрати вираз (невідома помилка): x'_1 = \left [ x'_1 \right ]
та Неможливо розібрати вираз (невідома помилка): x'_1 = \left [ x'_1 \right ]+1

, що виключає з розгляду точку А, координата якої Неможливо розібрати вираз (невідома помилка): x'_1

є не цілим числом.
Combmet.png


Алгоритм методу гілок та меж:

Загальна цілочислова задача лінійного програмування записується так:

Неможливо розібрати вираз (невідома помилка): \max \,(\min )\,\,F=\sum\limits_{j=1}^n {c_{j} x_{j} } (1)

за умов:

Неможливо розібрати вираз (невідома помилка): \sum\limits_{j=1}^n {a_{ij} x_{j} } \left\{ {\begin{array}{l} \le \\ = \\ \ge \\ \end{array}} \right\}b_{i} \quad \left( {i=\overline {1,m} } \right); (2)


Неможливо розібрати вираз (невідома помилка): x_{j} \ge 0 \quad \left( {j=\overline {1,n} } \right); (3)


Неможливо розібрати вираз (невідома помилка): \ \quad x_{j}
- цілі числа  Неможливо розібрати вираз (невідома помилка): \left( {j=\overline {1,n} } \right);
(4)

1. Симплексним методом розв’язують задачу (1)—(3) (без вимог цілочисловості змінних).

Якщо серед елементів умовно-оптимального плану немає дробових чисел, то цей розв’язок є оптимальним планом задачі цілочислового програмування (1)—(4).

Якщо задача (1)—(3) не має розв’язку (цільова функція необмежена, або система обмежень несумісна), то задача (1)—(4) також не має розв’язку.

2. Коли в умовно-оптимальному плані є дробові значення, то вибирають одну з нецілочислових змінних Неможливо розібрати вираз (невідома помилка): x_i

і визначають її цілу частину Неможливо розібрати вираз (невідома помилка):  \left [ x'_i \right ]


3. Записують два обмеження, що відтинають нецілочислові розв’язки:

Неможливо розібрати вираз (невідома помилка): x_i \le \left [ x'_i \right ]
Неможливо розібрати вираз (невідома помилка): x_i \ge \left [ x'_i \right ] +1

4. Кожну з одержаних нерівностей приєднують до обмежень початкової задачі. В результаті отримують дві нові цілочислові задачі лінійного програмування.

5. У будь-якій послідовності розв’язують обидві задачі. У разі, коли отримано цілочисловий розв’язок хоча б однієї із задач, значення цільової функції цієї задачі зіставляють з початковим значенням. Якщо різниця не більша від заданого числа Неможливо розібрати вираз (невідома помилка): \epsilon , то процес розв’язування може бути закінчено. У разі, коли цілочисловий розв’язок одержано в обох задачах, то з розв’язком початкової зіставляється той, який дає краще значення цільової функції. Якщо ж в обох задачах одержано нецілочислові розв’язки, то для дальшого гілкування вибирають ту задачу, для якої здобуто краще значення цільової функції і здійснюють перехід до кроку 2.