- •1. Введение 4
- •1.1. Основные методологические принципы
- •1.2. Основные определения
- •1.3. Этапы моделирования
- •5. Модели с обратной связью, динамическое проектирование.
- •2. О принципах принятия решений
- •2.1. Принятие решений в условиях неопределенности критерия.
- •Самостоятельная работа №1.
- •2.2. Принятие решения в условиях неопределенности состояния окружающей среды
- •Самостоятельная работа №2
- •3. Задачи выпуклого векторного программирования1.
- •3.1. Некоторые сведения выпуклого анализа
- •3.2. Понятие оптимальности по Слейтеру и Парето
- •3.3. Возможные (допустимые) и подходящие направления.
- •3.4. Задача выпуклого векторного программирования с ограничениями типа неравенства. Поиск подходящих направлений.
- •Самостоятельная работа №3.
- •3.4. Теорема Куна–Таккера для задачи выпуклого векторного программирования
- •Самостоятельная работа № 4.
- •4. Некоторые задачи теория игр
- •4.1. Анализ матричных антагонистических игр двух игроков .
- •Самостоятельная работа № 5.
- •4.2. Анализ матричных игр двух игроков с нулевой суммой в смешанных стратегиях.
- •Самостоятельная работа №6
- •4.3. Биматричные неантагонистические игры.
- •Самостоятельная работа № 7.
- •4.4. Взаимосвязь равновесий по Нешу и Парето в играх.
- •Самостоятельная работа № 8.
- •4.5. Динамические игры с полной информацией
- •Самостоятельная работа № 9
- •5. Задачи дискретного программирования.
- •5.1. Методы отсечения для решения задач целочисленного линейного программирования.
- •Самостоятельная работа № 10.
- •5.2. Комбинаторные методы решения задач целочисленного линейного программирования.
- •5.3. Алгоритм Ленд–Дойг.
- •Самостоятельная работа № 11.
- •5.4. Метод ветвей и границ для решения задачи о коммивояжере.
- •Самостоятельная работа № 12.
- •6.Транспортные задачи линейного программирования
- •6.1. Транспортная задача в сетевой постановке
- •Самостоятельная работа 13.
- •6.2. Транспортная задача в матричной постановке.
- •Самостоятельная работа 14.
- •7. Динамическое программирование и потоки в сетях
- •7.1. Задача оптимизации многошаговых процессов, задача о ранце.
- •Самостоятельная работа 15.
- •7.2 .Задача отыскания кратчайшего расстояния в сети между парами вершин
- •Самостоятельная работа 16.
- •7.2. Задача о максимальном потоке в сети.
- •Самостоятельная работа 17.
- •Литература.
7.2 .Задача отыскания кратчайшего расстояния в сети между парами вершин
Постановка задачи. Пусть задан ориентированный графG=E,V,H, в котором для каждой дугиvVзадана длинасv.На множестве вершинE выделены две вершиныник (соответственно начало и конец пути). Требуется среди всех путей
н=i0, v1, i1, v2, i2,..., vk, ik=к, соединяющих вершиныtиs, гдеh1(vj)=ij–1, h2(vj)=ij , j=1,2,3,…,k, с длиной, определить путь, длина которого минимальна.
На графе, изображенном на этом рисунке, выделено 2 пути из вершины 1 в вершину 9: путь 1 – 1, v2, 4, v9,7, v16, 9,
путь 2 – 1, v1, 3,v7, 5,v12, 6, v14, 9.
Если считать, что длины всех дуг равны 1, то длина первого пути равна 3, длина второго пути равна 4. Не трудно видеть, что длина кратчайшего пути равна 3, и кратчайший путь не единственный.
Алгоритм Беллмана – Калабы
Обозначим через Wiдлину кратчайшего пути от вершиныiдо вершинык. Согласно принципа оптимальности Беллмана
Значение Wнбудет длиной кратчайшего пути от вершинындо вершинык. Для кратчайшего путин=i0, v1, i1, v2, i2,..., vk, ik=ксправедливо равенство . Алгоритм Белмана–Калабы представляет собой аналог метода простой итерации. Начальное приближение имеет вид
Первый этап.
0–шаг(задание начального приближения). , гдеM – достаточно большое число, например заведомо большее, чем длина самого длинного пути.
j–ый шаг. ( j=1,2,3,...)
Если после двух следующих друг за другом итерациях jи (j+1)для всехiE, то полагаем для всехiE . ЕслиWн M, то задача не имеет решения (нет путей между вершинаминик), в противном случае переходим к выполнению второго этапа.
Второй этап.
0–шаг. Положить.
j–ый шаг(j=1,2,3,...)
Положить ,
Если , то алгоритм прекращает работу, в противном случае переходим к следующему шагу.
Пример.Пусть граф имеет следующий вид:
Для него длины дуг заданы в таблице:
дуга |
v1 |
v2 |
v3 |
v4 |
v5 |
v6 |
v7 |
v8 |
v9 |
v10 |
длина |
3 |
3 |
1 |
1 |
2 |
4 |
1 |
1 |
5 |
1 |
Эти длины также записаны на графе рядом с дугами.
Шаг 0. Заполнения столбца «шаг 0» очевидно.
|
шаг 0 |
вершина |
W0 |
1 |
¥ |
2 |
¥ |
3 |
¥ |
4 |
¥ |
5 |
¥ |
6 |
0 |
Шаг 1. Заполнение клетки (6, шаг 1) очевидно. Вычислим , в клетку (1, шаг 1) вносим (,–). Далее вычислим, минимум достигается на дугеv6. И так далее, получим значения остальных клеток шага 1.
|
шаг 0 |
шаг 1 | |
вершина |
W0 |
W1 |
v |
1 |
¥ |
¥ |
– |
2 |
¥ |
4 |
v6 |
3 |
¥ |
¥ |
– |
4 |
¥ |
5 |
v9 |
5 |
¥ |
1 |
v10 |
6 |
0 |
0 |
– |
Жирным выделены дуги, на которыхдостигается минимум при вычислении W1.
Выполняя аналогичным образом 4 шага получим
|
шаг 4 |
шаг 5 |
вершина |
W4 |
(W5,v) |
1 |
4 |
(4,v3) |
2 |
3 |
(3,v4) |
3 |
2 |
(2,v7) |
4 |
2 |
(2,v8) |
5 |
1 |
(1,v10) |
6 |
0 |
(0,–) |
Для восстановления оптимального пути используем столбец шага 2, движение начинаем из вершины 1, для нее запомнена дуга v3. По этой дуге попадаем в вершину 2, из вершины 2 по дуге v4в вершину 4, т.д. Таким образом, оптимальный путь следующий (1,v3 ,2,v4 ,4,v8 ,5,v10 ,6), его длина равна.
Алгоритм Флойда.
Пусть Wi – верхние оценки кратчайших расстояний от вершиныiдо вершинык, для самой вершиныкWк=0. Если для всех дугvVвыполняется, то оценкиWiдают кратчайшие расстояния от вершиныiдо вершинык. Заметим, что если некоторая дугаvVсодержится в кратчайшем пути из некоторой вершины i(например из вершиныh1(v) ) в вершинуs, то для нее. Если нашлась дугаvV , для которой, то оценкиWiне дают кратчайшие расстояния от вершинiдо вершиныs так как оценкуможно улучшить, положив. На этом свойстве основан алгоритм Флойда.
Алгоритм.
Первый этап.
0–шаг(задание начального приближения).
Положить для всех iE\{к} Wi=, для i=к Wк=0;
j–ый шаг. (j=1,2,3,...)
Среди всех дуг vVищем дугу (обычно в порядке нумерации), для которой , если такой дуги не существует, то переходим к выполнению второго этапа, в противном случае полагаем, для вершины запоминаем дугу выходаv, и переходим к выполнению следующего шага.
Второй этап.
Если Wн<, то выполняем второй этап алгоритма Беллмана–Калабы, в противном случае задача решения не имеет.
Пример. В качестве примера рассмотрим предыдущую задачу. Для нее таблица, которую уже внесено начальное приближение имеет вид:
На графе ищем дугу, для которой ,
вершина |
1 |
2 |
3 |
4 |
5 |
6 |
(W,v) |
(, –) |
(, –) |
(, –) |
(, –) |
(, –) |
(, –) |
Таковой является v6, для нее h1(v6)=2, h2(v6)=6, поэтому полагаем W2=4+W6=4, заменяем значения в клетке 2 на (4, v6), получим
вершина |
1 |
2 |
3 |
4 |
5 |
6 |
(W,v) |
(, –) |
(4, v6) |
(, –) |
(, –) |
(, –) |
(, –) |
Следующей будет дуга v6, поэтому полагаемW1=1+W2=4, поэтому
вершина |
1 |
2 |
3 |
4 |
5 |
6 |
(W,v) |
(5, v3) |
(4, v6) |
(, –) |
(, –) |
(, –) |
(, –) |
И так далее, на последнем шаге получим таблицу
вершина |
1 |
2 |
3 |
4 |
5 |
6 |
(W,v) |
(4,v3) |
(3,v4) |
(2,v7) |
(2,v8) |
(1,v10 |
(0,–) |
Восстанавливая по этой таблице путь путь, получим ранее полученное решение.
Алгоритм Дейкстры отыскания кратчайших расстояний на графе.
Алгоритм Дейкстры применяется для случая, когда cv>0. В нем каждая вершина может быть:
a) непомеченной,
b) помеченной временной пометкой,
c) помеченной постоянной пометкой.
Вершина iнепомечена, если для нее не найдено ни одного пути из вершинын, помечена временной пометкой, если из вершиныннайден путь и величинаWiесть верхняя оценка кратчайшего расстояния отндоi(и на последующих итерациях величинаWiможет быть уточнена вплоть до кратчайшего расстояния отндоi). Помечена постоянной пометкой, еслиWiиз верхней оценки стала кратчайшим расстоянием отндоi. Алгоритм первого этапа заканчивает работу, если вершинакстала помеченной постоянной пометкой, в этом случаеWкстало равным кратчайшему расстоянию отндок.
Первый этап.
0–шаг.Для всехiE\{н} полагаемWi=M , эти вершины считаем непомнеченными, дляi=н полагаемWi=0, эту вершину считаем помеченной временной пометкой,
k–ый шаг. Ищем, где минимум берется переменнойi среди все временно помеченных вершин. Вершинуjпомечаем постоянной пометкой. Еслиj=к, то найдено кратчайшее расстояние до этой вершины, и переходим к восстановлению кратчайшего пути, выполняемого на втором этапе, в противном случае «просматриваем» вершинуj, т.е. для всехвыполняем:
a) определяемi=h2(v),
b) полагаемWi=min(Wi, cv+Wj), помечаем эту вершину временной пометкой и переходим к выполнению ( K+1) шага.
Второй этап.(восстановление кратчайшего пути)
Так как движение идет от конца пути к началу, то применим обратный отсчет шагов, в нем начальный шаг N=|E|.
N–шаг.Полагаем ;
k–ый шаг(k=N–1,N–2,…). Средиищем, для которой
, полагаем. Если , то алгоритм заканчивает работу, в противном случае переходим к выполнению (k–1) –го шага.
Пусть kномер шага, на котором остановился алгоритм второго этапа, тогда решение задачи имеет вид.
Замечание.Для отыскания кратчайшего расстояния между двумя вершинами достаточно, чтобы только конечная вершина получила постоянную пометку. Если требуется найти кратчайшее расстояние от начальной вершины до всех остальных, то следует выполнять алгоритм до тех пор, пока все вершины не окажутся помечеными постоянной пометкой.
Пример. Рассмотрим вновь пример, который приведен на следущем рисунке:
0–й шаг.Все вершины непомечены, в них в квадратах около вершин записаны «», кроме вершины 1, около нее в квадрате записано «0». Далее будем считать, что если в прямоугольнике не «», то вершина непомечена, если это число не, вершина помечена временной пометкой, если квадрат затемнен, то пометка постоянная.
2–й шаг. Среди всех временно помеченных вершин выбираем вершину с наименьшей величиной пометки, это вершина 1, она становится постоянно помеченной, из нее по инцидентным дугам просматриваются вершины 2,4,3. Для них соответственно, , . Эти значения вносим в рисунок
2–й шаг. Повторяем процедуру, аналогичную шагу 2, но теперь для вершины 1.
Заметим, что величина пометки вершины 4 уменьшилась после просмотра вершины 1.
3–й шаг. Просматриваем вершину 4, так как у нее наименьшая пометка, будем иметь
4–й шаг. Просматриваем вершину 3 (можно и 5, ), при ее просмотре в других вершинах ничего не изменяется.
5–й шаг. Просматриваем вершину 5, получим
6–й шаг. Постоянно помеченной вершиной становится вершина 6. До нее найдено кратчайшее расстояние. Оно равно 4.
Работу второго этапа также продемонстрируем на рисунке. Среди дуг, входящих в вершину 6, выделим дугу, для которой выполняется равненство . Таковой является дугаv10. Для нее 3+1=4, вершина – начало этой дуги равно 5.
Теперь эту же процедуру проведем для вершины 5, и так далее. Получим путь, изображенный на рисунке