- •Часть 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.Задача целочисленного линейного программирования в общей постановке.
3.6. Решить задачи о назначениях с индивидуальными предпочтениями
Рассмотрим задачу о назначении 4 исполнителей по 4 работам при условиях, что исполнителями на множестве работ заданы предпочтения, т.е., каждый исполнитель упорядочивает все работы в порядке своих индивидуальных предпочтений независимо от производительностей.
Пусть матрица производительностей R (размера 5x5) имеет вид:
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
J(1) |
3 |
4 |
6 |
2 |
J(2) |
4 |
5 |
3 |
2 |
J(3) |
4 |
3 |
1 |
1 |
J(4) |
1 |
3 |
2 |
5 |
Матрица предпочтений пусть имеет вид:
R(2) |
R(2) |
R(1) |
R(1) |
R(4) |
R(1) |
R(2) |
R(4) |
R(1) |
R(3) |
R(4) |
R(3) |
R(3) |
R(4) |
R(3) |
R(2) |
J(1) |
J(2) |
J(3) |
J(4) |
Здесь первый столбец определяет предпочтения исполнителя J(1) на множестве работ, причем самой “лучшей” для него является работа R(3), следующей по предпочтению R(1), затем R(4) и “наихудшей” R(2).
Решение задачи о назначениях называется некомпроментируемым, если не существует другого решения задачи о назначениях, при котором ни одному из исполнителей не будет назначена работа “худшая” по его предпочтениям, а хотя бы одному - “лучшая”.
Требуется среди всех некомпрментируемых решений найти такое, которое дает максимальное значение критерию задачи о назначениях, т.е. максимизирует суммарную производительность от назначения.
Для решения этой задачи применим схему метода ветвей и границ.
Процедуры оценок.
В качестве нижней оценки выберем некомпроментируемое решение, построение которого мы будем производить по следующей схеме:
назначаем очередного исполнителя на “лучшую” для него ( в смысле его индивидуальных предпочтений) работу, еще не назначенную другим исполнителям.
Для нашего примера получаем
J(1) - R(3), J(2) - R(4), J(3) - R(2), J(4) - R(1).
Тогда H=12.
В качестве верхней оценки возьмем значение оптимума для канонической задачи о назначениях, полученное алгоритмом Куна.
Оптимальное решение канонической задачи определяется следующими назначениями:
J(1) - R(3), J(2) - R(2), J(3) - R(1), J(4) - R(4), отсюда V=20.
Процедура ветвления.
Из начальной вершины осуществляем ветвление по 4 направлениям, причем i -ое направление соответствует назначению исполнителя с номером i на работу, “лучшую” по его индивидуальным предпочтениям.
Направление 1. J(1) - R(3).
Направление 2. J(2) - R(4).
Направление 3. J(3) - R(3).
Направление 4. J(4) - R(2).
В направлении 1 “некомпроментируемое” решение определяется назначениями:
J(1) - R(3), J(2) - R(4), J(3) - R(2), J(4) - R(1).
Тогда H=12.
Решение канонической задачи о назначениях определяется назначениями:
J(1) - R(3), J(2) - R(2), J(3) - R(1), J(4) - R(4), отсюда V=20.
В направлении 2 “некомпроментируемое” решение определяется назначениями:
J(1) - R(3), J(2) - R(4), J(3) - R(2), J(4) - R(1).
Тогда H=12.
Решение канонической задачи о назначениях определяется назначениями:
J(1) - R(3), J(2) - R(4), J(3) - R(1), J(4) - R(2), отсюда V=18.
В направлении 3 “некомпроментируемое” решение определяется назначениями:
J(1) - R(1), J(2) - R(4), J(3) - R(3), J(4) - R(2).
Тогда H=12.
Решение канонической задачи о назначениях определяется назначениями:
J(1) - R(1), J(2) - R(2), J(3) - R(3), J(4) - R(4), отсюда V=14.
В направлении 4 “некомпроментируемое” решение определяется назначениями:
J(1) - R(3), J(2) - R(4), J(3) - R(2), J(4) - R(2).
Тогда H=12.
Решение канонической задачи о назначениях определяется назначениями:
J(1) - R(3), J(2) - R(4), J(3) - R(1), J(4) - R(2), отсюда V=15.
В направлении 1 есть 3 варианта:
Вариант 1. J(1) - R(3), J(2) - R( 4).
“Некомпроментируемое” решение : J(3) - R(2 ), J(4) - R(1), определяет H=12.
Оптимальное решение канонической задачи определяется решением:
J(3) - R(1), J(4) - R(2), отсюда V=15.
Вариант 2. J(1) - R(3), J(3) - R( 4).
“Некомпроментируемое” решение : J(2) - R(1 ), J(4) - R(2), определяет H=14.
Оптимальное решение канонической задачи определяется решением:
J(2) - R(1), J(4) - R(2), отсюда V=14.
Вариант 3. J(1) - R(3), J(4) - R( 2).
“Некомпроментируемое” решение : J(2) - R(1), J(3) - R(4), определяет H=14.
Оптимальное решение канонической задачи определяется решением:
J(2) - R(4), J(3) - R(1), отсюда V=15.
Процедура отбрасывания неперспективных направлений позволяет отбросить направление 3, так как в этом направлении V=14, а вариант 3 имеет значение нижней оценки H=14.
Продолжаем зондирование в направлении 1, вариант 1.
Случай 1. J(1) - R(3), J(2) - R(4), J(3) - R(2), J(4) - R(1).
Верхняя оценка совпадает с нижней V=H=12.
Случай 2. J(1) - R(3), J(2) - R(4), J(4) - R(2), J(3) - R(1). Верхняя оценка совпадает с нижней V=H=15.
Результаты, полученные в случае 2 ( есть решение со значением критерия 15) позволяют отбросить вариант 2 ( лучшее возможное решение имеет значение критерия 14), вариант 3 (лучшее возможное значение критерия равно 15), случай 1 (значение критерия 12) и направление 4 (лучшее возможное значение критерия 15).
Осталось провести зондирование в направлении 2.
В направлении 2 есть три варианта.
Вариант 1. J(2) - R(4), J(1) - R( 3).
“Некомпроментируемое” решение : J(3) - R(2 ), J(4) - R(1), определяет H=12.
Оптимальное решение канонической задачи определяется решением:
J(3) - R(1), J(4) - R(2), отсюда V=15.
Вариант 2. J(2) - R(4), J(3) - R( 3).
“Некомпроментируемое” решение : J(1) - R(1 ), J(4) - R(2), определяет H=9.
Оптимальное решение канонической задачи определяется решением:
J(1) - R(), J(4) - R(2), отсюда V=9.
Вариант 3. J(2) - R(4), J(4) - R( 2).
“Некомпроментируемое” решение : J(1) - R(3), J(3) - R(1), определяет H=15.
Оптимальное решение канонической задачи определяется решением:
J(1) - R(3), J(3) - R(1), отсюда V=15.
Варианты 1,2 и 3 могут быть отброшены, так как в вышеописанном случае 2 есть решение со значением критерия 15.
Таким образом, оптимальное решение исходной задачи определяется назначениями (случай 2)
J(1) - R(3), J(2) - R(4), J(4) - R(2), J(3) - R(1).
Эти назначения являются “некомпроментируемые”, так как исполнители J(1), J(2) и J(4) назначены на лучшие (в смысле их индивидуальных предпочтений) работы и среди “некомпроментируемых” дают максимальное значение суммарной производительности.
Оптимальное решение исходной задачи имеет вид:
x’(1,3)=1, x’(2,4)=1, x’(3,1)=1, x’(4,2)=1, значения остальных переменных в оптимальном решении нули. Оптимум задачи F(X’)=15.
Решить задачи о назначениях с индивидуальными предпочтениями методом ветвей и границ.
Задача 6.1.
Матрица производительностей.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
J(1) |
3 |
4 |
6 |
2 |
J(2) |
4 |
3 |
3 |
2 |
J(3) |
4 |
3 |
3 |
1 |
J(4) |
1 |
3 |
2 |
3 |
Матрица предпочтений.
R(2) |
R(2) |
R(1) |
R(1) |
R(4) |
R(1) |
R(2) |
R(4) |
R(1) |
R(3) |
R(4) |
R(3) |
R(3) |
R(4) |
R(3) |
R(2) |
J(1) |
J(2) |
J(3) |
J(4) |
Задача 6.2.
Матрица производительностей.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
J(1) |
3 |
4 |
6 |
2 |
J(2) |
2 |
7 |
3 |
2 |
J(3) |
4 |
5 |
1 |
1 |
J(4) |
1 |
3 |
4 |
5 |
Матрица предпочтений.
R(2) |
R(2) |
R(1) |
R(1) |
R(4) |
R(1) |
R(2) |
R(4) |
R(1) |
R(4) |
R(4) |
R(3) |
R(3) |
R(3) |
R(3) |
R(2) |
J(1) |
J(2) |
J(3) |
J(4) |
Задача 6.3.
Матрица производительностей.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
J(1) |
3 |
4 |
6 |
2 |
J(2) |
4 |
5 |
8 |
2 |
J(3) |
4 |
3 |
1 |
1 |
J(4) |
1 |
3 |
2 |
5 |
Матрица предпочтений.
R(2) |
R(2) |
R(1) |
R(1) |
R(3) |
R(1) |
R(2) |
R(4) |
R(1) |
R(3) |
R(4) |
R(2) |
R(4) |
R(4) |
R(3) |
R(3) |
J(1) |
J(2) |
J(3) |
J(4) |
Задача 6.4.
Матрица производительностей.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
J(1) |
6 |
4 |
6 |
2 |
J(2) |
4 |
5 |
3 |
2 |
J(3) |
4 |
3 |
5 |
1 |
J(4) |
1 |
1 |
2 |
5 |
Матрица предпочтений.
R(2) |
R(2) |
R(1) |
R(1) |
R(4) |
R(1) |
R(2) |
R(4) |
R(1) |
R(3) |
R(4) |
R(3) |
R(3) |
R(4) |
R(3) |
R(2) |
J(1) |
J(2) |
J(3) |
J(4) |
Задача 6.5.
Матрица производительностей.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
J(1) |
3 |
4 |
2 |
2 |
J(2) |
3 |
5 |
3 |
2 |
J(3) |
4 |
3 |
1 |
1 |
J(4) |
1 |
3 |
2 |
5 |
Матрица предпочтений.
R(2) |
R(4) |
R(1) |
R(1) |
R(4) |
R(1) |
R(2) |
R(4) |
R(1) |
R(3) |
R(4) |
R(3) |
R(3) |
R(2) |
R(3) |
R(2) |
J(1) |
J(2) |
J(3) |
J(4) |
.
Задача 6.6.
Матрица производительностей.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
J(1) |
5 |
4 |
6 |
2 |
J(2) |
4 |
3 |
3 |
2 |
J(3) |
4 |
3 |
6 |
1 |
J(4) |
4 |
3 |
5 |
5 |
Матрица предпочтений.
R(2) |
R(2) |
R(1) |
R(1) |
R(4) |
R(1) |
R(2) |
R(4) |
R(1) |
R(3) |
R(4) |
R(3) |
R(3) |
R(4) |
R(3) |
R(2) |
J(1) |
J(2) |
J(3) |
J(4) |
Задача 6.7.
Матрица производительностей.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
J(1) |
5 |
4 |
6 |
2 |
J(2) |
4 |
4 |
3 |
2 |
J(3) |
4 |
7 |
1 |
1 |
J(4) |
4 |
3 |
2 |
8 |
Матрица предпочтений.
R(2) |
R(2) |
R(1) |
R(2) |
R(4) |
R(1) |
R(2) |
R(4) |
R(3) |
R(3) |
R(4) |
R(3) |
R(1) |
R(4) |
R(3) |
R(1) |
J(1) |
J(2) |
J(3) |
J(4) |
Задача 6.8.
Матрица производительностей.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
J(1) |
3 |
4 |
6 |
2 |
J(2) |
4 |
3 |
3 |
2 |
J(3) |
4 |
3 |
1 |
1 |
J(4) |
1 |
3 |
2 |
5 |
Матрица предпочтений.
R(2) |
R(2) |
R(1) |
R(1) |
R(4) |
R(1) |
R(2) |
R(4) |
R(1) |
R(4) |
R(4) |
R(2) |
R(3) |
R(3) |
R(3) |
R(3) |
J(1) |
J(2) |
J(3) |
J(4) |
Задача 6.9.
Матрица производительностей.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
J(1) |
3 |
2 |
6 |
2 |
J(2) |
4 |
5 |
3 |
2 |
J(3) |
1 |
3 |
4 |
1 |
J(4) |
1 |
3 |
2 |
2 |
Матрица предпочтений.
R(2) |
R(2) |
R(1) |
R(1) |
R(4) |
R(1) |
R(2) |
R(4) |
R(1) |
R(3) |
R(4) |
R(3) |
R(3) |
R(4) |
R(3) |
R(2) |
J(1) |
J(2) |
J(3) |
J(4) |
Задача 6.10.
Матрица производительностей.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
J(1) |
7 |
8 |
6 |
2 |
J(2) |
4 |
5 |
3 |
2 |
J(3) |
4 |
3 |
6 |
1 |
J(4) |
1 |
8 |
2 |
5 |
Матрица предпочтений.
R(2) |
R(4) |
R(1) |
R(1) |
R(4) |
R(1) |
R(2) |
R(4) |
R(1) |
R(3) |
R(4) |
R(3) |
R(3) |
R(2) |
R(3) |
R(2) |
J(1) |
J(2) |
J(3) |
J(4) |