Примеры задач динамического программирования

Задача о найме работников.Рассмотрим вопросы применения методов динамического программирования в конкретных экономико-математических моделях.

Отдельно отметим, что данные вычислительные схемы, вообще говоря, достаточно часто используются для решения конкретных задач: задача о ранце, задача о кратчайшем пути, задачи транспортного типа.

Одним из важнейших классов задач, для которых применение динамического программирования оказывается плодотворным, являются задачи последовательного принятия решений. Их особенностью является то, что искомые переменные Примеры задач динамического программирования - student2.ru должны определяться в строгой временной последовательности и не должны меняться местами. В качестве примера опишем так называемую задачу о найме работников (задачу об использовании рабочей силы).

В данной задаче рассматривается некоторый экономический объект (фирма, магазин, завод и т. п.), функционирующий в течение конечного числа периодов, обозначаемых номерами k Примеры задач динамического программирования - student2.ru . Каждый период k характеризуется нормативной потребностью в определенном количестве однотипных работников Примеры задач динамического программирования - student2.ru . Тот же объем работ может быть выполнен другим количеством сотрудников Примеры задач динамического программирования - student2.ru , что, однако, влечет дополнительные затраты либо за счет нерационального использования рабочей силы, либо ввиду повышения оплаты за интенсивный труд. Размеры этих дополнительных издержек описываются функциями Примеры задач динамического программирования - student2.ru ,где Примеры задач динамического программирования - student2.ru - отклонение фактической численности работающих Примеры задач динамического программирования - student2.ru от планово необходимой Примеры задач динамического программирования - student2.ru , причем Примеры задач динамического программирования - student2.ru .Управленческое решение на шаге k заключается в выборе величины изменения числа сотрудников Примеры задач динамического программирования - student2.ru , что однозначно определяет количество работающих в течение следующего периода: Примеры задач динамического программирования - student2.ru . Затраты по изменению количества работников (найму и увольнению) при переходе от периода k кпериоду Примеры задач динамического программирования - student2.ru задаются функцией Примеры задач динамического программирования - student2.ru , где также Примеры задач динамического программирования - student2.ru Тогда суммарные издержки, вызванные принятым на шаге k решением, характеризуются значением функции

Примеры задач динамического программирования - student2.ru , Примеры задач динамического программирования - student2.ru

План задачи (стратегия управления) Примеры задач динамического программирования - student2.ru заключается в выборе поэтапных изменений количества работников, а его суммарная эффективность описывается аддитивной функцией

Примеры задач динамического программирования - student2.ru 15)

На основе сформулированной модели ставится задача минимизации целевой функции (издержек) (15). Причём постановка задачи не будет корректной, если не задать начальное условие на количество работников. Существуют две модификации данной задачи, определяемые типом начального условия: в первом случае задается исходное значение на первом этапе Примеры задач динамического программирования - student2.ru , а во втором - требуемое количество в n-м периоде Примеры задач динамического программирования - student2.ru .

Рассмотрим первый случай. Поскольку фиксированным является начальное количество работников и, напротив, ничего не известно о том, каким это количество должно быть на последнем этапе, то рассмотрение процесса принятия решений удобнее начать с конца. Оптимальное управление на последнем этапе п по условию равно Примеры задач динамического программирования - student2.ru ,поэтому минимальные издержки полностью определяются количеством работников в последнем периоде:

Примеры задач динамического программирования - student2.ru (16)

Для остальных предшествующих шагов основное рекуррентное соотношение примет вид

Примеры задач динамического программирования - student2.ru (17)

где Примеры задач динамического программирования - student2.ru - минимальные затраты с k-го по n-й периоды, в предположении, что количество работников в k-й период равно Примеры задач динамического программирования - student2.ru . Точки Примеры задач динамического программирования - student2.ru , в которых достигаются минимумы (17), определяют условное оптимальное управление на каждом шаге.

Последовательно определяя Примеры задач динамического программирования - student2.ru и дойдя до этапа 1, мы сможем найти безусловное оптимальное управление Примеры задач динамического программирования - student2.ru из того условия, что на начало первого периода численность работников должна составлять Примеры задач динамического программирования - student2.ru , аименно

