- •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, для которого
В заданной сети построен максимальный поток тогда и только тогда, когда не существует ни одного увеличивающего пути.