Байесовское стохастическое оптимальное управление, MCMC
У меня есть проблема стохастического оптимального управления, которую я хочу решить, используя некоторый тип системы, основанной на байесовском моделировании. Моя проблема имеет следующую общую структуру:
s_t+1 = r*s_t(1 - s_t) - x_t+1 + epsilon_t+1
x_t+1 ~ Beta(u_t+1, w_t+1)
u_t+1 = f_1(u_t,w_t, s_t, x_t)
w_t+1 = f_2(u_t,w_t, s_t, x_t)
epsilon_t ~ Normal(0,sigma)
objective function: max_{x_t} E(Sigma_{t=0}^{T} V(s_t,x_t,c) * rho^t)
Моя цель - исследовать различные функциональные формы f_1, f_2 и V, чтобы определить, чем эта модель отличается от нестохастической модели и другой более простой стохастической модели.
Переменными состояния являются s_t, управляющими переменными являются x_t, а u_t и w_t представляют некоторую уверенность в текущем состоянии. Целевая функция представляет собой дисконтированный максимум от коэффициентов усиления (функция V) за период времени от t=0 до t=T.
Я думал об использовании Python, в частности PyMC, чтобы решить эту проблему, хотя я не уверен, как действовать, в частности, как оптимизировать управляющие переменные. Я нашел книгу, опубликованную в 1967 году "Оптимизация стохастических систем" Масанао Аоки, в которой упоминаются некоторые байесовские методы, которые могут быть полезны, может ли помочь текущая реализация Python? Или есть гораздо лучший способ симулировать оптимальный путь, используя Python?
1 ответ
Первое, что приходит мне в голову, это попробовать пакеты нейронной сети, такие как chainer
или же theano
который может отслеживать производную вашей функции стоимости по параметрам функции управления; у них также есть куча подпрограмм оптимизации. Ты можешь использовать numpy.random
чтобы сгенерировать образцы (частицы), скомпоновать свои функции управления из компонентов библиотек и запустить их по явной схеме Эйлера для первой попытки. Это даст вам функцию стоимости ваших частиц и ее производную по параметрам, которые могут быть переданы оптимизаторам.
Проблема, которая может возникнуть здесь, состоит в том, что итерации решателя создадут множество объектов отслеживания производных.
обновление: пожалуйста, посмотрите этот пример на Github
Также есть много просмотров на Github с ключевыми словами particle filter python
:
https://github.com/strohel/PyBayes
https://github.com/jerkern/pyParticleEst
Также есть рукопись, в которой упоминается, что автор реализовал фильтры в Python, так что вы можете связаться с ними.