- •Часть 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.5. Решение минимаксных (максиминных) задач о назначениях
Рассмотрим задачу о назначениях с матрицей производительностей
R= r(i,j) (5x5), элемент которой r(i,j) - время выполнения работы с номером i исполнителем с номером :
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
3 |
4 |
5 |
4 |
3 |
J(2) |
1 |
7 |
4 |
6 |
2 |
J(3) |
5 |
3 |
5 |
4 |
3 |
J(4) |
4 |
3 |
1 |
2 |
7 |
J(5) |
4 |
1 |
5 |
4 |
4 |
Через X= x(i,j) - обозначим (5x5) матрицу, элементы которой x(i,j) {0,1}, причем, если x(i,j) = 1, то работа с номером i будет закреплена за исполнителем с номером j, если x(i,j) =0 , то работа с номером i не будет закреплена за исполнителем с номером j.
Требуется так назначить исполнителей по работам, чтобы выполнялись условия канонической задачи о назначениях (каждый исполнитель назначается точно на одну работу, а каждая работа получает точно одного исполнителя) и минимальная из производительностей (от найденного назначения) была бы максимальна.
Для решения задачи применим алгоритм, основанный на последовательном решении ряда простейших задач о назначениях.
Обозначим через m=min r(i,j), где минимум берется по всем i, i=1,2,3,4,5, j=1,2,3,4,5. Тогда m=1.
Через M= min{min(max r(i,j)), min(max r(i,j))}, где max берется в первом члене по i, i=1,2,3,4,5, а во втором члене по j=1,2,3,4,5. Соответственно, max берется (в скобках) сначала по j, j=1,2,3,4,5, а затем по i, i=1,2,3,4,5.
M=min{ min(5,7,5,7,5), min(5,7,5,6,7)}=5.
Пусть m’ [1, 5] .
Для осуществления двоичного поиска, положим m’=3.
Рассмотрим простейшую задачу о назначениях с матрицей R’, элемент которой r(i,j) = 0, если r(i,j) 3 ; r(i,j) = 1 , если r(i,j) > 3.
Получим простейшую задачу о назначениях с матрицей Q:
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
0 |
1 |
1 |
1 |
0 |
J(2) |
0 |
1 |
1 |
1 |
0 |
J(3) |
1 |
0 |
1 |
0 |
0 |
J(4) |
1 |
0 |
0 |
0 |
1 |
J(5) |
1 |
0 |
1 |
1 |
1 |
Эта задача имеет решение (решать ее можно, например, используя алгоритм Форда-Фалкерсона поиска максимального потока в транспортной сети).
x’(1,2)=1, x’(2,4)=1, x’(3,3)=1, x’(4,1)=1, x’(5,5)=1.
Отсюда, исходная задача допускает решение со значением оптимума не меньше чем m’=4.
Попытаемся получить лучшее решение. Для этого выберем в качестве m’=4 и построим новую матрицу простейшей задачи о назначениях Q’:
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
0 |
0 |
1 |
0 |
0 |
J(2) |
0 |
1 |
0 |
1 |
0 |
J(3) |
1 |
0 |
1 |
0 |
0 |
J(4) |
0 |
0 |
0 |
0 |
1 |
J(5) |
0 |
0 |
1 |
0 |
0 |
Эта задача не имеет решения (например, из-за того, что исполнители J(1) и J(3) могу выполнять (по матрице Q’) лишь одну работу R(3).
Таким образом, оптимальное назначение определяется случаем, когда m’=3 и задается следующими значениями матрицы неизвестных:
x’(1,2)=1, x’(2,4)=1, x’(3,3)=1, x’(4,1)=1, x’(5,5)=1, остальные переменные равны нулю.
Решить минимаксные и максиминные задачи о назначениях.
Задача 5.1.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
6 |
4 |
5 |
4 |
3 |
J(2) |
1 |
7 |
4 |
6 |
2 |
J(3) |
5 |
3 |
5 |
8 |
3 |
J(4) |
4 |
3 |
1 |
2 |
7 |
J(5) |
4 |
1 |
5 |
4 |
7 |
Задача 5.2.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
4 |
4 |
5 |
4 |
3 |
J(2) |
1 |
7 |
3 |
6 |
2 |
J(3) |
5 |
3 |
5 |
4 |
3 |
J(4) |
4 |
5 |
1 |
2 |
7 |
J(5) |
4 |
1 |
5 |
4 |
7 |
Задача 5.3.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
6 |
4 |
5 |
4 |
3 |
J(2) |
1 |
4 |
4 |
6 |
2 |
J(3) |
5 |
8 |
5 |
4 |
3 |
J(4) |
4 |
7 |
4 |
2 |
7 |
J(5) |
4 |
1 |
5 |
3 |
4 |
Задача 5.4.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
3 |
4 |
5 |
4 |
6 |
J(2) |
1 |
7 |
4 |
3 |
2 |
J(3) |
4 |
3 |
3 |
4 |
3 |
J(4) |
4 |
7 |
1 |
2 |
7 |
J(5) |
6 |
1 |
5 |
4 |
4 |
Задача 5.5.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
5 |
4 |
5 |
4 |
3 |
J(2) |
3 |
7 |
4 |
6 |
2 |
J(3) |
5 |
3 |
7 |
4 |
3 |
J(4) |
4 |
3 |
1 |
4 |
7 |
J(5) |
6 |
1 |
5 |
4 |
3 |
Задача 5.6.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
8 |
4 |
5 |
4 |
3 |
J(2) |
4 |
7 |
4 |
6 |
2 |
J(3) |
5 |
5 |
8 |
5 |
3 |
J(4) |
4 |
3 |
1 |
2 |
5 |
J(5) |
4 |
1 |
5 |
4 |
4 |
Задача 5.7.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
5 |
4 |
5 |
4 |
3 |
J(2) |
1 |
8 |
4 |
6 |
2 |
J(3) |
5 |
4 |
5 |
7 |
3 |
J(4) |
4 |
4 |
1 |
2 |
3 |
J(5) |
4 |
1 |
5 |
4 |
4 |
Задача 5.8.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
3 |
9 |
5 |
4 |
3 |
J(2) |
1 |
7 |
4 |
6 |
2 |
J(3) |
5 |
3 |
4 |
7 |
3 |
J(4) |
4 |
3 |
1 |
2 |
7 |
J(5) |
4 |
6 |
5 |
4 |
4 |
Задача 5.9.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
6 |
7 |
5 |
4 |
3 |
J(2) |
1 |
7 |
4 |
6 |
2 |
J(3) |
5 |
6 |
5 |
4 |
3 |
J(4) |
4 |
7 |
1 |
2 |
7 |
J(5) |
4 |
4 |
5 |
4 |
4 |
Задача 5.10.
J(i)/R(i) |
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
2 |
4 |
5 |
4 |
3 |
J(2) |
5 |
7 |
4 |
6 |
2 |
J(3) |
5 |
4 |
3 |
4 |
3 |
J(4) |
4 |
3 |
1 |
5 |
3 |
J(5) |
4 |
1 |
5 |
4 |
4 |