Примеры задач динамического программирования - student2.ru

Остальные компоненты оптимального плана Примеры задач динамического программирования - student2.ru и состояния Примеры задач динамического программирования - student2.ru , образующие оптимальную траекторию, последовательно находятся по рекуррентным формулам

Примеры задач динамического программирования - student2.ru , Примеры задач динамического программирования - student2.ru , Примеры задач динамического программирования - student2.ru

после чего не составляет труда вычислить оптимальное значение целевой функции (15).

Остановимся теперь на втором случае, когда задано финальное состояние управляемого объекта, т. е. желаемое количество работников на последнем периоде Примеры задач динамического программирования - student2.ru . Очевидно, что в данной ситуации следует поступить с точностью «до наоборот» и рассмотреть процесс принятия решений от начала к концу. Наилучшее условное управление на первом шаге Примеры задач динамического программирования - student2.ru будет найдено в процессе вычисления функции

Примеры задач динамического программирования - student2.ru (18)

где состояние Примеры задач динамического программирования - student2.ru является возможным количеством работников на начальном шаге. Соответственно, основное рекуррентное соотношение выразит минимальные издержки вплоть до k-гопериода через таковые для предыдущих периодов (с первого по Примеры задач динамического программирования - student2.ru -й) при условии, что численность работников в k-й период будет равна Примеры задач динамического программирования - student2.ru :

Примеры задач динамического программирования - student2.ru (19)

Одновременно будут найдены функции Примеры задач динамического программирования - student2.ru , Примеры задач динамического программирования - student2.ru ,определяющие условные оптимальные управления. На последнем периоде, в силу начального условия, Примеры задач динамического программирования - student2.ru . Отсюда путем последовательного решения рекуррентных уравнений могут быть найдены оптимальные численности работников Примеры задач динамического программирования - student2.ru и безусловные оптимальные управления:

Примеры задач динамического программирования - student2.ru , Примеры задач динамического программирования - student2.ru , Примеры задач динамического программирования - student2.ru

В заключение, как и в первом случае, подсчитывается минимальная величина издержек.

Обобщая изложенные схемы решения, приходим к выводу:

При использовании алгоритмов динамического программирования, если задано начальное состояние управляемой системы, то задача решается в обратном направлении,а если конечное, то - в прямом.Наконец, если заданы как начальное, так и конечное состояния, то задача существенно усложняется. (В качестве компромисса в этом случае можно отказаться от оптимизации на первом или последнем этапе.)

Продемонстрируем процесс решения задачи о найме работников на конкретном примере:

Для функционирования некоторого предприятия в течение четырех месяцев (нумеруемых от 1 до 4) по нормам требуются следующие количества работников одинаковой квалификации:

Примеры задач динамического программирования - student2.ru

причем перед началом первого месяца (в нулевом месяце) фактически имеется Примеры задач динамического программирования - student2.ru сотрудников. Администрация планирует в конце каждого месяца k (кроме последнего) корректировать число работающих на величину Примеры задач динамического программирования - student2.ru Примеры задач динамического программирования - student2.ru На прием одного сотрудника необходимо затратить 9 у. е., а на увольнение - 6 у. е. Предполагается, что расходы на содержание избыточного работника составляют 8 у. е., а в случае нехватки персонала приходится нести затраты в размере 12 у. е. за каждое вакантное место.

Требуется найти оптимальные значения приращений численности работающих в конце каждого из первых трех месяцев, при которых суммарные издержки за весь рассматриваемый период будут минимальными.

В начале решения запишем в аналитической форме функции издержек на прием-увольнение сотрудников (и), а также на содержание ненормативного штата (g). С этой целью введем функции

Примеры задач динамического программирования - student2.ru (20)

Примеры задач динамического программирования - student2.ru (21)

Оценки эффективности управления на каждом шаге имеют вид:

Примеры задач динамического программирования - student2.ru ; Примеры задач динамического программирования - student2.ru , Примеры задач динамического программирования - student2.ru

