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

ЗФ_ИОиСА / Занятие 3

.doc
Скачиваний:
25
Добавлен:
27.03.2015
Размер:
479.74 Кб
Скачать

Занятие 3

Динамическое программирование. Метод динамического программирования. (ДП)

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

Имеем некоторую операцию Q, распадающуюся на ряд последовательных “шагов” или “этапов”, - например, деятельность отрасли промышленности в течении ряда лет; преодоление группой самолетов нескольких полос противовоздушной обороны; последовательность тестов, применяемых при контроле аппаратуры. Некоторые операции делятся на шаги естественно, в некоторых деление приходится вводить искусственно (процесс наведения ракеты на цель можно условно разбить на этапы времени t).

Итак, рассмотрим операцию Q, состоящую из m шагов (этапов). Пусть эффективность операции характеризуется каким-то показателем W, который назовём “выигрышем”. Предположим, что выигрыш W за всю операцию складывается из выигрышей на отдельных шагах:

(3.1)

где выигрыш на i-ом шаге.

Если W обладает таким свойством, то его называют “аддитивным критерием”.

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

Будем называть это решение шаговым управлением. Совокупность всех шаговых управлений представляет собой управление операцией в целом. Обозначим его за x, а шаговые управления – x1,x2,…,xm.

x=(x1,x2…,xm) (3.2)

В общем случае, xi – не числа, могут быть векторы, функции и т.д.

Требуется найти такое управление x, при котором выигрыш W обращается в максимум.

(3.3)

То управление x*, при котором этот максимум достигается, называется оптимальным управлением. Оно состоит из совокупности оптимальных шаговых управлений:

x*=) (3.4)

Тот максимальный выигрыш, который достигается при этом управлении, обозначим W*:

W*=max{W(x)} или (3.5)

x

W*=max{W(x)}

xЄX

Рассмотрим несколько примеров:

1.Планируется деятельность группы предприятий П1, П2,…, Пк на период m лет. В начале периода на развитие выделены средства М, которые должны быть распределены между предприятиями. В процессе работы предприятия, вложенные в него средства, частично расходуются, а частично сохраняются и снова могут быть перераспределены. Каждое предприятие за год приносит доход, зависящий от того, сколько средств в него вложено. В начале каждого года имеющиеся в наличии средства перераспределяются между предприятиями. Какое количество средств в начале каждого года надо выделять каждому предприятию, чтобы суммарный доход за m лет был максимальным?

Выигрыш W(суммарный доход) представляет собой сумму доходов на отдельных шагах (годах):

,

и значит обладает свойством аддитивности. Управление хi на i-ом шаге состоит в том, что в начале i-го года предприятиям выделяют какие-то средства xi1, xi2,…,xik (первый индекс номер шага, второй номер предприятия). Таким образом, шаговое управление есть вектор с k составляющими:

xi=(xi1, xi2,…, xik) (3.6)

Величины зависят от количества вложенных в предприятие средств.

Управление х всей операцией состоит из совокупности всех шаговых управлений:

x=(x1, x2,…,xm) , (3.7)

требуется найти такое распределение средств по предприятиям и годам (оптимальное управление х*), при котором величина W обращается в максимум. В этом примере шаговые управления были векторами; в дальнейших примерах они будут просто числами.

2. Космическая ракета состоит из m ступеней, а процесс её вывода на орбиту из m этапов, в конце каждого из которых очередная ступень сбрасывается. На все ступени (без учёта “полезного” веса кабины) выделен какой-то общий вес:

g=g1+g2+…+gm,

где gi – вес i-ой ступени.

В результате i-того этапа (сгорания и сбрасывания i-ой ступени) ракета получает приращение скорости i , зависящее от веса данной ступени и суммарного веса всех оставшихся плюс вес кабины. Как нужно распределить вес g между ступенями, чтобы скорость ракеты V при её выводе на орбиту была максимальна?

В данном случае показатель эффективности (выигрыш) будет

V=, (3.8)

Где - выигрыш (приращение скорости) на i-ом шаге.

Управление х представляет собой совокупность весов всех ступеней gi :

x=(g1, g2, …, gm)

Оптимальным управлением x* будет то распределение весов по ступеням, при котором скорость V максимальна. В этом примере шаговое управление – число, вес данной ступени.

3. Владелец автомашины эксплуатирует её в течении m лет. В начале каждого года он может принять одно из 3-х решений:

1) продать машину и заменить её новой;

2) ремонтировать её и продолжать эксплуатацию;

3) продолжать эксплуатацию без ремонта.

Шаговое управление – выбор одного из 3-х решений. Непосредственно числами они не выражаются, но можно первому решению присвоить значение 1, второму – 2, третьему – 3. Какие нужно принять решения по годам (т.е. как чередовать управления 1,2,3), чтобы суммарные расходы на эксплуатацию, ремонт и приобретение новых машин были минимальны?

Показатель эффективности (в данном случае это “проигрыш”) равен:

,

где - расходы в i-ом году.

