Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
73
Добавлен:
12.02.2015
Размер:
550.4 Кб
Скачать

Динамическое программирование

(Беллман, 1960г)

Метод динамического программирования применим к оптимизации многошаговых процессов, в которых решение принимается в последовательные моменты времени.

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

Рассматриваем дискретное динамическое программирование. Время будет меняться по тактам (шагам) и решения принимается на каждом таком такте. Такты будем нумеровать целыми числами от 1 до n.

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

.

В задачах динамического программирования фигурируют следующие объекты

1. Множества шагов на каждом из которых, кромеn.-го, принимается решение.

2. Множества состояний системы .

3. Множество вариантов принятия решений (управлений) .

4. Две функции:

функция локального эффекта на i-ом шаге ;

функция перехода в новое состояние ,

где - состояние системы,- управление наi-ом шаге.

Прежде чем сформулировать задачу оптимизации промоделируем процесс функционирования этой системы.

Пусть на начальном такте (i=1) система находилась в состоянии S1. Выберем последовательность управлений и проследим, как при этом по тактам изменяется состояние системы и как формируется результирующий эффект.

Поскольку в начале процесса эффект равен нулю, то после первого такта текущий эффект окажется таким

.

Состояние системы на втором такте окажется равным .

После второго такта текущий эффект окажется равным

.

Состояние системы на третьем такте .

Вообще, после k тактов будет достигнут эффект

,

а состояние на (k+1)-ом такте окажется равным

.

В конце процесса общий эффект достигнет следующей величины

.

Из сказанного ясно, что результат целиком и полностью определяется начальным состоянием системы S1 и последовательностью управлений , то есть

. (*)

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

То значение эффекта, которое будет при этом достигнуто, будем обозначать через .

Итак, - это оптимальное значение эффекта, которое может быть достигнуто из начального состоянияS1.

В силу конечности множества всех последовательностей принципиально эту задачу возможно решить методом перебора. Однако с увеличением числа тактовn и числа возможных управлений m трудоемкость этой процедуры нарастает весьма быстро. Действительно, мощность указанного множества равна. Например, если число возможных управлений равно 3 (как у витязя на распутье), а число тактов равно 10, то это число равно 39 = 19 683, но уже при четырех вариантах управления это число будет больше 16 миллионов.

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

В методе динамического программирования ключевым объектом является функция - функция имеющая тот же смысл, что и введенная выше функция, то есть это оптимальное значение эффекта, которое может быть достигнуто кn-такту (к концу процесса), но при движении не из первого такта, а из i-го такта. Эта функция в отличие от функции зависит от двух аргументов – начального состояния и номера такта.

Функция удовлетворяет следующему знаменитому уравнению Беллмана, которое называется Принципом оптимальности.

.,(**)

где

.

Тот, кто играет в шахматы, легко согласится с этой формулой. На некотором ходу в позиции противник может предложить вам жертву и , если вы ее примете (выберете управлениеui), то получите значительный локальный эффект в виде взятой фигуры. Однако при этом вы попадаете в такую позицию , что достичь хорошего результата дальнейшей игры (большого значения) вы не сможете и, следовательно, будет плох и результат. Если же вы не такой жадный, то выберете другое управлениеuj , для которого не так велик, но позиция не так плоха и общий результат будет лучше.

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

Соседние файлы в папке Лекции