Поскольку в поставленной задаче задано начальное условие Примеры задач динамического программирования - student2.ru , ее решение начинается с конца, и, следовательно, будут применяться рекуррентные соотношения (17). С технической точки зрения будет удобно на каждом шаге составлять две таблицы значений: функции издержек, получаемых начиная с текущего шага в зависимости от текущего состояния и управления,

Примеры задач динамического программирования - student2.ru Примеры задач динамического программирования - student2.ru (22)

и функции минимальных издержек в зависимости от текущего состояния

Примеры задач динамического программирования - student2.ru (23)

Для сокращения объема табулируемых значений можно воспользоваться свойством выпуклости функции Примеры задач динамического программирования - student2.ru , вытекающим из выпуклости f и g. Из выпуклости функции Примеры задач динамического программирования - student2.ru следует, что заполнять таблицу ее значений необходимо лишь до тех пор, пока они уменьшаются, т. е. можно остановиться, как только очередное значение оказывается больше предыдущего.

Итерация 1. Полагаем Примеры задач динамического программирования - student2.ru . На данном этапе функция состояния Примеры задач динамического программирования - student2.ru может быть найдена непосредственно, если учесть, что Примеры задач динамического программирования - student2.ru и Примеры задач динамического программирования - student2.ru :

Примеры задач динамического программирования - student2.ru

Таблица значений данной функции и условные оптимальные управления имеют вид

Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru

Итерация 2. Полагаем Примеры задач динамического программирования - student2.ru . Предварительно заполним таблицу значений функции Примеры задач динамического программирования - student2.ru для достаточно большого множества аргументов согласно формуле:

Примеры задач динамического программирования - student2.ru

Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru -1
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru -2 -1 -3 -2 -1 -4 -3 -2
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru

Выбирая минимальные по Примеры задач динамического программирования - student2.ru значения Примеры задач динамического программирования - student2.ru , составим таблицу Примеры задач динамического программирования - student2.ru и соответствующие значения условных оптимальных управлений Примеры задач динамического программирования - student2.ru :

Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru -1 -2 -3

Итерация 3. Полагаем Примеры задач динамического программирования - student2.ru . Так же, как на предыдущей итерации, заполним таблицу значений функции Примеры задач динамического программирования - student2.ru согласно формуле:

Примеры задач динамического программирования - student2.ru

Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru -1
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru -1 -1 -1
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru

Выбирая минимальные по Примеры задач динамического программирования - student2.ru значения Примеры задач динамического программирования - student2.ru , составим таблицу Примеры задач динамического программирования - student2.ru и соответствующие значения условных оптимальных управлений Примеры задач динамического программирования - student2.ru :

Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru

Итерация 4. Полагаем Примеры задач динамического программирования - student2.ru . Аналогично предыдущему, заполним таблицу значений функции Примеры задач динамического программирования - student2.ru согласно формуле:

Примеры задач динамического программирования - student2.ru

Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru -1
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru

Выбирая минимальные по Примеры задач динамического программирования - student2.ru , значения Примеры задач динамического программирования - student2.ru , составим таблицу Примеры задач динамического программирования - student2.ru и соответствующие значения условных оптимальных управлений Примеры задач динамического программирования - student2.ru :

Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru
Примеры задач динамического программирования - student2.ru

Итерация 5. На последней итерации, в связи с наличием начального условия Примеры задач динамического программирования - student2.ru , достаточно вычислить

Примеры задач динамического программирования - student2.ru

и найти Примеры задач динамического программирования - student2.ru как точку минимума Примеры задач динамического программирования - student2.ru . Простые вычисления показывают, что минимум

Примеры задач динамического программирования - student2.ru

достигается при Примеры задач динамического программирования - student2.ru . Следовательно, Примеры задач динамического программирования - student2.ru ,после чего обратным ходом последовательно вычисляются оптимальные управления и оптимальные состояния (оптимальная траектория):

Примеры задач динамического программирования - student2.ru Примеры задач динамического программирования - student2.ru ;

Примеры задач динамического программирования - student2.ru Примеры задач динамического программирования - student2.ru ;

Примеры задач динамического программирования - student2.ru Примеры задач динамического программирования - student2.ru ;

Примеры задач динамического программирования - student2.ru .

