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

Методы оптимизации семинары

.pdf
Скачиваний:
173
Добавлен:
27.02.2016
Размер:
818.9 Кб
Скачать

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

6.

x = u(t) , x(0)=2, -1 u 0, J= ò(u2

+ 2x)dt ® min ,

 

 

 

 

 

 

 

 

 

 

0

ì

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

2

 

 

 

13

, t Î [3,4]

 

 

 

 

= -t + 2, t Î [0,3]

 

ïx* =

- 4t +

 

 

ì

*

 

 

ответ

и

2

2

íx

 

í

 

 

 

 

 

 

 

î

 

u* = -1

 

ï

 

 

u

*

=

 

t - 2

 

 

 

 

 

 

 

î

 

 

 

2

 

2.3. Задачи с подвижными концами

Пример 1. Даны модель объекта управления x(t) = u(t) , x(0)=1, x R,

u R, t [0, t1] и функционал J= 1 tò1 u2 dt + 4x(t1 ) ® min . Задано конечное условие

2 0

x(t1)=t1-1. Найти оптимальную тройку t1, x*(t), u*(t).

В этом примере f0(t, x, u)= 12 u2 , f(t, x, u)=u, F(t1, x)=4x и задано граничное условие Г(t1, x(t1))=t1-x(t1)-1=0. Решается задача Больца. Составляем гамильтониан H (t, Ψ, x, u)=Ψu- 12 u2 . Находим максимум

гамильтониана по управлению:

H (t, Ψ, x, u)=Ψ(t)-u=0, u*(t)=Ψ(t),

2

H

u

du2

 

 

 

(t, Ψ, x, u)=-1<0. Необходимое и достаточное условия максимума выполнены. Выписываем канонические уравнения принципа максимума:

x(t) = u* (t) =ψ (t), x(0)=1,

ψ(t) = - x H (t, Ψ, x, u)=0.

Для нахождения еще одного краевого условия и определения t1*, рассмотрим условие трансверсальности и заданное граничное условие

Г(t1, x(t1))=t1-x(t1)-1=0.

Условие трансверсальности

n

δF(t1*)-H(t1*)δt1+ åψ j (t1* x j = 0

j=1

выполняется для любых δt1, δxj, удолетворяющих системе δГ(t1*, x*(t1*))=0,

Г(t1*, x*(t1*))=0. Имеем δF=4δx, δГ(t1, x(t1))=δt1-δx=0. Тогда 4δx-H(t1)δt1+Ψ(t1)δx=0, δt1- δx=0, t1-x(t1)-1=0,

где H (t1, Ψ(t1), x(t1), u*(t1)) 12 =Ψ2(t1). Поскольку t1 не фиксировано, то δt1 ¹ 0 , из вариации граничных условий получим δt1=δx. Итак для любых δx, получим: (4- 12ψ 2 (t1 ) +ψ (t1 ) )δx=0, отсюда 4- 12ψ 2 (t1 ) +ψ (t1 ) =0. Решаем краевую задачу x(t) =ψ (t) , x(0)=1, ψ(t) = 0 , 4- 12ψ 2 (t1 ) +ψ (t1 ) =0, t1-x(t1)-1=0.

Получим Ψ(t)=const=C, x(t)=Ct+1. Для определения постоянной C при t=t1 решаем систему уравнений: 4- 12 C 2 + C =0, t1-Ct1 -2=0. Получим C=-2, t1=

23 ; C=4, t1=- 23 . Второе решение не подходит, так как при t1 должно быть

положительным. Окончательно t1*= 2 , x*(t)=-2t+1, u*(t)=-2.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1.

x1 = x2 , x2

= 4 ,

x1(0)+x1(1)=0, x2(0)+x2(1)=0,

 

u

 

£ 2 , J= ò x1 (t)dt ® min ,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

ì

u* = 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ответ íïx1*

= t 2 -1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ï

*

= 2t -1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

îx2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

t1

1

 

 

1

 

 

 

 

 

2.

x

= u(t) , x(0)=3

 

2 , J=

òu2 (t)dt +

(t1 - 2)2

+

x2

 

(t1 ) ® min ,

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

2

0

 

2

 

 

 

 

 

ì

 

t1* = 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ответ íïx*

= -

 

t + 3

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ï

u

*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

= - 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

î

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Глава 6. Применение принципа Беллмана

Рассмотрим некоторую динамическую систему S.

Пусть на k-м шаге (k = 1, 2,..., n) состояние системы

определяется

 

совокупностью

чисел X k =( x1k , x2k ,... , x mk ),

которые

получены

в

результате

реализации

управления

_Uk,

обеспечивающего переход системы S из состояния X k1 в состояние

X k . Будем полагать,

что X k

зависит от X k1

и Uk, и не зависит от

того, как система пришла

в

состояние X k1

(свойство отсутствия

последействия).

 

 

 

 

Пусть Wk(X k1 ,

Uk)

есть доход (выигрыш), полученный в

результате реализации k-го шага. Тогда общий выигрыш полагаем

n

, Uk)

 

 

