Как выполнить стохастическую оптимизацию с помощью PyMC3? - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь объединить cvxopt (решатель оптимизации) и PyMC3 (сэмплер) для решения выпуклых задач стохастической оптимизации.

Я попытался использовать следующий код (PyMC, версия 2) в качестве основы,Но я не смог заставить его работать.

Стохастическая оптимизация в Python

Сначала, когда я попытался просто заменить pymc на pymc3, я получил следующую ошибку:

TypeError: Нет модели в стеке контекста, которая необходима для создания экземпляров распределений.Добавьте переменную внутри блока 'with model:' или используйте синтаксис '.dist' для автономного дистрибутива.

Затем я добавляю свой код в оператор "with" следующим образом и получаю«AttributeError».

AttributeError: модуль 'pymc3' не имеет атрибута'terministic '

import numpy as np, pymc3, cvxopt as co

# suppress cvxopt solver output, since it will be inside MCMC loop
co.solvers.options['show_progress'] = False


with pymc3.Model() as model:
    c1 = pymc3.Normal('c1', mu=-4, tau=0.5**-2)

    @pm.deterministic
    def x(c1=c1):
        c = co.matrix([float(c1), -5.])
        G = co.matrix([[2., 1., -1., 0.], [1., 2., 0., -1.]])
        h = co.matrix([3., 3., 0., 0.])
        sol = co.solvers.lp(c, G, h)
        solution = np.array(sol['x'],dtype=float).flatten()
        return solution

    m = pymc3.MCMC(dict(c1=c1, x=x))
    m.sample(20000, 10000, 10)

Я решил прокомментировать "#@pymc3.deterministic", изатем я получил следующую ошибку:

AttributeError: модуль 'pymc3' не имеет атрибута 'MCMC'

Итак, я застрял в этой точке.Я не знаю, что было бы эквивалентно вызову MCMC с использованием pymc3.Все, что я пробовал до сих пор, выдает мне следующее сообщение:

c = co.matrix ([float (c1), -5.]): Аргумент TypeError: float () должен быть строкой илиномер, а не «FreeRV»

Дайте мне знать, если вам нужно больше деталей.

...