Таким образом, результаты расчета свидетельствуют, что при заданной системе расценок в третьем месяце выгоднее не брать 5-го работника, а компенсировать его отсутствие дополнительными выплатами за сверхурочную работу имеющимся сотрудникам.

Динамические задачи управления запасами.Одной из наиболее известных сфер приложения методов динамического программирования является такая область математической экономики, как теория управления запасами. Ее предметом является разработка и исследование математических моделей систем, занимающих промежуточное положение между источниками (производителями) тех или иных ресурсов и их потребителями. При математической формализации процессов управления запасами очень часто приходится использовать скачкообразные, недифференцируемые и кусочно-непрерывные функции. Как правило, это обусловливается необходимостью учета эффектов концентрации, фиксированных затрат и платы за заказ. В связи с этим получаемые задачи с трудом поддаются аналитическому решению классическими методами, однако могут быть успешно решены с помощью аппарата динамического программирования. Рассмотрим достаточно типичную задачу, возникающую в процессе планирования деятельности системы снабжения, - так называемую динамическую задачу управления запасами.

Пусть имеется некоторая система снабжения (склад, оптовая база и т. п.), планирующая свою работу на п периодов. Ее деятельность сводится к обеспечению спроса конечных потребителей на некоторый продукт, для чего она осуществляет заказы производителю данного продукта. Спрос клиентов (конечных потребителей) в данной модели рассматривается как некоторая интегрированная величина, принимающая заданные значения для каждого из периодов, и он должен всегда удовлетворяться (т. е. не допускаются задолженности и отказы). Также предполагается, что заказ, посылаемый производителю, удовлетворяется им полностью, и временем между заказом и его выполнением можно пренебречь (т. е. рассматривается система с мгновенным выполнением заказа). Введем обозначения:

Примеры задач динамического программирования - student2.ru - остаток запаса после Примеры задач динамического программирования - student2.ru -го периода;

Примеры задач динамического программирования - student2.ru - заранее известный суммарный спрос в k-м периоде;

Примеры задач динамического программирования - student2.ru - заказ (поставка от производителя) в k-мпериоде;

Примеры задач динамического программирования - student2.ru ) - затраты на выполнение заказа объема Примеры задач динамического программирования - student2.ru в k-мпериоде;

Примеры задач динамического программирования - student2.ru - затраты на хранение запаса объема Примеры задач динамического программирования - student2.ru в k-мпериоде.

После получения поставки и удовлетворения спроса объем товара, подлежащего хранению в период k, составит Примеры задач динамического программирования - student2.ru . Учитывая смысл параметра Примеры задач динамического программирования - student2.ru , можно записать соотношение:

Примеры задач динамического программирования - student2.ru . (24)

Расходы на получение и хранение товара в период k описываются функцией

Примеры задач динамического программирования - student2.ru .

Планом задачи можно считать вектор Примеры задач динамического программирования - student2.ru компонентами которого являются последовательные заказы в течение рассматриваемого промежутка времени. Соотношение между запасами (24) в сочетании с некоторым начальным условием связывает состояния системы с выбранным планом и позволяет выразить суммарные расходы за все п периодов функционирования управляемой системы снабжения в форме аддитивной целевой функции:

Примеры задач динамического программирования - student2.ru . 25)

Естественной в рамках сформулированной модели представляется задача нахождения последовательности оптимальных управлений (заказов) Примеры задач динамического программирования - student2.ru и связанных с ними оптимальных состояний (запасов) Примеры задач динамического программирования - student2.ru , которые обращают в минимум (25). В качестве начального условия используем требование о сохранении после завершения управления заданного количества товара уп+1 , именно

Примеры задач динамического программирования - student2.ru . (26)

При решении поставленной задачи методом динамического программирования в качестве функции состояния управляемой системы Примеры задач динамического программирования - student2.ru логично взять минимальный объем затрат, возникающих за первые k периодов при условии, что в k-йпериод имеется запас Примеры задач динамического программирования - student2.ru . Тогда можно записать основное рекуррентное соотношение

Примеры задач динамического программирования - student2.ru ,(27)

так как Примеры задач динамического программирования - student2.ru и

Примеры задач динамического программирования - student2.ru . (28)

