Решение задач методом динамического программирования
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
РОССИЙСКАЯ АКАДЕМИЯ НАРОДНОГО ХОЗЯЙСТВА И ГОСУДАРСТВЕННОЙ СЛУЖБЫ
ПРИ ПРЕЗИДЕНТЕ РОССИЙСКОЙ ФЕДЕРАЦИИ
НИЖЕГОРОДСКИЙ ИНСТИТУТ УПРАВЛЕНИЯ
Факультет управления, экономики и права очного обучения
Кафедра СИСТЕМНОГО АНАЛИЗА И МАТЕМАТИКИ
КУРСОВАЯ РАБОТА
по дисциплине «Разработка управленческих решений»
на тему:
«Решение задач методом динамического программирования»
Выполнила Шевелова Н.Н.,
Студентка гр. ГК-333.
Проверила: Малиновская Г.А.
Нижний Новгород, 2012г.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ……………………………………….………………
1. ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
1.1 Задача динамического программирования………………………….……5
1.2 Общая структура динамического программирования .………….………9
2. РЕШЕНИЕ ЗАДАЧ МЕТОДОМ
2.1 Общая постановка задачи динамического
программирования……………………………………
2.2 Решение задачи динамического программирования……………………15
ПРАКТИЧЕСКАЯ ЧАСТЬ………………………………
Задача оптимального распределении инвестиций…………………………..21
ЗАКЛЮЧЕНИЕ……………………………………………………
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ…………………….……….29
ВВЕДЕНИЕ.
В настоящее время выделяется
большое вниманием вопросам организации
и управления, это приводит к необходимости
анализа сложных
В процессе развития, а также
по мере изменения экономических
условий все предприятия
Целью курсовой работы является
выявление наилучшего способа действия
при решении той или иной задачи.
Главная роль при этом отводится
математическому моделированию. Для
построения математической модели необходимо
иметь строгое представление
о цели функционирования исследуемой
системы и располагать
В моделях исследования операций переменные, от которых зависят ограничения и целевая функция, могут быть дискретными (чаще всего целочисленными) и континуальными (непрерывными). В свою очередь, ограничения и целевая функция делятся на линейные и нелинейные. Существуют различные методы решения данных моделей, наиболее известными и эффективными из них являются методы линейного программирования, когда целевая функция и все ограничения линейные. Для решения математических моделей других типов предназначены методы динамического программирования, целочисленного программирования, нелинейного программирования, многокритериальной оптимизации и методы сетевых моделей.
Практически все методы исследования операций порождают вычислительные алгоритмы, которые являются итерационными по своей природе. Это подразумевает, что задача решается последовательно (итерационно), когда на каждом шаге (итерации) получаем решение, постепенно сходящиеся к оптимальному решению.
Для написания курсовой работы будут взяты данные из разных источников: учебные пособия по исследованию операций, учебники по математическим методам и моделям в управлении, математическим методам оптимизации и экономической теории, динамическому программированию.
1. ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ.
1.1 Задача динамического
Большинство методов исследования операций связано в первую очередь с задачами вполне определенного содержания. Классический аппарат математики оказался малопригодным для решения многих задач оптимизации, включающих большое число переменных и/или ограничений в виде неравенств. Несомненна привлекательность идеи разбиения задачи большой размерности на подзадачи меньшей размерности, включающие всего по нескольких переменных, и последующего решения общей задачи по частям. Именно на этой идее основан метод динамического программирования.
В основе
динамического программирования лежит
принцип оптимальности Р.
Беллманом были сформулированы и условия, при которых принцип верен. Основное требование – процесс управления должен быть без обратной связи, т.е. управление на данном шаге не должно оказывать влияние на предшествующие шаги. Решение на каждом шаге оказывается наилучшим с точки зрения управления в целом.
Метод динамического программирования можно использовать для решения весьма широкого круга задач, включая задачи распределения ресурсов, замены и управления запасами, задачи о загрузке. Характерным для динамического программирования является подход к решению задачи по этапам, с каждым из которых ассоциирована одна управляемая переменная. Набор рекуррентных вычислительных процедур, связывающих различные этапы, обеспечивает получение допустимого оптимального решения задачи в целом при достижении последнего этапа.
Происхождение названия динамическое программирование, вероятно, связано с использованием методов ДП в задачах принятия решений через фиксированные промежутки времени (например, в задачах управления запасами). Однако методы ДП успешно применяются также для решения задач, в которых фактор времени не учитывается. По этой причине более удачным представляется термин многоэтапное программирование, отражающий пошаговый характер процесса решения задачи.
Фундаментальным принципом, положенным в основу теории ДП, является принцип оптимальности. По существу, он определяет порядок поэтапного решения допускающей декомпозицию задачи (это более приемлемый путь, чем непосредственное решение задачи в исходной постановке) с помощью рекуррентных вычислительных процедур.
Динамическое программирование позволяет осуществлять оптимальное планирование управляемых процессов. Под «управляемыми» понимаются процессы, на ход которых мы можем в той или другой степени влиять.
Динамическое программирование – это поэтапное планирование многошагового процесса, при котором на каждом этапе оптимизируется только один шаг. Управление на каждом шаге должно выбираться с учетом всех его последствий в будущем.
При постановке
задач динамического
- Выбрать параметры (фазовые координаты), характеризующие состояние S управляемой системы перед каждым шагом.
- Расчленить операцию на этапы (шаги).
- Выяснить набор шаговых управлений xi для каждого шага и налагаемые на них ограничения.
- Определить какой выигрыш приносит на i-ом шаге управление xi, если перед этим система была в состоянии S, т.е. записать «функцию выигрыша»:
.(1)
- Определить, как изменяется состояние системы S под влиянием управления xi на i-ом шаге: оно переходит в новое состояние
. (1.1)
- Записать основное рекуррентное уравнение динамического программирования, выражающее условный оптимальный выигрыш Wi(S) (начиная с i-го шага и до конца) через уже известную функцию Wi+1(S):
. (1.2)
Этому выигрышу соответствует условное оптимальное управление на i-м шаге xi(S) (причем в уже известную функцию Wi+1(S) надо вместо S подставить измененное состояние )
- Произвести условную оптимизацию последнего (m-го) шага, задаваясь гаммой состояний S, из которых можно за один шаг дойти до конечного состояния, вычисляя для каждого из них условный оптимальный выигрыш по формуле (1.3)
Произвести условную оптимизацию (m-1)-го, (m-2)-го и т.д. шагов по формуле (1.2), полагая в ней i=(m-1),(m-2),…, и для каждого из шагов указать условное оптимальное управление xi(S), при котором максимум достигается.
Заметим, что если состояние системы в начальный момент известно, то на первом шаге варьировать состояние системы не нужно - прямо находим оптимальный выигрыш для данного начального состояния S0. Это и есть оптимальный выигрыш за всю операцию
(1.4)
Произвести
безусловную оптимизацию
Данные
этапы рассматривались для
(1.5)
(если только выигрыши wi положительны).
Эти задачи решаются точно так же, как задачи с аддитивным критерием, с той единственной разницей, что в основном уравнении (1.2) вместо знака «плюс» ставится знак «умножения»: .(1.6)
1.2 Общая структура динамического программирования.
Отыскание оптимальной стратегии принятия набора последовательных решений, в большинстве случаях, производится следующим образом: сначала осуществляется выбор последнего во времени решения, затем при движении в направлении, обратном течению времени, выбираются все остальные решения вплоть до исходного.
Для реализации такого метода необходимо выяснить все ситуации, в которых может происходить выбор последнего решения. Обычно условия, в которых принимается решение, называют «состоянием» системы. Состояние системы – это описание системы, позволяющее, учитывая будущие решения, предсказать ее поведение. Нет необходимости выяснять, как возникло то или иное состояние или каковы были предшествующие решения. Это позволяет последовательно выбирать всего по одному решению в каждый момент времени. Независимо от того, отыскивают оптимальные решения с помощью табличного метода и последующего поиска или аналитическим путем, обычно быстрее и выгоднее производить выбор по одному решению в один момент времени, переходя затем к следующему моменту и т.д. К сожалению, таким методом можно исследовать не все процессы принятия решений. Необходимым условием применения метода динамического программирования является аддитивность цен всех решений, а также независимость будущих результатов от предыстории того или иного состояния.
Если
число решений очень велико, то
можно построить относительные
оценки состояний так, чтобы оценки,
отвечающие каждой паре последовательных
решений, отличались друг от друга на
постоянную величину, представляющую
собой средний «доход» на решение.
Также можно выполнять
2. Решение задач методом динамического программирования.
2.1 Общая постановка задачи
Метод оказывается весьма эффективным при анализе задач с аддитивной целевой функцией к которым относятся, в частности, задачи линейного и квадратичного программирования
Необходимость
принять решение возникает
Предположим,
что интересующий нас процесс
можно разбить на N шагов, а действия,
совершаемые на i-ом шаге, характеризуются
совокупностью показателей
. Состояние
процесса к началу этого шага имеет характеристику
в виде набора параметров
. Обычно
предпринимаемые действия не являются
полностью произвольными, а зависят от
состояния
, которое
возникло перед i-ым шагом, т.е.
. Очевидно,
результирующее значение критерия Z, получаемое
в конце процесса, будет определяться
теми
, которые
были приняты, т.е.
. Возникает
вопрос: Как выбрать
, чтобы
величина Z приняла экстремальное значение?
Ответ можно получить, рассматривая Z как
функцию переменных
и находя
экстремум z одним из известных способов,
однако этот путь не всегда прост (особенно
при большом числе переменных).
Появляется идея провести оптимизацию
поэтапно, анализируя последовательно
каждый шаг процесса в поисках наилучших
вариантов его продолжения.
Эта идея лежит в основе метода динамического
программирования, реализующего принцип
последовательной оптимизации. Следовательно,
важным условием применимости рассматриваемого
метода является возможность разбиения
процесса принятия решений на ряд однотипных
шагов или этапов, каждый из которых планируется
отдельно, но с учетом результатов, полученных
на других шагах.
Динамическое
программирование основывается на двух
важных принципах-оптимальности и вложения.
Принцип оптимальности формулируется
следующим образом:
Каково бы ни было состояние системы в
результате какого-то числа шагов, мы должны
выбирать управление на ближайшем шаге
так, чтобы оно, в совокупности с оптимальным
управлением на всех последующих шагах,
приводило к максимальному выигрышу на
всех оставшихся шагах, включая данный.
Принцип вложения утверждает, что природа задачи, допускающей использование метода динамического программирования, не меняется при изменении количества шагов, т. е. форма такой задачи инвариантна относительно N. В этом смысле всякий конкретный процесс с заданным N оказывается как бы вложенным в семейство подобных ему процессов и может рассматриваться с более широких позиций.
Реализация названных принципов дает гарантию того, что, во-первых, решение, принимаемое на очередном шаге, окажется наилучшим с точки зрения всего процесса (а не "узких интересов" отдельного этапа) и, во-вторых, последовательность решений одношаговой, двухшаговой и т. п. задач приведет к решению исходной N-шаговой задачи.
Замечание.
В общем случае необходимо учитывать
некоторые условия, накладываемые на начальное
и конечное состояния системы:
Здесь
-область начальных состояний,
-область конечных состояний. Если состояние
системы характеризуется двумя фазовыми
переменными
и
то процесс управления представляет
собой перемещения точки из
в
Рассмотрим несколько примеров многошаговых
операций и для каждого из них поясним,
что понимается под "управлением"
и каков "выигрыш" (показатель эффективности)
Z.
Пример 1.
Владелец автомашины эксплуатирует ее в течение m лет. В начале каждого года он может принять одно из трех решений:
Продать машину и заменить ее новой;
Ремонтировать ее и продолжать эксплуатацию;
Продолжать эксплуатацию без ремонта.
Шаговое управление-выбор одного из этих
трех решений.
Непосредственно числами они не выражаются,
но можно приписать первому численное
значение 1, второму 2, третьему 3. Какие
нужно принять решения по годам (т. е. как
чередовать управления 1, 2,3), чтобы суммарные
расходы па эксплуатацию, ремонт и приобретение
новых машин были минимальны?
Показатель эффективности (в данном случае
это не "выигрыш", а "проигрыш",
но это неважно) равен
где
- расходы в i-м году.
Величину Z требуется обратить в минимум.
Управление операцией в целом представляет
собой какую-то комбинацию чисел 1, 2, 3,
например:
Это означает, что первые два года следует
эксплуатировать машину без ремонта, последующие
три года ее ремонтировать, в начале шестого
года продать, купить новую, затем снова
эксплуатировать без ремонта и т. д.
Управление представляет собой вектор:
где каждое из чисел
имеет одно из трех значений: 1,
2 или 3 .
Нужно выбрать совокупность чисел так,
чтобы величина Z ,была минимальна.
Пример 2.
Метод динамического
программирования позволяет
с успехом решать экономические задачи. Рассмотрим
одну из простейших таких задач:
В нашем распоряжении имеется какой-то
запас средств (ресурсов) К, который должен
быть распределен между m предприятиями
Каждое из предприятий
при вложении в него каких-то средств
х приносит доход, зависящий от х, т. е.
представляющий собой какую-то функцию
Все функции
известны. Спрашивается, как нужно распределить
средства К между предприятиями, чтобы
в сумме они дали максимальный доход?
Эта задача легко решается методом динамического программирования. Хотя в своей постановке она не содержит упоминания о времени, можно все же операцию распределения средств мысленно развернуть в какой-то последовательности, считая за первый шаг вложение средств в предприятие , за второй-в и т. д. Управляемая система S в данном случае-средства или ресурсы, которые распределяются. Состояние системы S перед каждым шагом характеризуется одним числом Q - наличным запасом еще не вложенных средств. В этой задаче "шаговыми управлениями" являются средства , выделяемые предприятиям. Требуется найти оптимальное управление, т. е. такую совокупность чисел , при которой суммарный доход максимален.
2.2 Решение задачи динамического программирования.
Процедура построения оптимального управления
методом динамического программирования
распадается на две стадии: предварительную
и окончательную.
На предварительной стадии для каждого
шага определяется условное оптимальное
управление, зависящее от состояния -Q
системы (достигнутого в результате предыдущих
шагов), и условный оптимальный выигрыш
на всех оставшихся шагах, начиная с данного,
также зависящий от состояния Q.
На окончательной
стадии для каждого шага определяется
окончательное (безусловное) оптимальное
управление.
Предварительная (условная) оптимизация проводится
по шагам, в обратном порядке: от последнего
шага к первому;
Окончательная (безусловная) оптимизация-также
по шагам, но в естественном порядке: от
первого шага к последнему.
Введем
следующие обозначения:
-условный оптимальный выигрыш, получаемый
на всех последующих шагах, начиная с i-го
и до конца;
он достигается при оптимальном управлении
на всех этих шагах и равен максимальному
выигрышу, который можно получить на всех
этих шагах вместе, если перед их началом
система находится в состоянии
.
-условное
оптимальное управление на i-ом шаге, которое,
совместно с оптимальным управлением
на всех последующих шагах, обращает выигрыш
на всех шагах, начиная с данного, в максимум.
Поставим задачу - построить алгоритм
определения функций условного оптимального
выигрыша
и условного оптимального управления
для всех шагов
Рассмотрим i-ыи шаг процесса управления.
Пусть в результате i-1 предыдущих шагов
система пришла в состояние
, и мы выбираем какое-то управление
на i-ом шаге. Если мы его применим, то,
во-первых, получим на данном i-ом шаге
какой-то выигрыш
Он зависит от состояния системы Q так
и от управления :
(1)
Кроме того, мы получим какой-то выигрыш
на всех оставшихся шагах. На основании
принципа оптимальности, будем считать,
что он максимален. Чтобы найти этот выигрыш,
мы должны знать состояние системы перед
следующим, (i+1)-м шагом. Под влиянием управления
на i-ом шаге система из состояния Q (в котором
она была перед этим шагом) перейдет в
какое-то новое состояние
Это новое
состояние будет зависеть, опять-таки,
от прежнего состояния Q и примененного
управления
(2)
Запишем выигрыш, который мы получим на
всех шагах, начиная с i-го, если на i-ом
шаге будет применено любое (возможно,
не оптимальное) управление
а на
всех последующих (i+1)-го до N-го оптимальное
управление.
Этот выигрыш будет равен выигрышу zi на
данном i-ом шаге, плюс условный оптимальный
выигрыш на всех последующих шагах, начиная
с (i+1)-го, определяемый для нового состояния
системы
;
(3)
обозначим такой "полуоптимальный"
выигрыш через
тогда учитывая (2) и (3),
(4)
Теперь, в соответствии с принципом оптимальности,
мы должны выбрать такое управление
при котором
величина (4) максимальна и достигает значения:
(5)
То управление
при котором этот максимум в (5) достигается,
и есть условное оптимальное управление
на i-ом шаге, а сама величина (5)-условный
оптимальный выигрыш (на всех шагах, начиная с i-го и до конца).
В уравнении (5) функции
и
известны. Неизвестными остаются функции:
и
; из них первая выражается через вторую.
Формула (5) представляет собой так называемое
основное функциональное уравнение динамического
программирования илиуравнение Беллмана. Оно
позволяет определить функцию Zi(Q) , если
известна следующая за ней по порядку
Что касается функции
(условный
оптимальный выигрыш на последнем шаге),
то она может быть определена очень просто.
Действительно, за последним шагом нет
следующего, и нужно обратить в максимум
выигрыш на этом шаге:
(6)
Максимум в формуле (6) берется не по всем
возможным управлениям XN на N-ом шаге, а
только по тем, которые приводят в систему
в заданную область
т.е. по
тем, для которых
Это всегда нужно иметь в виду при использовании
формулы (6). То управление
при котором достигается максимум выигрыша,
и есть условное оптимальное управление
на последнем шаге.
Теперь
построим всю цепочку условных оптимальных
управлений. Зная
можно
по общей формуле (5), полагая в ней i+1=n ,
найти функцию
и соответствующее
оптимальное управление
; затем
и
и так
далее , вплоть до последнего шага от конца
т.е. первого шага, для которого будут найдены
функции Z1(Q) и X1(Q) . Функция Z1(Q) есть условный
оптимальный выигрыш за всю операцию,
т.е. на всех шагах начина с первого и до
последнего (если первый шаг начинается
с определенного состояния Q1).
Таким образом предварительная оптимизация
закончена-найдены условный оптимальный
выигрыш и условное оптимальное управление
для каждого шага.
Рассмотрим вторую стадию оптимизации-нахождение безусловного или окончательного оптимального управления
Начнем с первого шага.
Предположим,
что исходное состояние Q1 нам полностью
известно. Подставим это состояние
Q1 в формулу для условного
(7)
Одновременно найдем оптимальное управление
на первом шаге
Далее, зная исходное состояние Q1 и управление
X1 , можем найти состояние
системы
после первого шага:
Зная это состояние
можно
найти оптимальное управление на втором
шаге
затем
и т. д. Таким образом, идя по цепочке
(8)
мы определили одно за другим, все шаговые
оптимальные управления операций в целом
а также конечное состояние системы
Это условие будет выполняться, т.к. мы
выбираем управление на последнем шаге
так, чтобы
Рассмотрим
теперь случай, когда исходное состояние
системы ограничено условием
. В этом случае нужно найти такое начальное
состояние
при котором условный минимальный выигрыш
за все шаги максимален.
(9)
То начальное состояние
для которого
этот максимум достигается и нужно взять
в качестве исходного. Далее оптимальное
управление строится в соответствии с
выражением (8), заменяя Q1 на
(8a)
При изложении материала мы использовали
систему символических формул, которая
непригодна для непосредственного вычисления.
Однако с их помощью можно организовать
процедуру динамического программирования
в следующей последовательности:
Выбрать
способ описания процесса, т.е. параметры
характеризующие состояние
Записать выигрыш на i-ом шаге в зависимости от состояния системы Q перед этим шагом и управления Xi
Записать
для i-го шага функцию, выражающую изменение
состояния системы от Q к Q` под
действием управления Q`
Записать
основное функциональное уравнение
(5)
Найти условный оптимальный выигрыш последнего N-го шага при этом должно выполняться условие Одновременно определить условное оптимальное управление Xn(Q) на последнем шаге.
Зная Zn(Q) по уравнению (5) для конкретного вида функций Zi(Q,Xi) и найти последовательно Wn-1(Q),Wn-2(Q),:,W1(Q) и соответствующие им условные оптимальные уравнения
Если
начальное состояние системы Q1 задано,
найти оптимальный выигрыш Zmax=Z1(Q1)
и безусловные оптимальные
Если начальное состояние Q1 задано условием то для определения Zmax нужно использовать выражение (9). Определение безусловных оптимальных управлений провести по схеме (8а).
Отметим преимущества и недостатки метода динамического программирования. К числу положительных качеств можно отнести:
МДП дает возможность решать задачи, которые раньше не исследовались из-за отсутствия соответствующего математического аппарата.
МДП в ряде случаев сокращает объем при поиске оптимальных решений.
К недостаткам относятся:
Отсутствие универсального алгоритма, который был бы пригоден для решения всех задач (мы имеем только схему).
Трудности при решении задач большой размерности.
ПРАКТИЧЕСКАЯ ЧАСТЬ.
Задача о распределении
Для реконструкции и модернизации производства с целью увеличения выпуска продукции производственному объединению из четырех предприятий выделяется банковский кредит в сумме 250 млн. руб. с дискретностью 50 млн.руб. Прирост выпуска продукции зависит от выделенной суммы, его значения представлены в таблице.
Инвестиции, млн.руб. |
Прирост выпуска продукции, млн.руб. | |||
Предприятие 1 |
Предприятие 2 |
Предприятие 3 |
Предприятие 4 | |
50 |
15 |
12 |
17 |
13 |
100 |
32 |
30 |
33 |
31 |
150 |
39 |
38 |
40 |
37 |
200 |
46 |
45 |
47 |
44 |
250 |
52 |
54 |
60 |
63 |