- •Часть 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.4. Решение задачи о назначениях алгоритмом Куна
Рассмотрим задачу о назначениях с матрицей производительностей P:
J(i)/R(i) |
R 1 |
R 2 |
R 3 |
R 4 |
R 5 |
J 1 |
12 |
9 |
10 |
3 |
8 |
J 2 |
6 |
6 |
2 |
2 |
9 |
J 3 |
6 |
8 |
10 |
11 |
9 |
J 4 |
6 |
3 |
4 |
1 |
1 |
J 5 |
11 |
1 |
10 |
9 |
12 |
Здесь R (i) - работы, J(i) - исполнители, i=1,2,3,4,5.
Элемент матрицы p(i,j) - означает производительность исполнителя J(i) по работе R(i).
Алгоритм Куна работает следующим образом.
Найдем максимальные элементы в матрице P и присвоим двойственным переменным y(i) и z(i) следующие значения:
y’(1)=12, y’(2)=9, y’(3)=11, y’(4)=6, y’(5)=12;
z’(1)=0, z’(2)=0, z’(3)=0, z’(4)=0, z’(5)=0.
Перейдем к простейшей задаче о назначениях с матрицей производительностей Q:
|
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
1’ |
0 |
0 |
0 |
0 |
J(2) |
0 |
0 |
0 |
0 |
1’ |
J(3) |
0 |
0 |
0 |
1’ |
0 |
J(4) |
1 |
0 |
0 |
0 |
0 |
J(5) |
0 |
0 |
0 |
0 |
1 |
Решаем простейшую задачу о назначениях с матрицей Q.
Для чего назначаем исполнителей по работам в соответствии с матрицей (пока это возможно). Получаем следующие назначения:
Исполнителя J(1) назначаем на работу R(1), исполнителя J(2) на работу R(5), исполнителя J(3) на работу R(4). Других назначений больше сделать не удается.
Первый исполнитель, не назначенный на работу J(4) может выполнять лишь работу R(1). На работу R(1) назначен исполнитель J(1). Исполнитель J(1) больше никакие работы выполнять не может.
Получили замкнутую систему множеств: множество исполнителей {J(1), J(4} и множество работ {R(1)} (ни один исполнитель из множества {J(1), J(4}не может выполнять ни одной работы, кроме работ множества {R(1)}).
Изменяем значения двойственных переменных:
y’(1)=12-1=11, y’(4)=6-1=5.
z’(1)=0+1=1.
Строим матрицу Q’ простейшей задачи о назначениях с элементами:
q’(i,j)=1, если y’(i)+z’(j)=p(i,j).
В нашем случае предыдущая матрица Q не изменится.
Повторяем схему назначений и изменения значений двойственных переменных. Получим:
y’(1)=11-1=10, y’(4)=5-1=4.
z’(1)=1+1=2.
Строим матрицу Q’ простейшей задачи о назначениях с элементами:
q’(i,j)=1, если y’(i)+z’(j)=p(i,j).
|
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
1’ |
0 |
1 |
0 |
0 |
J(2) |
0 |
0 |
0 |
0 |
1’ |
J(3) |
0 |
0 |
0 |
1’ |
0 |
J(4) |
1 |
0 |
1’ |
0 |
0 |
J(5) |
0 |
0 |
0 |
0 |
1 |
Решаем простейшую задачу о назначениях с матрицей Q’.
Для чего назначаем исполнителей по работам в соответствии с матрицей (пока это возможно). Получаем следующие назначения:
Исполнителя J(1) назначаем на работу R(1), исполнителя J(2) на работу R(5), исполнителя J(3) на работу R(4). Исполнителя J(4) на работу R(3). Других назначений больше сделать не удается.
Не назначенным оказался исполнитель J(5).
Он может выполнять лишь работу R(5). Работа R(5) назначена исполнителю J(2). Исполнитель J(2) может выполнять лишь работу R(5).
Получили замкнутую систему множеств: множество исполнителей {J(2), J(5} и множество работ {R(5)}.
Изменяем значения двойственных переменных:
y’(2)=9-1=8, y’(5)=12-1=11.
z’(5)=0+1=1.
Строим матрицу Q’ простейшей задачи о назначениях с элементами:
q’(i,j)=1, если y’(i)+z’(j)=p(i,j).
Так как предыдущая матрица Q’ не изменилась, повторяем схему назначения и изменения двойственных переменных:
y’(2)=8-1=7, y’(5)=11-1=10.
z’(5)=1+1=2.
Строим матрицу Q’ простейшей задачи о назначениях с элементами:
q’(i,j)=1, если y’(i)+z’(j)=p(i,j).
|
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
1’ |
0 |
1 |
0 |
0 |
J(2) |
0 |
0 |
0 |
0 |
1’ |
J(3) |
0 |
0 |
0 |
1’ |
0 |
J(4) |
1 |
0 |
1’ |
0 |
0 |
J(5) |
0 |
0 |
1 |
0 |
1 |
Решаем простейшую задачу о назначениях с матрицей Q’.
Для чего назначаем исполнителей по работам в соответствии с матрицей (пока это возможно). Получаем следующие назначения:
Исполнителя J(1) назначаем на работу R(1), исполнителя J(2) на работу R(5), исполнителя J(3) на работу R(4). Исполнителя J(4) на работу R(3). Других назначений больше сделать не удается.
Не назначенным оказался исполнитель J(5).
Он может выполнять работы R(5) и R(3). Работа R(5) назначена исполнителю J(2), работа R(3) исполнителю J(4). Исполнитель J(2) может выполнять лишь работу R(5) , исполнитель J(4) кроме работы R(3) может еще выполнять работу R(1). Работа R(1) назначена исполнителю J(1). Исполнитель J(1) может выполнять лишь работы R(1) и R(3). Получили систему независимых множеств: {J(1), J(2), J(4), J(5)} и {R(1), R(3), R(5)}.
Изменяем значения двойственных переменных:
y’(1)=10-1=9, y’(2)=7-1=6, y’(4)=4-1=3, y’(5)=10-1=9.
z’(1)=2+1=3, z’(3)=0+1=1, z’(5)=2+1=3.
Строим матрицу Q’ простейшей задачи о назначениях с элементами:
q’(i,j)=1, если y’(i)+z’(j)=p(i,j).
|
R(1) |
R(2) |
R(3) |
R(4) |
R(5) |
J(1) |
1’ |
1 |
1 |
0 |
0 |
J(2) |
0 |
1 |
0 |
0 |
1’ |
J(3) |
0 |
0 |
0 |
1’ |
0 |
J(4) |
1 |
1 |
1’ |
0 |
0 |
J(5) |
0 |
0 |
1 |
0 |
1 |
Решаем простейшую задачу о назначениях с матрицей Q’.
Для чего назначаем исполнителей по работам в соответствии с матрицей (пока это возможно). Получаем следующие назначения:
Исполнителя J(1) назначаем на работу R(1), исполнителя J(2) на работу R(5), исполнителя J(3) на работу R(4). Исполнителя J(4) на работу R(3). Других назначений больше сделать не удается.
Не назначенный исполнитель J(5) может выполнять работы R(3) и R(5).
Работа R(3) назначена исполнителю J(4), работа R(5) назначена исполнителю J(2).
Исполнитель J(4) может выполнять еще работы R(1) и R(2). Исполнитель J(2) никаких новых работ выполнять не может. Работа R(1) назначена исполнителю J(1), а работа R(2) оказывается свободной, т.е. существует переназначение исполнителей по работам, в котором исполнитель J(5) получит для выполнения работу. Это переназначение имеет вид:
исполнитель J(4) вместо работы R(3) назначается на работу R(2), а исполнитель J(5) назначается на работу R(3).
Получили решение исходной задачи о назначениях:
x’(1,1)=1, x’(2,5)=1, x’(3,4)=1, x’(4, 2)=1, x’(5,3)=1,
остальные переменные равны нулю. Значение оптимума задачи F(X’)=12+9+11+3+10=45.
Таким образом, получили следующую систему назначений:
исполнитель J(1) назначен на работу R(1),
исполнитель J(2) назначен на работу R(5),
исполнитель J(3) назначен на работу R(4),
исполнитель J(4) назначен на работу R(2),
исполнитель J(5) назначен на работу R(3).
Суммарная производительность от таких назначений составляет 45 единиц.
Решить задачи о назначениях алгоритмом Куна.
Задача 4.1.
J(i)/R(i) |
R 1 |
R 2 |
R 3 |
R 4 |
R 5 |
J 1 |
6 |
10 |
10 |
3 |
8 |
J 2 |
6 |
6 |
12 |
2 |
9 |
J 3 |
6 |
8 |
10 |
11 |
9 |
J 4 |
6 |
3 |
4 |
1 |
1 |
J 5 |
11 |
1 |
10 |
9 |
12 |
Задача 4.2.
J(i)/R(i) |
R 1 |
R 2 |
R 3 |
R 4 |
R 5 |
J 1 |
7 |
9 |
10 |
3 |
8 |
J 2 |
6 |
6 |
9 |
2 |
7 |
J 3 |
6 |
11 |
10 |
11 |
9 |
J 4 |
6 |
3 |
4 |
1 |
1 |
J 5 |
11 |
1 |
13 |
9 |
12 |
Задача 4.3.
J(i)/R(i) |
R 1 |
R 2 |
R 3 |
R 4 |
R 5 |
J 1 |
12 |
9 |
10 |
3 |
8 |
J 2 |
8 |
6 |
2 |
2 |
6 |
J 3 |
6 |
8 |
10 |
11 |
9 |
J 4 |
6 |
6 |
4 |
1 |
1 |
J 5 |
11 |
1 |
10 |
9 |
12 |
Задача 4.4.
J(i)/R(i) |
R 1 |
R 2 |
R 3 |
R 4 |
R 5 |
J 1 |
12 |
9 |
10 |
3 |
11 |
J 2 |
6 |
6 |
2 |
2 |
9 |
J 3 |
6 |
8 |
10 |
11 |
9 |
J 4 |
6 |
3 |
4 |
1 |
7 |
J 5 |
12 |
1 |
10 |
9 |
12 |
Задача 4.5.
J(i)/R(i) |
R 1 |
R 2 |
R 3 |
R 4 |
R 5 |
J 1 |
4 |
9 |
10 |
3 |
8 |
J 2 |
6 |
6 |
12 |
2 |
9 |
J 3 |
6 |
8 |
11 |
10 |
9 |
J 4 |
6 |
3 |
4 |
1 |
1 |
J 5 |
11 |
1 |
10 |
9 |
12 |
Задача 4.6.
J(i)/R(i) |
R 1 |
R 2 |
R 3 |
R 4 |
R 5 |
J 1 |
10 |
9 |
10 |
3 |
12 |
J 2 |
6 |
6 |
2 |
2 |
9 |
J 3 |
6 |
8 |
10 |
7 |
11 |
J 4 |
6 |
3 |
4 |
1 |
1 |
J 5 |
12 |
1 |
10 |
9 |
12 |
Задача 4.7.
J(i)/R(i) |
R 1 |
R 2 |
R 3 |
R 4 |
R 5 |
J 1 |
6 |
9 |
10 |
3 |
8 |
J 2 |
6 |
6 |
2 |
2 |
9 |
J 3 |
6 |
8 |
11 |
9 |
9 |
J 4 |
6 |
3 |
7 |
1 |
1 |
J 5 |
11 |
1 |
10 |
9 |
12 |
Задача 4.8.
J(i)/R(i) |
R 1 |
R 2 |
R 3 |
R 4 |
R 5 |
J 1 |
10 |
13 |
10 |
3 |
8 |
J 2 |
6 |
6 |
2 |
2 |
9 |
J 3 |
6 |
8 |
10 |
11 |
9 |
J 4 |
6 |
7 |
4 |
1 |
1 |
J 5 |
12 |
1 |
10 |
9 |
9 |
Задача 4.9.
J(i)/R(i) |
R 1 |
R 2 |
R 3 |
R 4 |
R 5 |
J 1 |
7 |
9 |
10 |
3 |
8 |
J 2 |
6 |
6 |
2 |
2 |
9 |
J 3 |
6 |
8 |
12 |
11 |
9 |
J 4 |
6 |
3 |
4 |
1 |
1 |
J 5 |
11 |
1 |
12 |
9 |
9 |
Задача 4.10.
J(i)/R(i) |
R 1 |
R 2 |
R 3 |
R 4 |
R 5 |
J 1 |
8 |
9 |
10 |
3 |
8 |
J 2 |
9 |
6 |
2 |
2 |
6 |
J 3 |
6 |
8 |
10 |
11 |
9 |
J 4 |
6 |
3 |
4 |
1 |
1 |
J 5 |
12 |
1 |
10 |
9 |
8 |