Уравнение Гамильтона — Якоби — Беллмана — дифференциальное уравнение в частных производных, играющее центральную роль в теории оптимального управления. Решением уравнения является функция значения (англ. value function), которая даёт оптимальное значение для управляемой динамической системы с заданной функцией цены.

Если уравнения Гамильтона — Якоби — Беллмана решаются в какой-то части пространства, они играют роль необходимого условия; при решении во всём пространстве они также становятся достаточным условием для оптимального решения. Методика может быть также применена к стохастическим системам.

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

Уравнение является результатом развития теории динамического программирования, первопроходцем которой является Ричард Беллман и его сотрудники.[1]

Соответствующее уравнение с дискретным временем называется просто уравнением Беллмана. При рассмотрении задачи с непрерывным временем полученные уравнения могут рассматриваться как продолжение более ранних работ в области теоретической физики, связанных с уравнением Гамильтона — Якоби.

Задачи оптимального управления

править

Рассмотрим следующую задачу оптимального управления на промежутке времени :

где С и D — функции стоимости, определяющие соответственно интегральную и терминальную часть функционала. x(t) — вектор, определяющий состояние системы в каждый момент времени. Его начальное значение x(0) считается известным. Вектор управления u(t) следует выбрать таким образом, чтобы добиться минимизации значения V.

Эволюция системы под действием управления u(t) описывается следующим образом:

Уравнение в частных производных

править

Для такой простой динамической системы, уравнения Гамильтона — Якоби — Беллмана принимают следующий вид:

(под подразумевается скалярное произведение) и задаются значением в конечный момент времени T:

Неизвестная в этом уравнении — беллмановская «функция значения» V(xt), которая отвечает максимальной цене, которую можно получить, ведя систему из состояния (xt) оптимальным образом до момента времени T. Соответственно, интересующая нас оптимальная стоимость — значение V = V(x(0), 0).

Вывод уравнения

править

Продемонстрируем интуитивные рассуждения, которые приводят к этому уравнению. Пусть  — функция значения, тогда рассмотрим переход от момента времени t к моменту t + dt в соответствии с принципом Беллмана:

Разложим последнее слагаемое по Тейлору:

Осталось перенести V(xt) влево, поделить на dt и перейти к пределу.

Примечания

править
  1. R. E. Bellman. Dynamic Programming. Princeton, NJ, 1957.

Литература

править
  • R. E. Bellman: Dynamic Programming and a new formalism in the calculus of variations. Proc. Nat. Acad. Sci. 40, 1954, 231—235.
  • R. E. Bellman: Dynamic Programming, Princeton 1957.
  • R. Bellman, S. Dreyfus: An application of dynamic programming to the determination of optimal satellite trajectories. J. Brit. Interplanet. Soc. 17, 1959, 78—83.

📚 Artikel Terkait di Wikipedia

Инкапсуляция (программирование)

_property; } this.setProperty = function(value) { // открытый интерфейс _property = value; _privateMethod(); } } или let A = function() { // private let _property;

Инструментальная сходимость

expected value of its objective function. A standard reinforcement learning agent is an agent that attempts to maximize the expected value of a future

Функция Розенброка

or least value of a function, The Computer Journal, 3: 175—184, doi:10.1093/comjnl/3.3.175, ISSN 0010-4620, MR: 0136042 Rosenbrock function plot in 3D (англ

CPL (язык программирования)

языка Си. Max(Items, ValueFunction) = value of § (Best, BestVal) = (NIL, -∞) while Items do § (Item, Val) = (Head(Items), ValueFunction(Head(Items))) if Val

Одиночка (шаблон проектирования)

Singleton = Singleton.getInstance T1.Value = 1000 Dim T2 As Singleton = Singleton.getInstance Console.WriteLine(T2.Value) Console.Read() End Sub End Module

ECMAScript

function() { var value = 0; return { increment: function (inc) { value += typeof inc === 'number' ? inc : 1; }, getValue: function ( ) { return value;

Тернарная условная операция

си-подобный синтаксис: $a = $b==1 ? "first value" : ($b==2 ? "second value" : ($b==3 ? "result value" : "default value")); Тернарный оператор в PHP эквивалентен

Mocha (фреймворк)

describe('Foo', function(){ describe('#getBar(value)', function(){ it('should return 100 when value is negative') // placeholder it('should return 0 when value is