
- •58. Основные понятия кредитной операции. Простая процентная ставка. Наращение простыми и сложными процентами. Обычные и точные простые проценты.
- •1.1 Кредит, ссуда, заем - их современное определение
- •59 Вопрос Переменные ставки простых процентов и реинвестирование под простые проценты. !
- •60. Наращение сложными процентами. Дисконтирование по сложной процентной ставке. Налоги, инфляция и начисление сложных и непрерывных процентов.
- •61. Основные принципы и правила составления математических моделей
- •62. Транспортная задача. Граф перевозок. Признак оптимальности. Метод потенциалов.
- •63. Задача линейного программирования: общая формулировка. Основные идеи и алгоритм симплекс-метода.
- •64. Динамическое программирование. Принцип Беллмана. Основное рекуррентное соотношение Беллмана. Общие принципы решения задач динамического программирования.
- •65. Специальные задачи математического программирования. Задача о назначениях. Задача о коммивояжере.
- •3.Задача о коммивояжере
- •17.Эффективность и результативность соревновательной деятельности спортсмена. Стратегия и тактика, управление соревновательной деятельностью.
- •18. Методические основы построения многолетней подготовкой спортсменов.
- •19. Периодизация спортивной подготовки в различных видах спорта
64. Динамическое программирование. Принцип Беллмана. Основное рекуррентное соотношение Беллмана. Общие принципы решения задач динамического программирования.
1.Динамическое программирование в теории управления и теории вычислительных систем — способ решения сложных задач путём разбиения их на более простые подзадачи. Он применим к задачам с оптимальной подструктурой (англ.), выглядящим как набор перекрывающихся подзадач, сложность которых чуть меньше исходной. В этом случае время вычислений, по сравнению с «наивными» методами, можно значительно сократить.
Ключевая идея в динамическом программировании достаточно проста. Как правило, чтобы решить поставленную задачу, требуется решить отдельные части задачи (подзадачи), после чего объединить решения подзадач в одно общее решение. Часто многие из этих подзадач одинаковы. Подход динамического программирования состоит в том, чтобы решить каждую подзадачу только один раз, сократив тем самым количество вычислений. Это особенно полезно в случаях, когда число повторяющихся подзадач экспоненциально велико.
Метод динамического программирования сверху — это простое запоминание результатов решения тех подзадач, которые могут повторно встретиться в дальнейшем. Динамическое программирование снизу включает в себя переформулирование сложной задачи в виде рекурсивной последовательности более простых подзадач.
Оптимальная подструктура в динамическом программировании означает, что оптимальное решение подзадач меньшего размера может быть использовано для решения исходной задачи. К примеру, кратчайший путь в графе из одной вершины (обозначим s) в другую (обозначим t) может быть найден так: сначала считаем кратчайший путь из всех вершин, смежных с s, до t, а затем, учитывая веса ребер, которыми s соединена со смежными вершинами, выбираем лучший путь до t (через какую вершину лучше всего пойти). В общем случае мы можем решить задачу, в которой присутствует оптимальная подструктура, проделывая следующие три шага.
Разбиение задачи на подзадачи меньшего размера.
Нахождение оптимального решения подзадач рекурсивно, проделывая такой же трехшаговый алгоритм.
Использование полученного решения подзадач для конструирования решения исходной задачи.
Подзадачи решаются делением их на подзадачи ещё меньшего размера и т. д., пока не приходят к тривиальному случаю задачи, решаемой за константное время (ответ можно сказать сразу). К примеру, если нам нужно найти n!, то тривиальной задачей будет 1! = 1 (или 0! = 1).
Перекрывающиеся подзадачи в динамическом программировании означают подзадачи, которые используются для решения некоторого количества задач (не одной) большего размера (то есть мы несколько раз проделываем одно и то же). Ярким примером является вычисление последовательности Фибоначчи, и — даже в таком тривиальном случае вычисления всего двух чисел Фибоначчи мы уже посчитали дважды. Если продолжать дальше и посчитать , то посчитается ещё два раза, так как для вычисления будут нужны опять и . Получается следующее: простой рекурсивный подход будет расходовать время на вычисление решение для задач, которые он уже решал.
Чтобы избежать такого хода событий мы будем сохранять решения подзадач, которые мы уже решали, и когда нам снова потребуется решение подзадачи, мы вместо того, чтобы вычислять его заново, просто достанем его из памяти. Этот подход называется кэширование. Можно проделывать и дальнейшие оптимизации — например, если мы точно уверены, что решение подзадачи нам больше не потребуется, можно выкинуть его из памяти, освободив её для других нужд, или если процессор простаивает и мы знаем, что решение некоторых, ещё не посчитанных подзадач, нам понадобится в дальнейшем, мы можем решить их заранее.
Подводя итоги вышесказанного можно сказать, что динамическое программирование пользуется следующими свойствами задачи:
перекрывающиеся подзадачи;
оптимальная подструктура;
возможность запоминания решения часто встречающихся подзадач.
Динамическое программирование обычно придерживается двух подходов к решению задач:
нисходящее динамическое программирование: задача разбивается на подзадачи меньшего размера, они решаются и затем комбинируются для решения исходной задачи. Используется запоминание для решений часто встречающихся подзадач.
восходящее динамическое программирование: все подзадачи, которые впоследствии понадобятся для решения исходной задачи просчитываются заранее и затем используются для построения решения исходной задачи. Этот способ лучше нисходящего программирования в смысле размера необходимого стека и количества вызова функций, но иногда бывает нелегко заранее выяснить, решение каких подзадач нам потребуется в дальнейшем.
Языки программирования могут запоминать результат вызова функции с определенным набором аргументов (мемоизация), чтобы ускорить «вычисление по имени». В некоторых языках такая возможность встроена (например, Scheme, Common Lisp, Perl), а в некоторых требует дополнительных расширений (C++).
Известны сериальное динамическое программирование, включённое во все учебники по исследованию операций, и несериальное динамическое программирование (НСДП), которое в настоящее время слабо известно, хотя было открыто в 1960-х годах.
Обычное динамическое программирование является частным случаем несериального динамического программирования, когда граф взаимосвязей переменных — просто путь. НСДП, являясь естественным и общим методом для учета структуры задачи оптимизации, рассматривает множество ограничений и/или целевую функцию как рекурсивно вычислимую функцию. Это позволяет находить решение поэтапно, на каждом из этапов используя информацию, полученную на предыдущих этапах, причём эффективность этого алгоритма прямо зависит от структуры графа взаимосвязей переменных. Если этот граф достаточно разрежен, то объём вычислений на каждом этапе может сохраняться в разумных пределах.
Одним из основных свойств задач, решаемых с помощью динамического программирования, является аддитивность. Неаддитивные задачи решаются другими методами. Например, многие задачи по оптимизации инвестиций компании являются неаддитивными и решаются с помощью сравнения стоимости компании при проведении инвестиций и без них.
2. Принцип Беллмана
Принцип оптимальности Беллмана (также известный как принцип динамического программирования), названный в честь Ричарда Эрнста Беллмана, описывает действие математического метода оптимизации, называемого динамическим программированием. Он заключается в том, что на каждом шаге следует стремиться не к изолированной оптимизации функции fk(хk, ξk), а выбирать оптимальное управление хk* в предположении об оптимальности всех последующих шагов.
Принцип оптимальности: оптимальная стратегия имеет свойство, что какими бы ни были начальное состояние и начальное решение, последующие решения должны составлять оптимальный курс действий по отношению к состоянию, полученному в результате первого решения.
Беллмана принцип оптимальности
БЕЛЛМАНА ПРИНЦИП ОПТИМАЛЬНОСТИ [Bellman’s optimality principle] — важнейшее положение динамического программирования, которое гласит: оптимальное поведение в задачах динамического программирования обладает тем свойством, что каковы бы ни были первоначальное состояние и решение (т. е. “управление”), последующие решения должны составлять оптимальное поведение относительно состояния, получающегося в результате первого решения. Этот принцип можно выразить и рассуждая от противного: если не использовать наилучшим образом то, чем мы располагаем сейчас, то и в дальнейшем не удастся наилучшим образом распорядиться тем, что мы могли бы иметь.
Следовательно, если имеется оптимальная траектория, то и любой ее участок представляет собой оптимальную траекторию. Этот принцип позволяет сформулировать эффективный метод решения широкого класса многошаговых задач. (Подробнее см. Динамическое программирование.)
Принцип назван по имени крупного американского математика Р. Беллмана, одного из основоположников динамического программирования.
Еще
Принцип Беллмана позволяет упростить нахождение оптимальных стратегий. [1]
Принцип Беллмана для задачи управления со многими критериями формулируется в виде следующей теоремы. [2]
Уравнение ( 55) выражает принцип Беллмана в задаче об оптимальной остановке. [3]
В § 2 сформулирован многокритериальный аналог принципа Беллмана. В § 3 рассмотрена задача независимого выбора; в § 4 - задача конструирования. [4]
Так как по условию на всех уровнях дихотомические деления выполняются оптимально и оптимизируемые параметры аддитивны, при построении конечного сечения обеспечивается выполнение принципа Беллмана, поэтому достигнутое сечение является оптимальным и все КТС, приписанные этим узлам, составляют оптимальный типаж обслуживающей системы. [5]
Так как задача оптимизации типажа аддитивна и затраты на построение оптимального типажа состоят из суммы затрат на серии отдельных оптимальных типоразмеров, к решению может быть применен принцип Беллмана. По определению, каждый узел, через который проходит оптимальное сечение, является также оптимальным сечением соответствующего субграфа, приписанного данному узлу. При этом оптимальное сечение субграфа, подчиненного узлу, лежащему на оптимальном сечении полного графа, проходит через его вершину. Таким образом, геометрическое место вершин оптимальных субграфов является оптимальным сечением графа альтернативных решений. Следовательно, типаж, представленный оптимальным сечением графа альтернативных решений, может обслужить весь портфель заявок при минимальных затратах на обслуживание. [6]
Вывод необходимых условий оптимальности производится на. Предварительно заметим, что по принципу Беллмана [2] любой участок оптимальной траектории также должен быть оптимальной траекторией. [7]
Для выбора критериев при использовании концепции оптимизации применяют различные принципы оптимальности. Например, при исследовании систем в определенных условиях часто используют принцип Беллмана или принцип максимума Понтря-гина. При наличии случайных факторов используют принцип наибольшего среднего результата или принцип наибольшего гарантированного результата. Принцип наибольшего гарантированного результата при учете неопределенностей, связанных с наличием несовпадающих интересов ( например, в конфликтных ситуациях), приводит, в частности, к принципу максимина. [8]
Каждое из этих управлений по формуле ( 4) приводит к доходу Jn ( x0, и): 0, 3, 2, 1, 1, 2, 3, 0 соответственно. Доход 3, 0 при управлении ( ы2, [ и4) мажорирует остальные доходы. В силу задания единственным ( х0, R, 2) - оптимальным является управление ( 2, J. Таким образом, в рассмотренной задаче со специально выбранным отношением R принцип Беллмана не выполняется. [9]
Достроенный таким образом граф снизу до верха можно сопоставить с графом, полученным методом сверху вниз путем дихотомии, и произвести коррекцию обоих вариантов с целью исключения ошибки ( см. гл. Напомним, что при практическом использовании метода оптимальных дихотомий возможна ошибка за счет неточной аналитической аппроксимации интегральных стоимостных характеристик. Коррекция позволяет исключить и эти ошибки. В этом случае, оптимальное сечение полного графа предлагается искать в соответствии с принципом Беллмана, для чего доказывается следующая теорема
Основное рекуррентное соотношение Беллмана
Рекуррентное соотношение Беллмана.
Многие управляемые системы описываются уравнениями в конечных разностях. Такие системы принято называть дискретными системами. К дискретным системам относятся импульсные системы, системы, в состав которых входят цифровые вычислительные устройства, и т. д.
Системы, описываемые дифференциальными уравнениями, принято (в этом смысле) называть системами непрерывного действия.
Любой системе обыкновенных дифференциальных уравнений можно поставить в соответствие эквивалентную ей систему уравнений в конечных разностях с непрерывным аргументом (77). Для этого необходимо проинтегрировать заданную систему дифференциальных уравнений на конечном интервале времени , где — фиксируемый интервал дискретности, а (где ) — параметр, соответствующий некоторой точке, расположенной внутри интервала дискретности. Коэффициенты указанной системы уравнений в конечных разностях будут зависеть от и решение этой системы уравнений будет определять состояние рассматриваемой системы для любого момента времени .
Полученная описанным способом система уравнений в конечных разностях будет представлять собой точные функциональные уравнения, связывающие между собой состояния системы в моменты времени, отстоящие друг от друга на величину, равную интервалу дискретности .
Если ограничиться изучением состояния системы лишь в дискретные моменты времени, промежутки между которыми равны интервалу дискретности , то можно фиксировать значение параметра , и тогда мы получим систему уравнений в конечных разностях с дискретным аргументом. Решение этой системы уравнений будет точно определять состояние системы в дискретные моменты времени, отстоящие друг от друга на величину . Положение этих моментов времени внутри интервала дискретности фиксировано выбором параметра .
Получение указанных выше уравнений в конечных разностях, точно описывающих управляемую систему непрерывного действия, в достаточно сложных задачах может оказаться громоздким.
Приближенные уравнения в конечных разностях можно получить следующим образом.
Общие принципы решения задач динамического программирования.
Сформулируем общий принцип, лежащий в основе решения всех задач динамического программирования («принцип оптимальности»):
«Каково бы ни было состояние системы S перед очередным шагом, надо выбрать управление на этом шаге так, чтобы выигрыш на данном шаге плюс оптимальный выигрыш на всех последующих шагах был максимальным».
Динамическое программирование – это поэтапное планирование многошагового процесса, при котором на каждом этапе оптимизируется только один шаг. Управление на каждом шаге должно выбираться с учетом всех его последствий в будущем. При постановке задач динамического программирования следует руководствоваться следующими принципами:
1. Выбрать параметры (фазовые координаты), характеризующие состояние управляемой системы перед каждым шагом.
2. Расчленить операцию на этапы (шаги).
3. Выяснить набор шаговых управлений xi для каждого шага и налагаемые на них ограничения.
4. Определить какой выигрыш приносит на i-ом шаге управление xi, если перед этим система была в состоянии S, т.е. записать «функцию выигрыша»:
5. Определить, как изменяется состояние S системы S под влиянием управление xi на i-ом шаге: оно переходит в новое состояние
6. Записать основное рекуррентное уравнение динамического программирования, выражающее условный оптимальный выигрыш Wi(S)
(начиная с i-го шага и до конца) через уже известную функцию Wi+1(S):
Этому выигрышу соответствует условное оптимальное управление на i-шаге xi(S) (причем в уже известную функцию Wi+1(S) надо вместо S подставить измененное состояние [pic])
7. Произвести условную оптимизацию последнего (m-го) шага, задаваясь гаммой состояний S, из которых можно за один шаг дойти до конечного состояния, вычисляя для каждого из них условный оптимальный выигрыша по формуле [pic]
8. Произвести условную оптимизацию (m-1)-го, (m-2)-го и т.д. шагов по формуле (1.2), полагая в ней i=(m-1),(m-2),…, и для каждого из шагов указать условное оптимальное управление xi(S), при котором максимум достигается.
Заметим, что если состояние системы в начальный момент известно (а это обычно бывает так), то на первом шаге варьировать состояние системы не нужно - прямо находим оптимальный выигрыш для данного начального состояния. Это и есть оптимальный выигрыш за всю операцию
9. Произвести безусловную оптимизацию управления, «читая» соответствующие рекомендации на каждом шаге. Взять найденное оптимальное управление на первом шаге [pic]; изменить состояние системы по формуле (1.1); для вновь найденного состояния найти оптимальное управление на втором шаге х2* и т.д. до конца. Данные этапы рассматривались для аддитивных задач, в которых выигрыш за всю операцию равен сумме выигрышей на отдельных шагах. Метод динамического программирования применим также и к задачам с так называемым «мультипликативным» критерием, имеющим вид произведения:
(если только выигрыши wi положительны). Эти задачи решаются точно так же, как задачи с аддитивным критерием, с той единственной разницей, что в основном уравнении (1.2) вместо знака «плюс» ставится знак «умножения»: