
- •1. Теория графов
- •1.1 Остовные деревья минимального веса.
- •Алгоритм Прим
- •Алгоритм Краскал
- •1.2 Нахождение кратчайших путей между двумя заданными вершинами. Алгоритм Дийкстры
- •Алгоритм Дийкстры
- •Модифицированный алгоритм Дийкстры
- •1.3 Нахождение кратчайших цепей между всеми парами узлов в сети
- •Алгоритм Флойда (Floyd r. W.)
- •Модификация алгоритма Флойда
- •1.4 Построение потоков максимальной мощности. Алгоритм Форда-Фалкерсона
- •Алгоритм Форда-Фалкерсона
- •1.5 Обобщенные задачи о потоке
- •1.5.1 Построение потока в сети с двойным ограничением потока по дугам
- •1.5.2 Построение потока в сети с пропускными способностями узлов
- •1.5.3 Построение потока в сети с несколькими источниками-стоками
- •1.5.4 Построение потока в сети с неориентированными ребрами
- •1.6 Определение потока заданной величины минимальной стоимости. Алгоритмы Басакера-Гоуэна, Клейна
- •Алгоритм Басакера-Гоуэна (Basaker r.G., Gowen p.J)
- •Алгоритм Клейна (Klein m.)
- •2 Сетевое планирование
- •2.1 Построение сетевых моделей
- •2.2 Расчет и анализ сетевых моделей
- •Задача №1
- •Задача №2
- •I. Поиск критических путей
- •II. Поиск резервов работ
- •Правило №2.1
- •3 Линейное программирование
- •3.1 Примеры задач лп
- •3.2 Свойства решений задач линейного программирования
- •3.3 Двумерные задачи линейного программирования. Графический метод решения. Исследование на разрешимость
- •3.3.1 Построение области допустимых решений целевой функции f.
- •3.3.2 Построение прямой уровня
- •3.3.3 Максимизация целевой функции f
- •3.4 Симплекс-метод.
- •3.4.1 Построение начального опорного плана.
- •3.4.2 Симплексные таблицы
- •3.4.3 Примеры решения задач симплекс-методом
- •4. Теория двойственности в линейном программировании
- •4.1 Понятие двойственности. Построение пары взаимно двойственных задач
- •4.2 Теоремы двойственности и их экономическое содержание
- •4.3 Анализ решения задач линейного программирования
- •5. Транспортная задача
- •5.1 Постановка транспортной задачи в матричной форме. Построение исходного опорного плана
- •5.2 Метод потенциалов
- •5.3 Дополнительные условия в транспортных задачах.
- •6. Дискретное программирование.
- •6.1 Метод Гомори для решения задачи целочисленного линейного программирования
- •7. Динамическое программирование
- •7.1 Многошаговые процессы в динамических задачах
- •7.2 Принцип оптимальности и рекуррентные соотношения
- •7.3 Вычислительная схема динамического программирования
- •7.4 Оптимальное распределение средств на расширение производства
- •8. Матричные игры
- •8.1 Парные матричные игры с нулевой суммой
- •8.2 Платежная матрица
- •Нижняя и верхняя цена игры
- •8.3 Смешанные стратегии
- •8.3 Решение матричной игры сведением к задаче линейного программирования
- •8.4 Решение матричной игры графическим методом
- •8.5 Приближенный метод решения матричных игр
- •Практические работы Практическая работа №1 Построение остовного дерева графа. Нахождение найкратчайшего расстояния между заданными вершинами графа
- •Практическая работа №2 Нахождение наикратчайших расстояний между всеми парами вершин графа. Алгоритм Флойда.
- •Практическая работа №3
- •Практическая работа №4 Нахождение потока заданной величины минимальной стоимости. Алгоритм Басакера-Гоуэна
- •Практическая работа №7 Оптимизация проекта по времени.
- •Практическая работа №8
- •Практическая работа №9 Оптимизация целевой функции с помощью двухфазного симплекс метода.
- •Практическая работа №10 Решение двойственных задач. Экономическая интерпретация задач линейного программирования.
- •Практическая работа №11 Решение транспортных задач.
- •Практическая работа №12 Дополнительные условия в транспортных задачах
- •Практическая работа №13 Метод Гомори для решения задачи целочисленного линейного программирования.
- •Практическая работа №14
- •Практическая работа №15 Решение матричных игр в чистых стратегиях
- •Практическая работа №16 Графический метод решения матричных игр.
- •Каркас минимального веса. Метод р. Прима.
- •Кратчайшие пути
- •Лабораторная работа №2 Кратчайшее расстояния от заданной вершины до всех остальных вершин графа.
- •Алгоритм Дийкстры.
- •Пути в бесконтурном графе.
- •Лабораторная работа №3 Кратчайшие пути между всеми парами вершин графа.
- •Алгоритм Флойда.
- •Лабораторная работа №4 Построение потока максимальной мощности.
- •Потоки в сетях.
- •Метод построения максимального потока в сети.
- •Лабораторная работа №5 Симплекс метод
- •Лабораторная работа №6 Транспортная задача
- •Список литературы
Модификация алгоритма Флойда
Шаг
0. Пусть N =
{1, 2, …n}- множество узлов сети. На j-й
итерации работы алгоритма будем строить
матрицу длин
,
элемент которой
равен длине «узкого» места (i, j) – цепи,
промежуточными узлами в которой могут
быть лишь узлы из множества {1, 2,…, p}; и
справочную матрицу
,
каждый элемент
которой
указывает первый после узла i узел в
такой сети.
Алгоритм
начинает работу с матрицей
,
где
,
если меняется дуга из i в j (в противном
случае
),
и с матрицей
После построения матриц
и
для каждого p=1, 2, …, n, используя для
вычислений элементы матриц, полученных
на предыдущих итерациях, необходимо
выполнить следующую процедуру:
Шаг
1. Пусть
матрицы
и
найдены. Выделим элементы p-й строки и
p-го столбца матрицы
.
Назовем эти множества элементов базовой
строкой и базовым столбцом соответственно.
Шаг 2. Построим матрицы и , исходя из следующего правила: для
Если
,
то
и
.
Если , то и .
Шаг
3. Элемент
матрицы
равен «узкому» месту в цепи из узла i
в узел j.
Элемент
есть узел, стоящий после узла i в этой
цепи.
1.4 Построение потоков максимальной мощности. Алгоритм Форда-Фалкерсона
Определение Ориентированный граф G = (V, E) называется сетью, если в нем отмечены (выделены) некоторые вершины, называемые полюсами; при этом, множество полюсов разбито на два подмножества: вершины первого подмножества являются источниками, а второго — стоками. Остальные вершины называются внутренними.
В данном разделе рассматриваются только сети, где имеется один источник s (sourse) и один сток t (target).
Для
каждой вершины
выделим
два множества дуг:
E+(
ν) = {( ν, u)
E} выходящих
из ν,
и
E-( ν) = {( u, ν) E} входящих в ν
Пусть f: E R – некоторая функция на дугах.
Дивергенцией f в вершине ν называется число
Функция f: E R называется потоком в сети, если во всех внутренних вершинах выполнено равенство div f (ν) = 0.
Данное условие называется условием неразрывности. Оно означает (если интерпретировать f(e) как количество жидкости, протекающей по дуге в единицу времени), что для любой внутренней вершины ν количество жидкости, втекающей в эту вершину, равно количеству жидкости, вытекающей из нее.
Пример. Пусть задан граф G=(V, E), в котором пропущен допустимый поток f (рис.1.16).
Рис. 1.16
Числа c(x, y), f(x, y), стоящие над дугой (x, y) графа, показывают соответственно пропускную способность и пропущенный поток в этой дуге.
Очевидно, что, например, во внутренних вершинах сети a и b дивергенция равна нулю, т.е. выполняется условие неразрывности, или, по-другому, в сети задан поток.
Определение Мощностью потока называется число
M(f) = div f(s) = - div f(t).
M(f) интерпретируется как количество жидкости «создаваемое» источником и, соответственно, равное (в силу неразрывности) количеству жидкости «потребляемому» стоком. В приведенном примере мощность потока равна 4.
Пусть каждой дуге поставлено в соответствие некоторое число c(e) >=0, называемое пропускной способностью дуги. Поток f является допустимым, если выполняется условие:
0<= f(e)<= c(e) для любой дуги e E.
Т.к. в дуге (s, a) (рис. 4.1) пропускная способность равна двум единицам, то в ней задан допустимый поток, который также равен двум единицам.
Постановка задачи. Задана сеть с фиксированными пропускными способностями дуг. Найти среди допустимых потоков поток максимальной мощности.
В связи с излагаемым ниже алгоритмом решения этой задачи, потребуется рассмотреть еще ряд объектов, ассоциированных с сетями и потоками.
Пусть
—
некоторое подмножество вершин,
удовлетворяющих условию
Пара
(X, X*),
где X* = V \ X
называется разрезом, отделяющим вершину
s
от вершины
t.
Для разреза (X, X*) введем множество
E+(X, X*) = {e(u, ν) E: u X, ν X*}
дуг, идущих из X в X*.
Определение Пропускной способностью разреза (X, X*) называется число
В приведенном выше примере, рассмотрим, например, разрез (X, X*) с множествами X={s, a} и X*={b, t}. Видим, что его мощность равна
C(X, X*) = c(s, b)+c(a, b) +с(a, t)=3+1+4=8.
Теорема (Ford-Fulkerson). (Необходимое условие максимального потока). Если f – допустимый поток максимальной мощности, то существует разрез (X, X*), такой что
M(f)=C(X, X*).
Пусть st – некоторый путь (без учета ориентации), т.е. последовательность вершин s = ν0, ν1,…, νk = t такая, что для любого i=0,…,k-1 либо (νi, νi+1) E либо (νi+1, νi) E. Если для рассматриваемого пути выполняется (νi, νi+1) E, то дуга (νi, νi+1) называется прямой дугой; если же (νi+1, νi) E, то дуга (νi+1, νi) называется обратной.
Например, на рис. 4.2 показаны, какие дуги являются прямыми, а какие обратными.
Дуги
(s, ν1), (ν3, ν4), (ν4, t) – прямые, а дуги (ν2,
ν1), и (ν3, ν2) - обратные. Пусть f – некоторый
допустимый поток. Тогда путь s
t является увеличивающим для f, если на
каждой прямой дуге e:f(e)<c(e), а на каждой
обратной дуге e:f(e)>c(e).Для такого пути
вычисляют для прямых дуг
по формуле:
,
а для обратных дуг —
:
.
Затем вычисляют
.
Очевидно,
что изменяя исходный поток f (вдоль пути
s
t) на прямых дугах на величину (+
)
и на обратных дугах на величину (-
)
получается новый допустимый поток f,
для которого
В заданной сети построен максимальный поток тогда и только тогда, когда не существует ни одного увеличивающего пути.