Величину W требуется обратить в минимум. Управление операцией в целом представляет собой какую-то комбинацию чисел 1,2,3, например:

х=(3,3,2,2,2,1,3,…),

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

x=(j1, j2,…, jm) , (3.9)

где каждое из чисел ji имеет одно из 3-х значений: 1,2,3. Нужно выбрать совокупность чисел (3.9), чтобы величина W, была минимальна.

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

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

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

Значит, планируя многошаговую операцию, надо выбирать управление на каждом шаге с учётом всех его будущих последствий на ещё предстоящих шагах. Управление на i-ом шаге выбирается не так, чтобы выигрыш именно на данном шаге был максимален, а так,чтобы была максимальна сумма выигрышей на всех оставшихся до конца шагах плюс данный.

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

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

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

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

Теперь зная, в каком состоянии S0 находится управляемая система (объект управления S) в начале первого шага, мы можем выбрать оптимальное управление на первом шаге. Применив его, мы изменим состояние системы на новые ; в этом состоянии мы подошли ко второму шагу. Тогда нам тоже известно оптимальное управление , которое к концу второго шага переводит систему в состояние , и т.д. Что касается оптимального выигрыша W* за всю операцию, то он нам уже известен: ведь именно на основе его максимальности мы выбирали управление на первом шаге. Т.о., в процессе оптимизации управления методом ДП процесс “проходится” дважды: первый раз от конца к началу, в результате чего находятся условные оптимальные управления и условные оптимальные выигрыши за оставшийся “хвост” процесса; второй раз – от начала к концу, когда нам остаётся только “прочитать” уже готовые рекомендации и найти безусловное оптимальное управление х* , состоящее из оптимальных шаговых управлений , ,…, .

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

Задача о наборе высоты и скорости ЛА.

Пусть самолёт (или другой ЛА), находящийся на высоте H0 и имеющий скорость V0 должен быть поднят на заданную высоту Hk, а скорость его доведена до заданного значения Vk (буква k-означает конец процесса). Известен расход горючего, необходимый для подъёма ЛА с любой высоты Н на любую другую >Н при неизменной скорости V; известен также расход горючего, необходимый для увеличения скорости от любого значения V до >V при неизменной высоте Н. Требуется найти оптимальный режим набора высоты и скорости, при котором расход горючего будет минимальным.

Решение будем строить следующим образом. Для простоты, допустим, что весь процесс набора высоты и скорости разделён на ряд последовательных шагов и за каждый шаг самолёт увеличивает только высоту или только скорость. Будем изображать состояние самолёта точкой S на плоскости VOH (рис. 3.1), где абсцисса - скорость самолёта, а ордината – его высота. Очевидно, существует множество возможных управлений – множество траекторий, по которым можно перевести точку S из S0 в Sk.

Из всех этих траекторий нужно выбрать ту, на которой расход горючего будет минимальным. Будем решать задачу методом ДП.

Н

Нk Sk

S

Н

S0

Н0

0 V0 V Vk V

Рис. 3.1

Для этого разделим интервал скоростей Vk-V0 на n1 частей: , а интервал Hk-H0 - на n2 равных частей: . Число частей n1 и n2 принципиального значения не имеет и может быть выбрано, исходя из требований к точности решения задачи. Так как за каждый шаг мы можем менять только высоту или только скорость, то общее число шагов m=n1+n2

Рис.3.2 Рис.3.3

Например, для случая, изображенного на рис. 3.2 n1=8, n2=6, m=14. Любая траектория, переводящая точку S из S0 в Sk, состоит из 14 шагов (этапов).

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

Например, траектория S, помеченная стрелками на рис. 3.3 даёт расход горючего:

W= 12+11+10+8+11+8+10+10+13+15+20+9+12+14=163

Необходимо из всех траекторий выбрать ту, для которого расход горючего минимален. Можно было бы перебрать все возможные траектории, но их слишком много. Проще будет разрешить задачу методом ДП. Процесс состоит из 14 шагов; будем оптимизировать каждый шаг, начиная с последнего. Конечное состояние самолёта (точка Sk) нам задано; 14 шаг непременно должен привести нас в эту точку. Посмотрим, откуда мы можем переместиться в эту точку Sk за один шаг, т.е. каковы возможные состояния самолёта после предпоследнего, 13-го шага? Рассмотрим отдельно правый верхний угол нашей прямоугольной сетки (рис. 3.4) с конечной точкой Sk. В эту точку можно за один шаг переместиться из двух соседних точек В1 и В2, причём из каждой - только одним способом, так что выбора условного управления на последнем шаге у нас нет – оно единственно. Если предпоследний шаг привёл нас в точку В1, мы должны двигаться по горизонтали (набирать скорость) и тратить 17 единиц горючего; если в точку В2 – идти по вертикали (набирать высоту) и тратить 14 единиц. Запишем эти минимальные расходы (в данном случае просто неизбежные) в кружках, поставленных в точках В1, В2 (рис. 3.5)