равным F = å Wk(X k1

(свойство

аддитивности целевой

k =1

 

 

 

функции).

 

U * = ( u1* ,

 

Совокупность управлений

u2* ,..., un* ), в результате

реализации которых система S переходит за n шагов из начального

состояния X0 в конечное X n и при этом функция F принимает наибольшее значение, будем называть оптимальной стратегией управления.

Принцип оптимальности Белмана.

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

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

обеспечивающее максимальное значение

функции

Wn(X n1 , Un).

Такое

управление

un0 ,

выбранное

при

определенных

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

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

Обозначим через Fn(X0) максимальный доход, получаемый за n шагов при переходе системы S из начального состояния X0 в

конечное состояние X n , а через Fn-k (X k ) - то же при переходе из X k в X n и оптимальном управлении на последних n-k шагах.

Тогда

 

 

 

 

 

 

 

 

 

 

 

 

Fn(X

0

) =

max

(X

0

, U1) + W2(X

1

, U2) +... + Wn(X

n−1

, Un)],

 

 

uk [W1

 

 

 

 

Fn-k(X0) =

max [Wk+1(X k , Uk+1) + Fn-k-1(X k+1 )], k =

 

 

0, n −1.

 

 

 

 

uk +1

 

 

 

 

 

 

 

 

 

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

Положим k = n - 1, тогда

F1

(X

) =

max

[Wn(X

, Un) + F0

(X

n

)],

(*)

 

 

n 1

 

 

 

n 1

 

 

 

 

где F0(X n ) считаем известным.

Используя (*) и рассматривая всевозможные допустимые

состояния X 1n−1 , X 2n−1 ,...,

X ln−1 ,..., системы на

(n-1)-м шаге находим

условно-оптимальные

управления un0 (X 1n−1 ),

un0 (X 2n−1 ),..., un0 (X ln−1 ),... и

соответствующие значения функции (*): F10 (X 1n−1 ), F10 (X n2−1 ),..., F10 (X ln−1

),....

Таким образом, на n-м шаге находим условно-оптимальное управление при любом допустимом состоянии системы после (n- 1)-го шага. То есть, в каком бы состоянии система не оказалась после (n+1)-го шага, нам уже известно, какое следует принять решение на n-м шаге. Известно и соответствующее значение функции. (*)

Переходим к рассмотрению функционального уравнения при

k=n-2.

 

 

 

 

F2(X n−2 ) = max [Wn-1(X n−2 , Un-1) + F1(X n−1 )].

(**)

 

un-1

 

 

 

Для того, чтобы найти значение F2 для всех допустимых

значений

X n−2 , очевидно,

необходимо знать

Wn-1(X n−2 , Un-1) и

F1(X n−1 ).

Но F1(X n−1 ) мы

уже определили на

предыдущем шаге.

Поэтому нужно произвести вычисления для Wn-1(X n−2 , Un-1) при

некотором наборе допустимых значений X n−2 и соответствующих управлений Un-2. Эти вычисления позволят определить условно

оптимальное управление U 0n-1 для каждого X n−2 . Каждое из таких

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

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

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

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

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

возьмем найденное условно оптимальное управление U10 . На втором шаге найдем состояние X1* , в которое переводит систему управление u1* . Это состояние определяет условно оптимальное управление U 02 (X1* ), которое теперь будем считать оптимальным ( u2* ). Зная u2* , находим X 3* = u2* (X 2* ), а значит - определяем u3* = U 03 (X 3* ), и т.д. В результате находим решение задачи - максимально

возможный доход и оптимальную стратегию управления U*, включающую оптимальные управления на отдельных шагах ( u1* , u2*

,..., un* ).

Таким образом, мы рассмотрели нахождение решения задачи динамического программирования в общем виде. Этот процесс является довольно громоздким, поэтому он используется обычно с применением ЭВМ. Отметим также, что изложена только идея, которая должна быть реализована в том или ином виде для каждого частного случая и далеко не всегда очевидно, как это сделать.

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

1. Задача о ранце

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

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

Например, частным случаем задачи о ранце является так называемая одномерная задача о ранце, которая обычно формулируется в виде

n

å cjxj ® max,

j=1

n

å ajxj b,

j=1

xi Î {0,1}, j = 1,..., n.

Примером реальной задачи такого типа является следующая задача: Имеется n проектов, стоимость j-го проекта есть aj, его

ценность равна cj, j = 1,..., n. Имеется также бюджет b для

финансирования этих проектов. Задача состоит в выборе подмножества проектов так, чтобы максимизировать суммарную ценность, но при этом не превысить бюджет.

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

В связи с этим мы должны выполнить две операции:

1. Погрузить данную задачу в семейство задач того же типа. Для задачи о ранце рассматривают, например, семейство из

n(b+1) задач вида

n

Fi(E) = max å cjxj,

j=1

n

å ajxj b - E,

j=1

xj {1,0}, j = 1,..., n,

где i изменяется от 1 до n, а Е - это целое число, изменяющееся от

0 до b.

Число Е, с помощью которого параметризуется данное семейство задач, обычно называется переменной состояния. Отметим, что это число приписывается ограничениям задачи. Множество Г = {0, 1,..., b} возможных значений числа Е называется пространством состояний задачи.

Исходная задача о ранце является членом построенного семейства задач при i=1 и Е=0. Таким образом, мы имеет

F*=F1(0).

Кроме того, договоримся полагать Fi(E) = - ∞ при Е < 0 или

когда при некотором i задача не имеет решения (например, когда Е

> b).

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

Fi(E) = max {cixi + Fi+1(E+aixi)} = max {Fi+1(E);

xi =0 1

ci+Fi+1(E+ai)}.

Таким образом, для всех значений Е (0 ≤ Е ≤ b) задача получения решения Fi(E) из решения Fi+1(E) упрощается до

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

Алгоритм (динамического программирования для задачи о ранце).

(а) Старт (шаг n)

E (0 E b) вычислить Fn(E) по формуле

 

ì0, для E ³ b - an ,

 

 

 

ï

 

 

 

 

 

Fn(E) =

ï

 

 

 

 

 

íïcn , для E

£ b - an Џ cn ³ 0,

 

ï

 

 

 

 

 

 

ï

 

 

Џ

 

£ 0.

 

ï0, для E £ b - a

n

n

 

î

 

 

 

(б) Шаг i.

Для i = n-1, n-2,..., 2 последовательно вычислятьE (0 E b):

Fi(E) = max {Fi+1(E); ci+Fi+1(E+ai)}.

(в) Шаг 1. Вычислить F* по формуле

F* = F1(0) = max {F2(0); c1+F2(a1)}.

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

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

2. Простейшие задачи решаемые методом динамического программирования

2.1. Задача о минимизации расхода горючего самолетом при наборе высоты и скорости. Постановка задачи

Пусть самолет, находящийся на высоте Н0 и имеющий скорость V0 должен подняться на высоту Нk н иметь скорость Vk.

Известен расход горючего при подъеме самолета с любой высоты H1 на любую высоту Н2>Н1 при постоянной скорости, а также расход горючего при увеличении скорости от любого значения V1 до любого значения V2>V1 при неизменной высоте [14].

H

H KSK

H0

S0

0

VK

V

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

Р е ш е н и е . Прямоугольник ограниченный прямыми V=V0, V=Vk и Н=Н0, Н=Hk является областью допустимых состояний. Начальное S0(V0, Н0) и конечное Sk(Vk, Hk) состояния вполне определены, как две точки S0 и Sk на плоскости.

Чтобы построить решение методом динамического программирования, разобьем отрезок (Hk-Н0) на n1, а отрезок (Vk-V0) - на п2 равных частей (этапов).

Пусть за один шаг самолет может увеличить либо высоту на величину

H=(Hk-Н0)/n1, либо скорость на величину V=(Vk-V0)/n2. Очевидно, существует множество траекторий (управлений), представляющих собой

ломаные линии, по которым точка S может переместиться из S0 в Sk.

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

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

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

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

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

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

2. 2. Задача определения кратчайших расстояний по заданной сети

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

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

Эта задача нашла широкое применение для определения значений стоимости Сij (i - номер поставщика, j - номер потребителя), которые входят в критерий оптимальности при решении транспортной задачи линейного программирования.

Решение задачи по определению кратчайших расстояний между поставщиками и потребителями по существующей транспортной сети является исходным этапом при решении таких экономических задач:

-оптимальное закрепление потребителей за поставщиками,

-повышение производительности транспорта за счет сокращения непроизводительного пробега и др.

Пусть на некоторой поверхности взято конечное число точек P1, P2,..., Pi,..., Pj,..., Pn, соединенных всевозможными непересекающимися отрезками линий (Pi,Pj), называемых звеньями или связями. Тогда совокупность точек и их связей называется сетью.

Сеть называется достаточно связанной, если существует путь, состоящий из звеньев и соединяющий любые две точки сети из точек P1,

P2,..., Pn.

Постановка задачи. Пусть задана достаточно связанная сеть, на которой каждому звену (Pi,Pj) поставлено в соответствие некоторое действительное неотрицательное число lij - его длина.

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

Пронумеруем точки сети в любом порядке (слева направо, сверху вниз) и укажем длину каждого звена.

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

Положим, что lij=lji,

Необходимо найти кратчайшие расстояния по сети от каждой точки до всех остальных.

Разобьем процесс на п этапов, а каждый этап - на п-1 шагов.

Этап заключается в отыскании кратчайших расстояний и маршрутов, по которым они проходят, от какой-нибудь одной точки, заранее зафиксированной, до всех остальных.

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

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

Алгоритм решения задачи.

1. Фиксируем точку Рi, до которой необходимо рассчитать кратчайшее расстояние от всех остальных.

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