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

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

Динамическое программирование (иначе, «динамическое планиро­вание») представляет собой особый математический метод оптимизации решений, специально приспособленный к многошаговым (или многоэтапным) операциям.

Представим себе, что исследуемая операция Q представляет собой процесс, развивающийся во времени и распадающийся на ряд «шагов» или «этапов». Некоторые операции расчленяются на шаги естественно: например, при планировании хозяйственной деятельности группы предприятий естественным шагом является хозяйственный год. В дру­гих операциях разделение на шаги приходится вводить искусственно.

Процесс, о котором идет речь, является управляемым, т.е. на каждом шаге принимается какое-то решение, от которого зави­сит успех данного шага и операции в целом. Управление операцией складывается из ряда элементарных, «шаговых» управлений.

Рассмотрим пример естественно-многошаговой операции Q. Пусть планируется деятельность группы (системы) промышленных предприя­тий П1 П2, Пк на некоторый период времени T состоящий из m хозяйственных лет (рис. 1).

В начале периода на развитие системы предприятий выделяются какие-то основные средства K0, которые должны быть как-то распреде­лены между предприятиями. В процессе функционирования системы выделенные средства частично расходуются (амортизируются). Кроме того, каждое предприятие за год приносит некоторый доход, зависящий от вложенных средств. В начале каждого хозяйственного года имею­щиеся средства могут перераспределяться между предприятиями: каждому из них выделяется какая-то доля средств.

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

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

Рассматривается управляемый процесс — функционирование системы предприятий. Управление процессом состоит в распреде­лении (и перераспределении) средств. Шагом управления является выделение каких-то средств каждому из предприятий в начале хозяй­ственного года,

 
 

Пусть в начале 1-го года предприятиям П1 П2, Пk выделяются соответственно средства:

Совокупность этих значений представляет собой не что иное, как управление на i -м шаге:

Ui=(Xi(1), Xi(2), …,Xi(k)).

Управление может быть хорошим или плохим, эффективным или неэффективным. Эффективность управления U оценивается тем же показателем W, что и эффективность операции в целом. В нашем при­мере показатель эффективности (целевая функция) представляет собой суммарный доход от всей системы предприятий за m лет. Он зависит от управления операцией U, т. е. от всей совокупности шаговых управ­лений: Управление U операцией в целом представляет собой совокупность всех шаговых управлений:

Возникает вопрос: как выбрать шаговые управления U1, U2, …, Um для того, чтобы величина W обратилась в максимум?

Поставленная задача называется задачей оптимизации управления, а управление, при котором показатель W дости­гает максимума, — оптимальным управлением. Будем обозначать оптимальное управление (в отличие от управления вообще U) буквой u. Оптимальное управление многошаговым процессом состоит из совокупности оптимальных шаговых управлений:

Таким образом, перед нами стоит задача: определить оптимальное управление на каждом шаге ui (i=1, 2, …, m) и, значит, оптимальное управление всей операцией u.

Заметим, что в нашем примере (управление финансированием си­стемы предприятий) показатель эффективности W представляет собой сумму доходов за все отдельные годы (шаги):

где wi — доход от всей системы предприятий за i-й год.

Поставим задачу динамического программирования в общем виде. Пусть имеется операция Q с показателем эффективности (1), распадающаяся (естественно или искусственно) на m шагов. На каждом шаге применяется какое-то управление Ui. Требуется найти оптимальное управление

при котором показатель эффективности

обращается в максимум.

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

Такая идея постепенной, пошаговой оптимизации процесса и со­ставляет суть метода динамического программирования.

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

Например, пусть планируется работа группы промыш­ленных предприятий, одни из которых заняты выпуском предметов по­требления, другие же производят для этого машины. Задачей является получение за m лет максимального объема выпуска предметов потреб­ления. Пусть планируются капиталовложения на первый год. Исходя из узких интересов данного шага (года), мы должны были бы все сред­ства вложить в производство предметов потребления, пустить имею­щиеся машины на полную мощность и добиться к концу года макси­мального объема продукции. Но правильным ли будет такое решение с точки зрения операции в целом? Очевидно, нет. Имея в виду будущее, необходимо выделить какую-то долю средств и на производство машин. При этом объем продукции за первый год, естественно, снизится, зато будут созданы условия, позволяющие увеличивать ее производство в последующие годы.

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