B1 17 Sk B1 17 17 Sk

13 14 13 14

17 В2 17 14 В2

Рис 3.4 Рис 3.5

Запись 17 в кружке у В1 означает: если мы пришли в В1 , то минимальный расход горючего, переводящий в точку Sk равен 17 единицам. Аналогичный смысл имеет запись 14 в кружке у точка В2. Оптимальное управление, приводящее к этому расходу, помечено стрелкой, выходящей из кружка. Стрелка указывает на направление, по которому мы должны двигаться из данной точки, если в результате предыдущей деятельности оказались в ней.

Т.о. условное оптимальное управление на последнем, 14-ом шаге, найдено для любого (В1 или В2) исхода 13-го шага. Для каждого из этих исходов найден условный минимальный расход горючего, за счёт которого можно переместиться из данной точки в Sk.

Перейдём к планированию предпоследнего, 13-го шага. Для этого рассмотрим все возможные результаты 12-го шага. После этого шага мы сможем оказаться в одной из точек С1, С2, С3 (рис. 3.6.). Из каждой этой точки мы должны найти оптимальный путь в Sk и соответствующий этому пути минимальный расход горючего. Если мы оказались в точке С1, то выбора нет: мы должны перемещаться по горизонтали и тратить 15+17=32 единиц горючего. Этот расход мы запишем в кружке при точке С1, а оптимальное управление (здесь единственное) из точки С1 пометим стрелкой.

С1 В1

32 15 17 17 Sk

13 14

30 17 14 В2

С2

12

26 С3

Рис. 3.6

Для точки С2 можно идти в Sk либо через В1, либо через В2. В первом случае мы израсходуем 13+17=30 единиц горючего, во втором 17+14=31. Значит оптимальный путь из С2 в Sk начинается вертикальным участком, а минимальный расход горючего равен 30 (записано в кружке при С2). Для точки С3 путь в Sk опять единственный: по вертикали. Обходится он в 12+14=26 единиц; эту величину мы запишем в кружке при С3, а стрелкой опять пометим оптимальное управление.

Т.о. переходя от точки к точке справа налево и сверху вниз (от конца процесса к его началу), можно для каждой узловой точки (рис. 3.3.) выбрать условное оптимальное управление на следующем шаге, т.е. направление, ведущее из данной точки в Sk с минимальным расходом горючего, и записать в кружке у данной точки этот минимальный расход. Чтобы найти в узловой точке оптимальное управление, нужно просмотреть два возможных пути из этой точки: направо и вверх, и для каждого из них найти сумму расхода горючего на этом шаге и минимального расхода горючего на оптимальном продолжении пути, уже построенном для следующей точки, куда ведёт данный путь. Из двух путей (направо и вверх) выбирается тот, для которого эта сумма меньше(если суммы равны выбирается любой путь).

В результате выполнения такой процедуры, из каждой новой точки (рис. 3.7.) проводится стрелка, указывающая условное оптимальное управление, а в кружке записывается минимальная стоимость перехода из этой точки в Sk (условная оптимальная стоимость) и так пока не дойдём до S0. Из этой точки (S0) идёт стрелка, указывающая, куда надо из неё перемещаться, а в кружке записан минимальный расход горючего. На этом этап условной оптимизации заканчивается и начинается завершающий этап безусловной оптимизации – построение оптимального управления на каждом шаге от первого до последнего. При этом мы строим оптимальную траекторию точки S , перемещаясь по стрелкам из S0 в Sk . На рис.3.7. показан окончательный результат такой процедуры – оптимальная траектория отмечена жирными кружками и дополнительными стрелками. Число 139, стоящее у точки S0 означает минимальный расход горючего Wmin, меньше которой нельзя получить ни на какой траектории. Т.о. представленная задача решена, и оптимальное управление процессом найдено. Оно состоит в следующем:

  • на первом шаге увеличивать только скорость, сохраняя неизменной высоту Н0 , до V0+ΔV;

  • на втором и третьем шагах увеличивать высоту до Н0+2ΔН, сохраняя скорость неизменной;

  • на 4-м, 5-м и 6-м шагах снова набирать скорость, пока она не станет равной V0+4ΔV;

  • на 7-м и 8-м шагах набирать высоту и довести её до Н0+4ΔН;

  • на 9-м12-м шагах снова набирать скорость и довести её до заданного значения Vk;

  • на последних двух шагах (13-м и 14-м) набрать высоту до заданного значения Нk.

Рис. 3.7

Найденное управление является оптимальным.

Рассмотренная задача является простейшим примером, чтобы показать основную идею ДП. Фактически ЛА может набирать высоту и скорость одновременно. В этом случае для каждой точки на плоскости VOH точка S может двигаться под любым углом в пределах некоторого сектора (рис. 3.8.) и каждому направлению соответствует свой расход горючего на единицу длины пройденного пути. Такая постановка задачи сложнее предыдущей, но также решается.

Соседние файлы в папке ЗФ_ИОиСА