- •1.1. Введение.
- •1.2. Оптимизационные задачи в 2.
- •1.4. Понятие о nр-полноте.
- •Условие целочисленности решения задачи лп.
- •Критерий полной унимодулярности.
- •Задача о назначениях.
- •Задача коммивояжера.
- •2. Принятие решений и элементы теории игр.
- •2.1. Задачи многокритериальной оптимизации.
- •2.3. Игры.
- •Дележи.
- •3. Сетевые модели.
- •3.1. Способы задания графов.
- •3.2. Изоморфизм графов.
- •П оиск простейших узких мест графа за o(|e|).
- •3.3. Остовные деревья.
- •Описание алгоритма Прима:
- •Корректность алгоритма Прима.
- •3.4. Кратчайшие пути в графах. Волновой алгоритм построения дкп (Дейкстра)
- •Нахождение кратчайшего пути для ациклического орграфа
- •3.5. Потоковые задачи Задача о максимальном потоке (змп).
- •На входе: матрицы а –пропускных способностей, и c – цен, c ij 0 - стоимость пропуска единицы потока по ребру (I,j), f0 - ограничение на величину потока.
- •3.6. Приближенное решение np-полных задач.
- •Задача о максимальной клике.
- •3.7. Точные методы решения np-полных задач.
- •4. Элементы теории массового обслуживания.
- •4.1. Пуассоновский поток событий
- •4.2. Моделирование простейшего потока.
- •4.3. Процессы гибели и размножения.
- •Классификация систем массового обслуживания:
- •4.4. Открытая система м | м | 1 (один врач).
- •4.5. Замкнутые системы с резервированием. Будем различать горячий и холодный резервы, т.Е. Исправные, но включенные или выключенные приборы.
- •4.6. Задачи проектирования сетей технического обслуживания.
- •3.5. Алгоритм Тарьяна (для планарных графов мод строится за o(n)).
Задача коммивояжера.
Есть матрица расстояний между городами. Нужно объехать все города, побывав в каждом ровно один раз, и вернуться в исходный пункт.
Пусть X = {xij}, где xij =1, если из i-го города едем в j-й, иначе xij =0. Цель: при условии, что матрица X удовлетворяет ограничениям:
(1) т.е. из каждого города можно выехать только в один город, (2) т.е. в каждый город можно въехать только из одного города.
Мы получили задачу о назначениях, но ограничения не определяют однозначно маршрут и могут появиться несколько циклов. Чтобы цикл был единственным, используем подход Таккера, введя дополнительно (n-1) переменную u2,u3,…,un и (n-1)×(n-2) ограничения (3): ui – uj + xij·(n-1) ≤ n–2, где 2 ≤ i ≠ j ≤ n. Тогда
если допустимое решение (X,u) задачи (1)-(3), то матрица X имеет единственный цикл (т.е. маршрут коммивояжера);
если маршрут коммивояжера (допустимая матрица Х с одним циклом), то и вектор u=(u2,u3,…,un), удовлетворяющий ограничениям (3).
Доказательство: Докажем a): предположим противное, т.е. что цикл не единственный существует цикл, не проходящий через точку 1. Пусть вершины этого цикла имеют номера , т.е. все . Имеем:
, …
, ,
… .
Складывая все эти неравенства, получим n–1 ≤ n–2, т.е. - противоречие.
Докажем b). Пусть ui - номер шага, на котором мы попадем в точку i, начиная движение с точки 1. Такие ui удовлетворяют ограничениям (3):
Пусть пара (i,j) – звено маршрута (i1) ui – uj = –1 по определению u. Кроме того, xij = 1, получим: -1+1·(n-1) ≤ n-2, т.е. верно.
Пара (i,j) маршруту xij = 0, и ui – uj ≤ n–2 по определению u.
Но для этой задачи матрица ограничений не вполне унимодулярна. Поэтому, если отбросить условие целочисленности, можно получить дробные решения. Такой подход вообще не позволяет корректно решать задачу коммивояжера.
Метод динамического программирования для ЗК.
Принцип оптимальности Беллмана: любая часть оптимального решения оптимальна.
Пусть S {2,3,…, n}, kS, а C (S, k) – длина кратчайшего пути из 1 в k, проходящего по всем пунктам множества S. Тогда C ({k}, k) = d1k , а при | S | > 1 C (S, k) = min [C (S \ {k}, m) + dmk ], где минимум берется по всем mS \ {k}. Нужно хранить argmin, чтобы восстанавливать оптимальный путь. Придется вычислять и сохранять C (S, k) для всех множеств S и всех mS . Для этого требуется память объемом 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+5x2max
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оптцлп или нужно найти все решения):
Z1,1 = Z1 {x1 2} Z1,2=Z1 {x1 3}
(2,2), fоптлп=14 <R (3,3/2), fоптлп=13,5 <R
=> улучшения или повторения рекорда не может быть.
В России всякая полезная деятельность вредна.
Сергей Юрский