Однако из этого правила есть исключение. Среди всех шагов су­ществует один, который может планироваться без «оглядки на будущее». Очевидно, это последний — после не­го других шагов нет. Этот шаг, единственный из всех, можно плани­ровать так, чтобы он как таковой принес наибольшую выгоду. Сплани­ровав оптимально этот последний шаг, можно к нему пристраивать предпоследний, к предпоследнему — пред-предпоследний и т. д.

Поэтому процесс динамического программирования разворачи­вается от конца к началу: раньше всех планируется послед­ний, m-й шаг. А как его спланировать, если мы не знаем, чем кончил­ся предпоследний? Очевидно, нужно сделать разные предположения о том, чем кончился пред­последний (m-1)-й ш а г, и для каждого из них найти такое управление, при котором выигрыш (доход) на последнем шаге был бы максимален. Решив эту задачу, мы найдем условное опти­мальное управление на m-м шаге, т. е. то управление, кото­рое надо применить, если (m-1)-й шаг закончился определенным образом.

Предположим, что эта процедура выполнена, и для каждого исхода (m-1)-го шага мы знаем условное оптимальное управление на m-м шаге и соответствующий ему условный оптимальный выигрыш. Теперь мы можем оптимизировать управление на предпоследнем, (m-1)-м шаге. Сделаем все возможные предположения о том, чем кончился пред-предпоследний, (m-2)-й шаг, и для каждого из этих предполо­жений найдем такое управление на (m-1)-м шаге, чтобы выигрыш за последние два шага (из которых последний уже оптимизирован) был максимален. Далее оптимизируется управление на (m-2)-м шаге, и т. д.

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

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

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

приводящее к максимально возможному выигрышу Wmax,

Таким образом, в процессе оптимизации управления методом ди­намического программирования многошаговой процесс «проходится» дважды:

первый раз — от конца к началу, в результате чего находятся условные оптимальные управления на каждом шаге и оптимальный выигрыш (тоже условный) на всех шагах, начиная с данного и до конца процесса;

второй раз — от начала к концу, в результате чего находятся (уже не условные) оптимальные шаговые управления на всех шагах операции.


Задачи нахождения кратчайшего пути на сети дорог (задача о рациональном маршруте доставки)

На данной сети дорог указаны стоимости доставки единицы груза из пункта в пункт. Найти наиболее экономный маршрут перевозки груза из пункта 1 в пункт 10.

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

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

К группе I отнесем пункт 1, к группе II — пункты, в которые можно попасть непосредственно из пункта 1 (таковыми будут 2 и 3), к группе III отнесем пункты, в которые можно попасть непосредственно из любого пункта группы II (таковыми будут 4, 5 и 6), и т. д. В результате движение транспорта с грузом из пункта 1в пункт 10 можно рассматривать как четырехшаговый процесс: на первом шаге транспорт перемещается из пункта 1 в какой-то пункт группы II, на втором шаге — из пункта группы II в пункт группы III и т. д

I II III IV V
         
         
         

1-й шаг:

  Конечный пункт Общие минимальные затраты f1(S) Конечный пункт на оптимальном маршруте j1(S)
Начальный пункт S  
       
       
       

2-й шаг:

  Конечный пункт Общие минимальные затраты f2(S) Конечный пункт на оптимальном маршруте j2(S)
Начальный пункт S      
  5+3 7+2 -    
  6+3 10+2 8+4    
  - 3+2 -    

3-й шаг:

  Конечный пункт Общие минимальные затраты f3(S) Конечный пункт на оптимальном маршруте j3(S)
Начальный пункт S      
  1+8 3+9 -    
  4+8 3+9 2+5    

4-й шаг

  Конечный пункт Общие минимальные затраты f4(S) Конечный пункт на оптимальном маршруте j4(S)
Начальный пункт S    
  2+9 3+7    

Выписываем оптимальный маршрут (начиная с последней таблицы): 1-3-6-8-10, при этом общие минимальные затраты составят 10ед.

Аналогично можно выписать оптимальные пути из любого пункта.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: