- •5.1. Вопросы для промежуточного и итогового контроля
- •6. Критерии оценки знаний
- •Список рекомендуемой литературы
- •Теоретическая часть
- •Тема 1. Экстремальные задачи и методы их решения.
- •Выбор метода решения - один из важнейших этапов при решении задач оптимизации. Можно выделить следующие группы методов:
- •Тема 3. Классические задачи, решаемые методом динамического программирования.
- •План решения задачи методом динамического программирования.
- •Определение. Последовательность Фибоначчи определяется следующим образом:
- •Примеры задач, решаемых при помощи динамического программирования. Наибольшая общая подпоследовательность. (ноп, Longest Common Subsequence, lcs)
- •Решение
- •Примеры задач, решаемых при помощи динамического программирования. Наибольшая возрастающая подпоследовательность. (нвп, Longest Increasing Subsequence, lis)
- •Решение
- •Оптимизация метода динамического программирования (на примере задачи нахождения числа сочетаний )
- •Тема 4. Системы и процессы.
- •Тема 5. Дискретные и непрерывные задачи.
- •Тема 6. Динамическое программирование и линейное программирование
- •Тема 7. Задачи поиска оптимальных путей на графах с неотрицательными весами ребер.
- •Тема 8. Динамическое программирование в экономических задачах.
- •Алгоритм обратной прогонки. Алгоритм прямой прогонки.
- •Алгоритм обратной прогонки
- •Алгоритм прямой прогонки
- •Тема 9. Оптимальное управление.
- •Тема 10. Особенности решения задач динамического программирования. Примеры.
- •Тема 11. Применение метода динамического программирования к задачам синтеза расписаний обслуживания.
- •Однопроцессорные задачи синтеза расписаний обслуживания конечных детерминированных потоков заявок
- •Задачи синтеза расписаний обслуживания для систем с параллельными и последовательными процессорами
- •Задачи оптимального обслуживания стационарных объектов, расположенных в одномерной зоне
- •Тема 12. Труднорешаемые задачи. Полиномиально разрешимые конкретизации, приближенные и эвристические алгоритмы
- •Полиномиально разрешимые и np-трудные задачи
- •Полиномиально разрешимые подклассы труднорешаемых задач
- •Принципы построения приближенных и эвристических алгоритмов
- •Эвристические алгоритмы для задач синтеза расписаний обслуживания
- •Глоссарий
- •Сборник заданий, задач, примеров, упражнений и т.Д.
- •Задача 7. Максимальная подпоследовательность. Дана числовая последовательность, требуется найти длину наибольшей возрастающей подпоследовательности.
Сборник заданий, задач, примеров, упражнений и т.Д.
Задача 1. Взрывоопасность. При переработке радиоактивных материалов образуются отходы двух видов — особо опасные (тип A) и неопасные (тип B). Для их хранения используются одинаковые контейнеры. После помещения отходов в контейнеры, последние укладываются вертикальной стопкой. Стопка считается взрывоопасной, если в ней подряд идет более двух контейнеров типа A. Для заданного количества контейнеров N определить число безопасных стопок.
Формат входных данных Одно число 0 < N < 31.
Формат выходных данных Одно число – количество безопасных вариантов формирования стопки.
Задача 2. К-ичные числа. Требуется вычислить количество N-значных чисел в системе счисления с основанием K, таких что их запись не содержит двух подряд идущих нулей.
Ограничения: 2 <= K <= 10, N + K <= 18.
Формат входных данных Числа N и K в десятичной записи, разделенные пробелом или переводом строки.
Формат выходных данных Искомое число в десятичной записи.
Задача 3. Локомотивы. N локомотивов, имеющих номера от 1 до N и установленных на железнодорожную колею, начинают двигаться в одну сторону, причем локомотив номер k изначально движется со скоростью k км/ч. Если локомотив, движущийся с большей скоростью, нагоняет более медленный локомотив, дальше они движутся один за другим со скоростью впереди идущего локомотива. Очевидно, через некоторое время после начала движения локомотивы разобьются на несколько групп, движущихся с разной скоростью. Написать программу, определяющую, сколько начальных расстановок s из N! Возможных дадут в результате p групп движущихся локомотивов.
Формат входных данных Два числа – 0 < N < 17 и 0 < p < N + 1.
Формат выходных данных Одно число – s.
Задача 4. Банкомат. Рассмотрим следующую задачу. В обороте находятся банкноты k различных номиналов: a1, a2, ..., ak рублей. Банкомат должен выдать сумму в N рублей при помощи минимального количества банкнот или сообщить, что запрашиваемую сумму выдать нельзя. Будем считать, что запасы банкнот каждого номинала неограничены.
Задача 5. Расстановка королей. Дана шахматная доска n×m и число k. Нужно посчитать количество способов размещения на этой доске k королей так, чтобы они не били друг друга.
Задача 6. Расстановка коней. На этот раз на шахматной доске n×n нужно подсчитать количество способов расставить k коней так, чтобы они не били друг друга.
Задача 7. Максимальная подпоследовательность. Дана числовая последовательность, требуется найти длину наибольшей возрастающей подпоследовательности.
Задача 8. В условиях двухпроцессорной задачи мастера требуется построить оптимальное расписание обслуживания заявок 1 – 6 со следующими характеристиками: а(1) = 4, τ(1) = 1; а(2) = 7, τ(2) = 2; а(3) = 8, τ(3) = 3; а(4) = 4, τ(4) = 3; а(5) = 10, τ(5) = 5; а(6) = 17, τ(6) = 4.
Задача 9. Записать рекуррентные соотношения динамического программирования для решения трехпроцессорной задачи мастера.
Задача 10. Обобщенная на случай нелинейных функций индивидуального штрафа однопроцессорная задача мастера определяется следующими исходными данными: обслуживанию подлежат заявки 1, 2, 3, 4; продолжительности обслуживания заявок: τ(1) = 4, τ(2) = 1, τ(3) = 3, τ(4) = 1; функции индивидуального штрафа: ϕ1(t) = 4t2, ϕ2(t) = 3t, ϕ3(t) = 2t2 + t, ϕ4(t) = t2 + 2t. Требуется найти оптимальное расписание обслуживания.
Задача 11. Задача однопроцессорного обслуживания множества заявок с минимаксным критерием определяется следующими исходными данными: обслуживанию подлежат заявки 1, 2, 3, 4, 5; продолжительности обслуживания заявок: τ(1) = 3, τ(2) = 2, τ(3) = 4, τ(4) = 1, τ(5) = 2; функции индивидуального штрафа: ϕ1(t) = 4t2, ϕ2(t) = 3t, ϕ3 (t) = t2 + t, ϕ4(t) = t2 +2t, ϕ5 (t) = t3 + 1. Требуется найти оптимальное расписание обслуживания.
Задача 12. Задача однопроцессорного обслуживания множества заявок при наличии директивных сроков определяется следующими исходными данными: τ(1) = 4, d(1) = 5; τ(2) = 3, d(2) = 6; τ(3) = = 5; d(3) = 9; τ(4) = 2, d(4) = 9; τ(5) = 3; d(5) = 10; τ(6) = 4; d(6) = 12; τ(7) = 4; d(7) = 13; τ(8) = 4, d(8) = 15. Найти расписание, обеспечивающее выполнение в срок максимально возможного числа заявок.
Задача 13. Записать соотношения динамического программирования для решения задачи двухпроцессорного обслуживания множества заявок при наличии директивных сроков. В этой задаче для каждой заявки i, i = 1,...,n, считаются заданными продолжительность обслуживания τ(i) и директивный срок d(i); требуется построить расписание, минимизирующее число нарушений пред-писанных заявкам директивных сроков.
Задача 14. Каноническая задача однопроцессорного обслуживания потока из шести заявок характеризуется следующими данными: t(1) = 0, τ(1) = 3, а(1) = 4; t(2) = 0, τ(2) = 4, а(2) = 7; t(3) = 1, τ(3) = = 1, а(3) = 8; t(4) = 3, τ(4) = 2, а(4) = 7; t(5) = 5, τ(5) = 3, а(5) = 3; t(6) = 5, τ(6) = 2, а(6) = 7. Методом динамического программирования (обратный счет) требуется определить оптимальное расписание обслуживания.
Задача 15. Каноническая задача однопроцессорного обслуживания потока из шести заявок характеризуется следующими данными: t(1) = 0, τ(1) = 2, а(1) = 3; t(2) = 1, τ(2) = 4, а(2) = 7; t(3) = 1, τ(3) = = 1, а(3) = 8; t(4) = 3, τ(4) = 2, а(4) = 7; t(5) = 5, τ(5) = 3, а(5) = 3; t(6) = 5, τ(6) = 2, а(6) = 7. Методом динамического программирования (прямой счет) требуется определить оптимальное рас-писание обслуживания.
Задача 16. В задаче однопроцессорного обслуживания потока заявок с линейными функциями индивидуальных штрафов и директивными сроками в совокупности расписаний, обеспечивающих соблюдение максимального числа сроков, найти последовательность обслуживания с минимальным значением суммарного штрафа по заявкам. Характеристики заявок следующие: t(1) = 0, τ(1) = 3, ϕ1(t) = t, d(1) = 5; t(2) = 2, τ(2) = 3, ϕ2(t) = 4t, d(2) = 5; t(3) = 3, τ(3) = 4, ϕ3(t) = 2t, d(3) =7; t(4) = 4, τ(4) = 3, ϕ4(t) = 3t, d(4) = 9; t(5) = 6, τ(5) = 1, ϕ5(t) = 4t, d(5) = 7.
Задача 17. Записать рекуррентные соотношения динамического программирования для задачи распределения заявок потока R = = {1, 2,..., n} между двумя идентичными параллельными процессорами. Считается, что каждый процессор обслуживает направляемые ему заявки в порядке возрастания их номеров. Каждая заявка i характеризуется тремя целочисленными параметра-ми: t(i) − момент поступления в систему обслуживания (0 = = t(1) ≤ t(2) ≤ … ≤ t(n – 1) ≤ t(n)); τ(i) − требуемая продолжительность обслуживания любым из процессоров (τ(i) > 0); a(i) − штраф за единицу времени пребывания в системе обслуживания. Минимизируемым критерием является суммарный штраф по всем заявкам.
