Динамическое программирование.
При моделировании сетевых структур помимо задач, связанных с существованием потоков в транспортных, электрических, телефонных, компьютерных и прочих видах сетей, возникает целый класс задач, сводимых к задаче о кратчайшем пути. Например, задача о кратчайшем пути всякий раз решается программой - маршрутизатором при нахождении сайта по его имени в сети Интернет.
Задача о кратчайшем пути в ориентированной сети является типичной задачей динамического программирования, поэтому, хотя динамическое программирование, также как и сетевое планирование, связано с развитием процессов во времени, моделирование которых более детально рассмотрено в следующем разделе, рассмотрим уже в этом параграфе метод динамического программирования на примере поиска кратчайшего пути.
Понятие динамического программирования тесно связано с многошаговыми процессами принятия решений. Многошаговый процесс принятия решений можно определить, как процесс принятия последовательных решений, направленных на достижение заданной цели. Многошаговые процессы принятия решений постоянно встречаются в самых различных ситуациях, от ремонта автомобиля в автосервисе до управления космическим аппаратом.
Динамическое программирование можно приблизительно определить, как набор математических процедур, используемых при анализе многошаговых процессов принятия решений. Каждый многошаговый процесс принятия решений представляет собой развитие следующей задачи: найти кратчайший путь в направленной, ациклической сети.
Динамическое программирование можно рассматривать как единую теорию благодаря единому набору идей и приемов, которые используются при математическом анализе различных задач. Эти идеи и приемы и составляют сущность динамического программирования. Беллман одним из первых понял суть принципа оптимальности и стал применять его ко многим оптимизационным задачам, возникающих в математике, технике, исследовании операций и в других областях.
Таким образом, понятие динамического программирования связано с многошаговым процессом принятия решений для достижения определенной цели. Например, перевод летательного аппарата с одной орбиты на другую представляет собой типичную задачу динамического программирования, при условии, если коррекция орбиты осуществляется приложением импульса в дискретные моменты времени, а целью является экономия топлива.
Характеризуя динамическое программирование, как набор математических процедур для оптимального управления дискретной системой, в общем виде задачу оптимального управления можно сформулировать следующим образом. В дискретные моменты времени t = 1, 2,..., N система находится в одном из множеств si состояний, характеризуемых вектором состояния x(t). Переход между последовательными состояниями осуществляется с помощью вектора управления u(t) по закону:
x(t) = g(t)(x(t), u(t) ) ; t = 1, 2,..., N
Управления u(t) выбираются из множества допустимых управлений и образуют последовательность допустимых управлений u(0),u(1),…,u(N). Последовательность допустимых управлений при заданном начальном состоянии х(0) определяет траекторию системы х(0) ,х(1) ,х(2) ,…,х(N).
Всякой траектории соответствует свое значение критерия оптимальности F , или целевой функции управления, слагающегося из отдельных вкладов на каждом этапе управления:
.
Задачa оптимального управления заключается в нахождении среди множества последовательностей управления такой, которая достигает минимального значения F. Такая последовательность называется оптимальной последовательностью управлений и определяет оптимальную траекторию.
В основе динамического программирования лежит принцип оптимальности Беллмана, который можно сформулировать так. Оптимальная стратегия обладает таким свойством, что каково бы ни было начальное состояние и решение в начальный момент, последующие решения должны формулировать оптимальную стратегию относительно состояния, возникающего после начального решения.
Смысл принципа оптимальности становится ясней, если учесть, что для оптимальной траектории каждый ее участок между конечной точкой и любой промежуточной также является оптимальной траекторией. Принцип оптимальности, или иначе метод динамического программирования, позволяет отыскать оптимальную многошаговую стратегию путем решения совокупности более простых одношаговых оптимизационных задач.
Метод динамического программирования хорошо иллюстрируется на примере поиска кратчайшего пути между крайними узлами ориентированной сети. Рассмотрим некоторую ориентированную сеть, насчитывающую 12 узлов, которую нужно пройти от начального узла (1) до конечного узла (12) за четыре шага, передвигаясь с каждым шагом от узла к узлу.
Рис. 6.4.1. Прохождение ориентированной сети по кратчайшему пути.
Числа, указанные при дугах (i,j) равны длинам дуг lij между узлами i и j (в условных единицах). Возможные состояния системы si в данном случае связаны с нахождением в i-м узле, управление u(t) связано с выбором направления пути на каждом шаге управления. Четыре шага управления u(1),...,u(4) последовательно переводят систему из начального состояния s1 в конечное состояние s12 и, таким образом, образуют некоторую траекторию, которую необходимо отыскать. В роли критериея оптимальности F в данном случае выступает длина траектории L, слагающаяся из длин отдельных дуг:
.
Если поиски кратчайшего пути, т. е. оптимальной траектории, начинать не с начала, а сконца сети и двигаться в обратном направлении к началу, то в этом случае мы имеем алгоритм «обратной прогонки». В данном случае при реализации алгоритма обратной прогонки движение осуществляется от конечного состояния s12 к начальному состоянию s1.
Вначале поиска кратчайшего пути составляется таблица переходов. Число строк таблицы равно числу шагов управления, число столбцов равно числу состояний минус один. В этой таблице будут храниться шаги управления и соответствующие им значения критерия оптимальности Lt для всех возможных состояний системы после каждого шага.
Таблица 6.4.1
i t | s1 | s2 | s3 | s4 | s5 | S6 | s7 | s8 | s9 | s10 | s11 |
12 | 12 6 | ||||||||||
10 | 11 10 | ||||||||||
5 | |||||||||||
1 |
Заполненные клетки таблицы разбиты пополам. В верхнюю часть заполненной клетки заносится управление u(t) , т. е. в данном случае номер узла, в который осуществляется переход. В нижнюю часть заполненной клетки заносится то значение вклада Lt в общее значение критерия оптимальности L , которое было получено при переходеиз соответствующего этой клетке узла в конечный узел.
Заполнение таблицы начинается с первой строки, где хранится информация о последнем шаге пути. Последний, в данном случае четвертый шаг пути определен однозначно при переходе из любого предпоследнего состояния, которым может быть любое из трех возможных: s9, s10, s11. Поэтому оптимальное управление на последнем шаге очевидно. В зависимости от предпоследнего состояния вклад в критерий оптимальности L4(9) = 12, L4(10) = 6, либо L4(11) = 7. Эти значения вклада в L записываются в нижней части клеток первой строки табл. 6.4.1.
Перед предпоследним – в данном случае третьим - шагом множество возможных состояний системы есть {s5, s6, s7, s8}. Применим теперь принцип Беллмана для определения траектории на третьем и четвертом шаге. Он заключается в том, что независимо от первых двух шагов управления отрезок траектории на последних двух шагах сам по себе является оптимальной траекторией, т.е. дает минимум вклада L3 в критерий оптимальности.
Если состояние системы перед предпоследним шагом есть состояние s8 , то на последних шагах вклад в L определяется соотношением
L3(s5)=min{ }.
Поскольку из s5 возможны переходы в s9 и s11 .т.е.:
g(s5,9) = s9; ; L4(s9) = 12,
g(s5,11) = s11; ; L4(s11) = 7,
то
L3(s5) = min{6+12, 4+7} = 11 и u(3) = 11.
Это означает, что если система находится в состоянии s5, то оптимальное управление заключается сначала в переходе в состояние s11, затем в состояние s12 . Длина дуги из s5 в s12 при этом оказывается равна 11 единиц.
Рассчитывая вклад в L аналогично для переходов из состояний s6, s7, s8, получим следующие вклады:
L3(s6)=min{7+12, 6+6)=12 , u(3)=10;
L3(s7)=min{5+6, 3+7)=10, u(3)=11;
L3(s8)=min{10+6, 12+7)=16, u(3)=10;
Полученные четыре пары чисел записываются во вторую строку Табл. 6.4.1.
На втором шаге управления вклад в критерий оптимальности в зависимости от исходного состояния есть
L2(s2) = min{ } = min{11+11, 14+10} = 22, u(2) = 5;
L2(s3) = min{ } = min{7+11, 9+12} = 18, u(2) = 5;
L2(s4) = min{ } = min{2+16, 3+12, 6+10} = 15, u(2) = 6;
Полученные три пары чисел записываются в третью строку Табл.6.4.1.
Начальное состояние s1 определено однозначно, поэтому в последней строке таблицы заполняется единственная клетка, куда носятся значения 3 и 24 поскольку:
L1(s1) = min{ } = min{5+22, 6+18, 11+15} = 24, u(1) = 3.
Теперь можно окончательно определить последовательность оптимального многошагового управления. На первом шаге u(1) = 3, т.е. из узла 1 переходим в узел 3, на втором шаге u(2) = 5, т.е. переходим в узел 5, далее после управления u(3) = 11 - в узел 11 и, наконец, в узел 12. Окончательно получаем, что кратчайший путь по сети, изображенной на Рис. 6.4.1, проходит по последовательности состояний s1→s2→s5→s11→s12 , а его протяженность составляет 24 условных единиц.
Поиск кратчайшего пути можно также осуществлять из начала сети, реализуя при этом алгоритм прямой прогонки, который выполняет в сущности те же операции сложения и сравнения, но в несколько иной последовательности.
В алгоритмах прямой и обратной прогонки, хотя и отличных по существу, предусматривается одно сложение и одно сравнение на каждую дугу. Следовательно, оба алгоритма обладают одинаковым быстродействием. Тем не менее, существует важное различие. В алгоритме прямой прогонки рассматриваются дуги, исходящие из тех узлов, кратчайшие пути li до которых уже известны.
В алгоритме обратной прогонки рассматриваются дуги, входящие в те узлы, кратчайшие пути lj до которых ещё неизвестны. В силу последнего обстоятельства предпочтение чаще отдаётся алгоритму прямой прогонки. Этот алгоритм можно применять при любой структуре множества кратчайших путей.
Решение простой задачи о кратчайшем пути иллюстрирует ряд следующих характерных особенностей, которые присущи значительно более сложным многошаговым процессам принятия решений:
1. Исходная задача погружается во множество оптимизационных задач; при этом для каждого узла решается своя задача.
2. Множество решений оптимизационных задач описывается функциональным уравнением, представляющим собой систему уравнений, которые связывают несколько оптимизационных задач. В такой системе каждое уравнение соответствует одному узлу и содержит обычно операторы типа min, mах или minimax справа от знака равенства, а переменные типа gi, и gj - по обе стороны от него.
3. Решение множества оптимизационных задач можно найти с помощью алгоритма обратной прогонки, который равнозначен упорядоченной процедуре решения последовательности функциональных уравнений.
Динамическое программирование хорошо подходит для решения проблем, связанных с моделированием сетевых систем, не обладающих специальной структурой. Так, алгоритмы прямой и обратной прогонки пригодны для проведения вычислений в ациклических сетях. Алгоритм обратной прогонки можно обобщить и использовать для решения задач, в которых есть элемент случайности. Для алгоритма прямой прогонки это нельзя сделать.
Понятие «состояние» играет центральную роль в динамическом программировании, при этом под состояниями понимается следующее. Переход осуществляется из состояния в состояние, заключающее в себе всю предысторию процесса, т. е. состояние описано с той степенью подробности, которая позволяет провести вычисление (оценку) текущих альтернативных решении.
Для сетевой модели состояниями являются узлы, а дуги, выходящие из некоторого узла, отображают различные решения, которые можно принимать в данном узле (состоянии). При таком толковании можно говорить, что переход происходит из состояния в состояние, а состояния представляют собой точки, в которых принимаются решения. Приведенное утверждение означает, что дуги, выходящие из узла, не имеют никакого отношения к тому, каким путём был достигнут тот или иной узел, т. е. не зависят от входящих дуг.
Элементы состояния часто называют переменными состояния. В моделях динамического программирования состояния иногда группируются в стадии, и переход осуществляется от одной стадии к другой. Например, в задаче о кратчайшем пути имеются состояния, но нет стадий, так как нельзя сгруппировать состояния в множества таким образом, чтобы происходил переход от одного множества к другому.
Погружение во множество оптимизационных задач равносильно введению понятия пространство состояний, которое представляет собой множество состояний. В функциональном уравнении оптимальный отклик рассматривается как функция стартового состояния, а принцип оптимальности устанавливает взаимосвязь между оптимальными откликами для различных стартовых состояний.
Множество S возможных (или наблюдаемых) состояний называется пространством состояний, а элемент s из S определяет конкретное состояние. С каждым состоянием s связано множество D(s) . Элемент d из множества D(s) называется решением. Правило, согласно которому определяется допустимое решение для каждого состояния, называется стратегией d.
Фактически стратегия d ставит в соответствие каждому состоянию s некоторый элемент d(s) из множества D(s). Набор всех таких d образует пространство стратегий D. Последнее означает, что выбор решения в некотором состоянии не ограничивает выбор во всех других состояниях. По существу, D представляет собой декартово произведение множеств D(s) по s.
Одна из идей динамического программирования состоит в том, каждой стратегии d должна соответствовать так называемая функция прибыли Vd(s), которую можно получить, исходя из состояния s и используя стратегию d. Понятие функции прибыли (или дохода) обобщает понятие вклада Lt в общее значение критерия оптимальности L, рассматриваемое при решении задачи о кратчайшем пути.
Выражение «используя стратегию d» означает, что в состоянии s выбирается решение d(s); затем предполагается, что процесс перешел в состояние s' , т. е. реализуется состояние s', в котором выбирается решение d(s'), и т. д. Функция прибыли имеет довольно сложную структуру, поскольку она зависит от последовательности состояний и решений, от вознаграждений, которые связаны с этими состояниями и решениями, а также от способа агрегирования вознаграждений.
Состояние представляет собой описание предыстории процесса со степенью подробности, позволяющей провести оценку текущих альтернативных решений. Основным свойством состояний является то, что состояние является краткой записью предыстории процесса, причем степень детализации позволяет определить локальную функцию дохода.Иными словами, локальная функция дохода может зависеть лишь от s, d и v.
В следующей главе будут более подробно рассмотрены цепи Маркова, имеющие большое значение для моделирования временной эволюции производственных и технических систем. Существуют также Марковские модели принятия решений, в которых состояние s определяется некоторой парой чисел (n,i) , решением является зависящая от них функция k, а локальная функция дохода определяется выражением типа h[(n, I) , k, v] = Rki(n) + åjPkij(n)v(n+1,j) (n<N).
Марковские модели принятия решений обобщаются в разных направлениях, в частности, на случай Марковских задач о восстановлении. Наиболее полезное обобщение получается, когда рассматриваются неравные или переменные времена переходов. В простых моделях предполагается, что переход из состояния в состояние и наблюдение состояния осуществляются мгновенно, а отрезок времени между переходами из состояния в состояние может иметь переменную или случайную длину.
Всякий раз, когда наблюдается некоторое состояние, выбирается решение, которое уже нельзя изменять до тех пор, пока процесс не перейдет в новое состояние, где выбирается новое решение, и т. д. Данная модель представляет собой комбинацию теории цепей Маркова и теории восстановления; обычно ее называют Марковской задачей о восстановлении.
Контрольные вопросы к главе 6.
1. Из каких компонентов состоит ориентированная сеть?
1. Как строится матрица пропускных способностей сети?
1. Как образуется матрица потока в сети?
1. Для чего вычитаются матрицы пропускных способностей и потоков?
1. Что такое и для чего служит сетевой график?
1. Как определяются времена раннего начала и раннего окончания работ?
1. Что представляет собой общий резерв времени для некоторого события на сетевом графике?
1. Как определяется критический путь?
1. Что называется вектором состояния некоторой системы?
1. Что представляет собой траектория системы в пространстве состояний?
1. В чем заключается задача оптимального управления?
1. Как формулируется критерий оптимальности?
1. Что представляет собой динамическое программирование?
1. Сформулируйте принцип оптимальности Беллмана.
1. В чем сущность алгоритмов прямой и обратной прогонки при поиске кратчайшего пути?
Варианты заданий к главе 6.
Для сетей в каждом из вариантов:
1) Найти максимальный поток из источника (1) в конечный узел сети – сток, полагая, что одно из чисел в скобках у каждой дуги (i, j) определяет пропускную способность дуги;
1) Полагая, что дуги (1)®(2), (1)®(3) и т. д. определяют некоторые работы, минимальная и максимальная продолжительность которых заданы числами, указанными при соответствующих дугах, найти критический путь от начального события (1) до конечного;
1) Произвести поиск кратчайшего пути от начального узла до конечного узла сети. Считать расстояния между узлами i, j заданными одним из чисел в скобках.
X4
Дата добавления: 2016-01-11; просмотров: 3665;