python - 贝叶斯随机最优控制,MCMC

标签 python optimization pymc mcmc stochastic-process

我有一个随机最优控制问题,我希望使用某种基于贝叶斯模拟的框架来解决。我的问题具有以下一般结构:

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 表示当前状态的某种信念。目标函数是 t=0 到 t=T 时间段内增益(函数 V)的最大贴现值。

我正在考虑使用 Python,特别是 PyMC 来解决这个问题,尽管我不确定如何继续,特别是如何优化控制变量。我找到了一本书,出版于 1967 年,由 Masanao Aoki 撰写的 Optimization of Stochastic Systems,其中引用了一些可能有用的贝叶斯技术,当前是否有可能有帮助的 Python 实现?或者是否有更好的方法来使用 Python 来模拟最佳路径?

最佳答案

我想到的第一个猜测是尝试像 chainer 这样的神经网络包或theano,它可以跟踪成本函数相对于控制函数参数的导数;他们还有一堆优化插件例程。您可以使用 numpy.random 生成样本(粒子),从库组件中组合控制函数,并通过显式欧拉方案运行它们进行首次尝试。这将为您提供粒子的成本函数及其相对于参数的导数,可以将其馈送到优化器。

这里可能出现的问题是求解器的迭代将创建大量导数跟踪对象。

更新:请参阅 this example on Github

Github 上也有很多带有关键字粒子过滤器 python 的点击:

https://github.com/strohel/PyBayes

https://github.com/jerkern/pyParticleEst

还有a manuscript around其中提到作者在 Python 中实现了过滤器,因此您可能需要联系他们。

关于python - 贝叶斯随机最优控制,MCMC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33931125/

相关文章:

c++ - 局部变量与数组访问

python - 为什么 PyMC3 和 Tensorflow 需要对象的双重命名?

python - 在 pymc3 中重写用于动态系统参数估计的 pymc 脚本

python - 使用 pymc3 定义随机变量和确定性变量

performance - JotCache 与 Joomla 内置缓存哪个更好?为什么?

python - 如何以编程方式更改 python 装饰器中函数的 argspec?

python csv阅读器忽略空白行

python - 如何按列名称对行进行分组并按日期时间对行进行排序

php - 减少网站加载时间的优化

python - 如何从 Python 集中挑选 2 个随机项目?