Я пытаюсь объединить 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»
Дайте мне знать, если вам нужно больше деталей.