
- •Часть 2
- •Содержание
- •1. Рабочая программа курса "математические основы информатики"
- •Часть 2.
- •Предисловие
- •Практические занятия
- •Литература (основная)
- •Литература (дополнительная)
- •2. Краткий конспект лекций
- •2.1.Задачи целочисленного булева программирования
- •2.2. Каноническая и многомерная задачи о ранце и их интерпретации
- •2.3. Задача коммивояжера и ее интерпретации
- •2.4. Задачи о назначениях и их интерпретации
- •2.5. Задача целочисленного линейного программирования в общей постановке
- •2.6. Метод ветвей и границ
- •2.7. Общая схема метода ветвей и границ Джеффриона-Марстена
- •2.8. Решение канонической задачи о ранце методом ветвей и границ
- •2.9. Решение многомерной задачи о ранце методом ветвей и границ
- •2.10. Решение задачи коммивояжера методом ветвей и границ
- •2.11. Решение задачи целочисленного линейного программирования методом ветвей и границ
- •2.12. Решение задачи о ранце с использованием табличной схемы
- •2.13. Решение задачи о ранце с использованием рекуррентных соотношений динамического программирования
- •2.14. Решение задачи коммивояжера с использованием рекуррентных соотношений динамического программирования
- •2.15. Задачи теории расписаний
- •2.16. Задачи теории расписаний с одним обслуживающим прибором
- •2.17. Перестановочный прием в задачах теории расписаний
- •2.18. Теорема Лившица-Кладова
- •2.19. Задачи теории расписаний в общей постановке
- •2.20. Задача Джонсона. Графики Ганта
- •2.21.Постановка задачи теории расписаний как задачи частично-целочисленного линейного программирования
- •2.22. Сетевые модели. Расчет временных характеристик сетевых моделей
- •2.23. Потоки в сетях. Теорема Форда-Фалкерсона о максимальном потоке
- •2.24. Алгоритм Форда-Фалкерсона нахождения максимального потока в транспортной сети
- •2.25. Решение задачи о назначениях алгоритмом Куна
- •2.26. Минимаксные задачи о назначениях
- •2.27. Задачи о назначениях с индивидуальными предпочтениями
- •3. Задачник с решением типовых задач
- •3.1. Решение задачи о ранце
- •3.1.1. Решение задачи о ранце методом ветвей и границ
- •3.1.2. Решение задачи о ранце методом динамического программирования (табличная форма)
- •3.1.3. Решение задачи о ранце методом динамического программирования (рекуррентная схема)
- •3.1.4. Решить следующие задачи о ранце :
- •3.2. Решение задачи коммивояжера
- •3.2.1. Решение задачи коммивояжера методом ветвей и границ
- •3.2.2. Решение задачи коммивояжера с использованием рекуррентных соотношений динамического программирования
- •3.2.3. Решить задачи коммивояжера:
- •3.3. Решить задачу Джонсона для двух станков, построить график Ганта для оптимального расписания
- •3.4. Решение задачи о назначениях алгоритмом Куна
- •3.5. Решение минимаксных (максиминных) задач о назначениях
- •3.6. Решить задачи о назначениях с индивидуальными предпочтениями
- •3.7. Нахождение максимального потока в транспортной сети алгоритмом Форда-Фалкерсона
- •3.8. Расчет временных характеристик сетевых моделей
- •Рассчитать временные характеристики сетевой модели
- •4. Контрольные задания
- •5. Вопросы к экзамену
- •3.Задачи целочисленного булева программирования.
- •6.Задача коммивояжера и ее интерпретации.
- •8.Задача целочисленного линейного программирования в общей постановке.
2.24. Алгоритм Форда-Фалкерсона нахождения максимального потока в транспортной сети
Назовем дугу (i.j) - насыщенной, если x(i,j) = p(i,j);
если x(i,j) < p(i,j), то дуга (i,j) называется не насыщенной.
Пусть S(u) - множество вершин, в каждую из которых можно попасть по ненасыщенным ребрам из вершины истока. Очевидно, что сам исток, т.е. вершина u принадлежит множеству S(u).
Здесь возможны два варианта:
- вершина s (сток) принадлежит множеству S (u), тогда существует последовательность ненасыщенных дуг из вершины u в вершину s и величину потока можно увеличить;
- вершина s не принадлежит множеству S(u), тогда пара множеств S(u) и V\S(u) образуют сечение, величина потока через которое равно пропускной способности этого сечения, тогда по теореме Форда-Фалкерсона найденный поток будет максимальным.
На основе этого может быть сформулирован алгоритм, который называется алгоритмом Форда-Фалкерсона.
Шаг 1. Построить начальный поток (например, x(i,j)=0, i,j V ).
Шаг 2. Построить множество S(u) - вершин, достижимых по ненасыщенным ребрам из истока.
Шаг 3. Проверить, s S(u) ?
- если да, то перейти на шаг 4,
- если нет, то максимальный поток построен, т.е. задача решена.
Шаг 4. Найти путь из истока в сток по ненасыщенным ребрам и максимально возможно увеличить величину потока. Уменьшить пропускные способности дуг, составляющих найденный путь на ту величину, на которую увеличена величина потока. Перейти на шаг 2.
Конечность алгоритма следует из того, что на каждом шаге 4 из рассмотрения исключается, по крайней мере, одна дуга.
Замечание.
С помощью алгоритма Форда-Фалкерсона можно решать простейшую задачу о назначениях, т.е. задачу о назначениях, в которой матрица производительностей является булевой: если r(i,j) = 1, то исполнитель с номером i может выполнять работу с номером j, если r(i,j) = 0, то исполнитель с номером i не может исполнять работу с номером j.
Для решения простейшей задачи о назначениях алгоритмом Форда-Фалкерсона достаточно построить специальную транспортную сеть и найти в ней максимальный поток. Соответствующая транспортная сеть будет четырёхуровневой. Первый уровень состоит из истока, вершины второго уровня соответствуют исполнителям, третьего уровня - работам, а четвертый уровень включает в себя лишь одну вершину - сток. Исток соединен с вершинами, соответствующими исполнителям с пропускными способностями дуг (1,0), вершины, соответствующие исполнителям соединены с вершинами, соответствующими работам, если исполнитель может выполнять эту работу, Пропускные способности этих дуг (1,0). Вершины, соответствующие работам, соединены со стоком дугами с пропускными способностями (1,0).
Максимальный поток, найденный для построенной сети и определит оптимальное решение простейшей задачи о назначениях.
2.25. Решение задачи о назначениях алгоритмом Куна
Рассмотрим формальную постановку задачи о назначениях:
x(i,j) =1, j=1,2,...,n. (1)
x(i,j) =1, i=1,2,...m. (2)
x(i,j) 0, i=1,2,...m, j=1,2,...,n. (3)
x(i,j) 1, i=1,2,...m, j=1,2,...,n. (4)
F(X) = r(i,j) x(i,j) max. (5)
Двойственная к ней задача имеет вид:
y(i) + z(j) r(i,j), i=1,2,...,n, j=1,2,...,n. (6)
Q(y,z) = y(i) + z(j) min. (7)
Здесь m=n.
Не уменьшая общности, будем считать, что коэффициенты r(i,j) целые.
Пусть y’ и z’ - допустимое решение задачи (6),(7), т.е. y’(i) + z’(j) r(i,j), i=1,2,...,n, j=1,2,...,n. Допустимое решение может быть построено, например, так:
y’(i) = max r(i,j), где максимум берется по всем j=1,2,...,n, z’(j) = 0, j=1,2,...,n.
Начало процедуры решения задачи.
Обозначим через P множество тех пар (i,j), для которых y’(i) + z’(j) = r(i,j).
Рассмотрим простейшую задачу о назначениях с матрицей D, элементы которой d(i,j) = 1, если (i,j) P и d(i,j) =0 в противном случае.
Вариант 1.
Простейшая задача о назначениях с матрицей D имеет решение, т.е. каждый исполнитель назначен на свою работу и каждая работа получает своего исполнителя. Пусть X’ - оптимальное решения простейшей задачи о назначениях, тогда X’ - будет оптимальным решением и исходной задачи (1) -(5). Действительно, x’(i,j) = 1, если (i,j) P, т.е. y’(i) + z’(i,j) = r(i,j), отсюда
r(i,j) x’(i,j) = y’(i) + z’(j), т.е. по теореме о равенстве линейных форм прямой и двойственной задач , X’ - оптимальное решение исходной задачи.
Вариант 2.
Простейшая задача о назначениях с матрицей D не имеет решения. Тогда найдется множество исполнителей K, которые могут выполнять согласно матрице D работы из множества Q, причем мощности множеств равны, соответственно, k и q и при этом k>q. Рассмотрим новые двойственные переменные:
y’’(i) = y’(i) - 1 , если i K и y’’(i) = y’(i) в противном случае;
z’’(j) = z’(j) +1 , если j Q и z’’(j) = z’(j) в противном случае.
Тогда нетрудно показать, что новые значения двойственных переменных удовлетворяют условиям задач (6), (7) и при этом уменьшают значения критерия двойственной задачи.
Переходим на начало процедуры решения задачи и так до тех пор, пока на очередном шаге не получим решение простейшей задачи о назначениях, которое и определит оптимальное решение исходной задачи.
Конечность алгоритма Куна следует из того, что по теореме о соотношениях линейных форм прямой и двойственной задач,
r(i,j) x’(i,j) y’(i) + z’(j).