Теория игр и исследование операций. Модели, алгоритмы, сложность: Конспект лекций, страница 13

Мы получили задачу о назначениях, но ограничения не определяют однозначно маршрут и могут появиться несколько циклов. Чтобы цикл был единственным, используем подход Таккера, введя дополнительно (n-1) переменную u2,u3,…,un и (n-1)×(n-2) ограничения (3): ui– uj+ xij·(n-1) ≤ n–2, где 2 ≤ i≠ j≤ n. Тогда

a)  если $ допустимое решение (X,u) задачи (1)-(3), то матрица X имеет единственный цикл (т.е. маршрут коммивояжера);

b)  если $ маршрут коммивояжера (допустимая матрица Х с одним циклом), то $ и вектор u=(u2,u3,…,un), удовлетворяющий ограничениям (3).

Доказательство: Докажем a): предположим противное, т.е. что цикл не единственный Þ существует цикл, не проходящий через точку 1. Пусть вершины этого цикла имеют номера , т.е. все . Имеем:

,                          …

,                          ,

…                                                                    .

Складывая все эти неравенства, получим  n–1 ≤ n–2, т.е. - противоречие.

Докажем b). Пусть ui - номер шага, на котором мы попадем в точку i, начиная движение с точки 1. Такие ui удовлетворяют ограничениям (3):

1)  Пусть пара (i,j) – звено маршрута (i¹1) Þ ui– uj= –1 по определению u. Кроме того, xij= 1, Þ получим: -1+1·(n-1) ≤ n-2, т.е. верно.

2)  Пара (i,j) Ï маршруту Þxij= 0, и ui– uj≤ n–2 по определению u.

Но для этой задачи матрица ограничений не вполне унимодулярна. Поэтому, если отбросить условие целочисленности, можно получить дробные решения. Þ Такой подход вообще не позволяет корректно решать задачу коммивояжера.

Метод динамического программирования для ЗК.

Принцип оптимальности Беллмана: любая часть оптимального решения оптимальна.

Пусть S Ì{2,3,…, n}, kÎS, а C (S, k) – длина кратчайшего пути из 1 в k, проходящего по всем пунктам множества S. Тогда C ({k}, k) = d1k , а при | S | > 1 C (S, k) = min [C (S \ {k}, m) + dmk], где минимум берется по всем mÎS \ {k}. Нужно хранить argmin, чтобы восстанавливать оптимальный путь. Придется вычислять и сохранять C (S, k) для всех множеств S  и всех mÎS . Для этого требуется память объемом Vn и Tn операций сравнения и сложения.  


Метод ветвей и границ для ЦЛП.

Пусть Z есть задача ЦЛП (x-целое). Рассмотрим функционалы F ЛП и F ЦЛП

DЛП - область определения ЛП, DЦЛП   - область определения ЦЛП

DЛП É DЦЛПÞ FЛП  ³ FЦЛП ,           Это соотношение задает границу для FЦЛП

Описание  МВиГ:     Вход: описание задачи Z.

Оценка (Z)     /* решение вспомогательной ЛП, т.е. нахождение xЛП и FЛП*/

If xЛП – целое Then Return(xЛПElse  { r =-¥;  OPEN ={Z};

/* OPEN - упорядоченное по значениям FЛП AVL-дерево.*/ }

While (OPEN¹Æ) do                          /* основной цикл */

s= pop(OPEN); OPEN-={s};     /*выбор вершины списка OPEN как */

/* текущей задачи s и удаление ее из списка*/

СПИСОК1= список_дочерей_s;  /* СПИСОК1-очередь на оценку*/ выбор для ветвления нецелочисленной координаты xi0;

s1=sÈ{ xi0<[ xi0опт]}; s2=sÈ{ xi0<[ xi0опт]+1};

While (СПИСОК1¹Æ) do

s1=pop(СПИСОК1);        СПИСОК1-=s1;

оценка(s1)                                     /* для ЦЛП: решение ЛП для s1 */

Анализ:          If оценка(s1)> r Then                         /* оценка лучше рекорда */

If xлпs1-целое

Then    {r = оценка(s1); xr= xлпs1; установка флага очистки списка OPEN }

Else     OPEN+=s1; /* с учетом оценки s1*/

End_While_ СПИСОК1

If  флаг очистки установлен

Then  удаляем из списка OPEN все вершины, оценка которых < r

End_While_OPEN;

Return(r,xr);

End.

№9. Пример:         2x1+5x2àmax

x1+3x2 £ 9

3x1+2x2 £ 12               x1,x2 ³ 0

для ЛП z=(18/7, 15/7)     fоптлп=156/7

fоптзлп =?                         Z  (18/7,15/7)

Z1=Z È {x2 £ 2}              Z2=Z È {x2 ³ 3}

(8/3,2), fопт=151/3                     (0,3), fоптзлп=15

получили целочисленное решение стоимостью 15. Это уже точно одно из решений целочисленной задачи => (0,3) записываем в рекорд (R).

На следующих шагах (если fоптлп > fоптцлп  или нужно найти все решения):