使用 MCMC 进行随机规划

机器算法验证 机器学习 贝叶斯 优化 马尔可夫链蒙特卡罗 pymc
2022-03-23 01:32:23

虽然解决确定性 LP 问题(例如内点算法)有很多更好的方法,但MCMC可以用来解决它们的随机变体吗?

所谓随机,我的意思是,例如,系数和/或约束的分布,并获得解决方案的后验概率,表示:

  • 考虑到系数/约束的不确定性,解决方案的不确定性
  • 考虑到 MCMC 为您提供估计,解决方案的不确定性

例如:

x=argminxE(c1x13x2)s.t.x1+x2b1x1,x20

以及在哪里:

  • c1N(2,0.5)
  • b1N(0,3)

我倾向于相信我们可以使用 MRF 势来表示约束和目标函数,但不确定如何制定有助于近似方程的解决方案的采样问题。以上。

1个回答

PyMC2 可以与您选择的 LP 求解器结合使用,以解决像这样的随机 LP 问题。这是针对这个非常简单的案例的代码。我已经留下了关于如何将其更改为更复杂的 LP 的说明。

c1 = pm.Normal('c1', mu=2, tau=.5**-2)
c2 = -3
b1 = pm.Normal('b1', mu=0, tau=3.**-2)

@pm.deterministic
def x(c1=c1, c2=c2, b1=b1):
    # use an LP solver here for a complex problem
    arg_min = np.empty(2)
    min_val = np.inf
    for x1,x2 in [[0,0], [0, b1], [-b1, 0]]: # there are only three possible extreme points,
        if -x1 + x2 <= b1 and x1 >= 0 and x2 >= 0: # so check obj value at each valid one
            val = c1*x1 + c2*x2
            if val < min_val:
                min_val = val
                arg_min = [x1,x2]

    return np.array(arg_min, dtype=float)

看看的奇怪联合分布:(x1,x2)

联合分配

一个包含所有代码的笔记本在这里