Система рекуррентных соотношений (27)-(28) позволяет найти последовательность функций состояния Примеры задач динамического программирования - student2.ru , Примеры задач динамического программирования - student2.ru ,…, Примеры задач динамического программирования - student2.ru и условных оптимальных управлений Примеры задач динамического программирования - student2.ru , Примеры задач динамического программирования - student2.ru ,…, Примеры задач динамического программирования - student2.ru . На n-м шаге с помощью начального условия (26) можно определить Примеры задач динамического программирования - student2.ru . Остальные значения оптимальных управлений Примеры задач динамического программирования - student2.ru определяются по формуле:

Примеры задач динамического программирования - student2.ru . (29)

Особый интерес представляет частный случай задачи (24)- (25), при котором предполагается, что функции затрат на пополнение запаса Примеры задач динамического программирования - student2.ru являются вогнутыми по Примеры задач динамического программирования - student2.ru , a функции затрат на хранение Примеры задач динамического программирования - student2.ru являются линейными относительно объема хранимого запаса, т. е. Примеры задач динамического программирования - student2.ru . Параллельно заметим, что обе предпосылки являются достаточно реалистичными. Обозначим функцию затрат в течение k-гопериода через

Примеры задач динамического программирования - student2.ru (30)

или, что то же самое,

Примеры задач динамического программирования - student2.ru . (31)

В силу сделанных предположений все функции затрат Примеры задач динамического программирования - student2.ru являются вогнутыми (как суммы вогнутой и линейной функций). Данное свойство значительно упрощает процесс решения, так как для поиска минимума вогнутых функций Примеры задач динамического программирования - student2.ru достаточно рассмотреть только две крайние точки множества, на котором отыскивается минимум. С учетом введенного обозначения задачу (24)-(25) можно записать в виде:

Примеры задач динамического программирования - student2.ru (32)

при условиях

Примеры задач динамического программирования - student2.ru . (33)

Рассмотрим процедуру решения (32)-(33). Так как ищется минимум суммы вогнутых функций Примеры задач динамического программирования - student2.ru , то решение будет достигаться на одной из крайних точек множества, определяемого условиями (33). Общее число переменных Примеры задач динамического программирования - student2.ru и Примеры задач динамического программирования - student2.ru в системе (33) равно Примеры задач динамического программирования - student2.ru . Однако, учитывая то, что в ней только п уравнений, в оптимальном плане будет не более п ненулевых компонент, причем для каждого периода k значения Примеры задач динамического программирования - student2.ru и Примеры задач динамического программирования - student2.ru не могут равняться нулю одновременно (в силу необходимости удовлетворения спроса либо за счет заказа, либо за счет запаса). Формально это утверждение можно представить в виде условия дополняющей нежесткости:

Примеры задач динамического программирования - student2.ru ,(34)

где

Примеры задач динамического программирования - student2.ru (35)

С точки зрения содержательной интерпретации условия (34)-(35) означают, что при оптимальном управлении заказ поставщику на новую партию не должен поступать, если в начале периода имеется ненулевой запас, или размер заказа должен равняться величине спроса за целое число периодов. Отсюда следует, что запас на конец последнего периода должен равняться нулю: Примеры задач динамического программирования - student2.ru Последнее позволяет решать задачу в прямом направлении, применяя рекуррентное соотношение

Примеры задач динамического программирования - student2.ru , (36)

где Примеры задач динамического программирования - student2.ru .

Учитывая (34)-(35) и вогнутость Примеры задач динамического программирования - student2.ru заключаем, что минимум (36) достигается в одной из крайних точек Примеры задач динамического программирования - student2.ru или Примеры задач динамического программирования - student2.ru , поэтому

Примеры задач динамического программирования - student2.ru , (37)

тогда для предыдущего периода функция состояния может быть выражена в виде

Примеры задач динамического программирования - student2.ru (38)

Следовательно, в общем виде получаем модифицированную форму для рекуррентного соотношения

Примеры задач динамического программирования - student2.ru . (39)

При дальнейших конкретизирующих предположениях о виде функций Примеры задач динамического программирования - student2.ru можно получить еще более компактные формы для рекуррентных соотношений.

Наши рекомендации