- •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)).
3.4. Кратчайшие пути в графах. Волновой алгоритм построения дкп (Дейкстра)
Аналогичен алгоритму Прима (Т=O(n2)), но теперь D(k) – текущее кратчайшее расстояние до вершины, в которой находится аварийная служба, и для которой проводится инициализация. При корректировке сравниваем R=D(k)+d(k,j) и D(j). Если < - то коррекция: D(j)=R. Алгоритм работает корректно, если все d(i,j)≥0.
Рассмотрим работу алгоритма Дейкстры на том же примере, что и алгоритм Прима:
O |
1 |
1 |
1 |
1 |
4 |
6 5 |
2 3 |
6 7 |
|
i |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
D |
|
1 |
3 |
2 |
4 |
7 5 |
7 5 |
9 7 |
|
W |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
N |
W O-1(>0) ={i} |
{Di} |
Dk= min Di |
k= argmin |
W S(k) |
j |
Oj |
Dj |
R= Dk+dk,j |
коррекция Oj=k, Dj=R |
2 |
{4,3,2} |
{2,3,1} |
1 |
2 |
{3, 7} |
3 |
≠0 |
3 |
5+1=6 |
нет |
7 |
=0 |
|
6+1=7 |
O7=2, D7=7 |
||||||
3 |
{4,3,7} |
{2,3,7} |
2 |
4 |
{3, 5} |
3 |
≠0 |
3 |
1+2=3 |
нет |
5 |
=0 |
|
2+2=4 |
O5=4, D5=4 |
||||||
4 |
{5,3,7} |
{4,3,7} |
3 |
3 |
{5, 6, 7} |
5 |
≠0 |
4 |
3+3=6 |
нет |
6 |
=0 |
|
3+4=7 |
O6=3, D6=7 |
||||||
7 |
≠0 |
7 |
3+2=5 |
O7=3, D7=5 |
||||||
5 |
{5,6,7} |
{4,7,5} |
4 |
5 |
{6} |
6 |
≠0 |
7 |
4+1=5 |
O6=5, D6=5 |
6 |
{6,7} |
{5,5} |
5 |
6 |
{7, 8} |
7 |
≠0 |
5 |
5+1=6 |
нет |
8 |
=0 |
|
5+4=9 |
O8=6, D8=9 |
||||||
7 |
{7,8} |
{5,9} |
5 |
7 |
{8} |
8 |
≠0 |
9 |
5+2=7 |
O8=7, D8=7 |
8 |
{8} |
{7} |
7 |
8 |
{} |
|
|
|
|
нет |
Получили ДКП. По сравнению с МОД здесь произошли 2 замены: ребро (1,3) вместо (4,3) и ребро (3,7) вместо (6,7) .
При этом вторая замена, увеличив суммарную длину ребер на 1, уменьшила на 1 расстояние от вершины 1 до в-н 7 и 8.
Первая же замена, увеличив сумму длин ребер на 2, никаких расстояний не уменьшила. Нужна оптимизация по Парето.
Корректность алгоритма Дейкстры
Dk(i) - текущее расстояние от i-й до 1-ой вершины, на k-ом шаге
Ok(i) – отец вершины i, на k-ом шаге
Свойства: (считаем, что вершины перенумеровав в порядке включения)
Dk(i) не возрастает по k i.
Dk(k) не убывает по k при условии, что dij≥0.
i → O(i) → O 2(i) …→ 1 - текущий кратчайший путь из i в 1.
Dk(i)= длина пути (из пункта 3) из i в 1.
Для включенных вершин текущий путь по предкам является оптимальным.
Если i1 → i2 →…→1 - это кратчайший путь из i1 в 1, то D(i1)=D(i2)+
Справедливы утверждения:
Задача нахождения всего ДКП имеет смысл в случае ориентированного ациклического графа или графа с циклами положительной длины. В неориентированном графе все ребра должны иметь неотрицательную длину.
Задача нахождения кратчайшего пути в конкретную вершину некорректна, если граф неориентирован, связен и существует хотя бы одно ребро с отрицательной длиной, или граф ориентирован и в нем есть цикл отрицательной длины, достижимый из начальной вершины.
№21. Алгоритм Флойда (могут быть ребра отрицательной длины) :
D
R:=D;
Oij=0;
i,j for
k:=1 to
n for
i≠k
от 1 до n цикл j≠k
от 1 до n если rik+rkj<rij то{rij:=rik+rkj;
Oij:=k} end end
end return
(R,O)
Если на диагонали матрицы R на выходе алгоритма окажутся отрицательные элементы есть цикл с отрицательной длиной, иначе циклов с отрицательной длиной нет и Rij – кратчайшее расстояние между i и j.
“—“ аналог ∞.
Пример: на входе - матрица расстояний D. На выходе на диагонали матрицы R есть отрицательные числа цикл отрицательной длины R не матрица кратчайших расстояний.
Поменяем порядок перебора вершин: k=1, k=4, k=3, k=2
D: |
|
|
|
|
|
k=1 |
|
|
|
k=2 |
|
|
|
k=3 |
|
|
|
k=4 |
|
|
|
k=4 |
|
|
|
k=3 |
|
|
|
k=2 |
|
|||||||
- |
10 |
6 |
- |
|
- |
10 |
6 |
- |
|
20 |
10 |
5 |
- |
|
11 |
8 |
5 |
8 |
|
11 |
8 |
5 |
8 |
|
- |
10 |
6 |
- |
|
12 |
4 |
6 |
9 |
|
10 |
9 |
4 |
7 |
10 |
- |
-5 |
- |
|
10 |
20 |
-5 |
- |
|
10 |
20 |
-5 |
- |
|
1 |
-2 |
-5 |
-2 |
|
1 |
-2 |
-5 |
-2 |
|
10 |
20 |
-5 |
- |
|
1 |
-2 |
-5 |
-2 |
|
1 |
20 |
-5 |
-2 |
6 |
3 |
- |
3 |
|
6 |
3 |
12 |
3 |
|
6 |
3 |
-2 |
3 |
|
6 |
3 |
-2 |
3 |
|
6 |
3 |
-2 |
3 |
|
6 |
3 |
6 |
3 |
|
6 |
3 |
6 |
3 |
|
4 |
3 |
-2 |
1 |
- |
- |
3 |
- |
|
- |
- |
3 |
- |
|
- |
- |
3 |
- |
|
9 |
6 |
3 |
6 |
|
9 |
6 |
3 |
6 |
|
- |
- |
3 |
- |
|
9 |
6 |
3 |
6 |
|
7 |
6 |
1 |
4 |
Результат зависит от нумерации вершин. Что значат числа в полученной матрице? После 1-го шага – это длины либо прямых путей, либо двузвенных (через 1 вершину?). После 2-го шага число разрешенных звеньев увеличивается до 4, после 3-го шага – до 8. В результате получим путь длины 2 через 1-ю вершину: 2(1)+2(2)+2(3)+3(1 2)+3(1 3)+3(2 3)+4(1 2 1)+4(1 3 1)+4(2 3 2)+8(1 2 1 3 1 2 1)+… +7(…)+… +6(…)+…+5(…)+… В цепочках не участвует только вершина 4 (на 3-ем шаге).
С каждой матрицей можно связать списки вершин. Например: S2= (0,1,2,12, 121).
S3={(v, u): v, uS2}, | S 2| = 6 6, | S 3| = 36 36- мощность S3.???