gpt4 book ai didi

python - 在 pyomo 中使用 mle 进行参数估计

转载 作者:行者123 更新时间:2023-12-05 06:47:38 26 4
gpt4 key购买 nike

我想使用 pyomo 从行为数据集中估计 RL 模型的参数。

#dummy data
dis_data = pd.DataFrame([0,1,0,0,0,1], columns=['reward'])
dis_data['Expt']=str(1)
dis_data = dis_data.set_index('Expt')


def max_likelihood_four(x,data):
lr=x.lr
sigma=x.sigma
time = data.shape[0]
v = np.zeros(([2, time]))
pr = np.zeros(([2, time]))+0.5
pr_log = np.zeros(([time]))

for t in range(time-1):

pr[1, t] = 1 / (1 + np.exp(-(v[1, t] - v[0, t])/ sigma))
pr[0, t] = 1-pr[1, t]

outcome=int(data.ix[t,'reward'])
v[choice, t + 1] = v[choice, t] + lr * (outcome - v[choice, t])
v[1 - choice, t + 1] = v[1 - choice, t]

pr_log[t] = np.log(pr[choice, t])
# print(i)
return -np.sum(pr_log)
def pyomo_fit1(df):

mdl = ConcreteModel()
mdl.lr = Var(initialize=np.random.random(1), bounds=(0, 1))
mdl.sigma = Var(initialize=np.random.random(1), bounds=(0, 10))


residuals = max_likelihood_four(mdl,df)

mdl.obj = Objective(expr=residulas, sense=minimize)
SolverFactory('ipopt').solve(mdl)
return [mdl.lr,mdl.sigma]

parameter_values_1, r1 = pyomo_fit1(dis_data)

我收到这个错误:

"Cannot treat the scalar component 'sigma' as an indexed component"

最佳答案

np.random.random(1) 返回一个 numpy.ndarray 而不是整数或 float 。当您尝试将 mdl.sigma 初始化为标量 pyomo 变量时,您需要使用标量值,或者在本例中为 np.random.random(1)[0](数组中的唯一元素)。

如果您将 mdl.sigma(以及 mdl.lr)的代码替换为:

mdl.sigma = Var(initialize=np.random.random(1)[0], bounds=(0, 10))

然后错误(“无法将标量分量‘sigma’视为索引分量”)错误应该消失。

mdl = ConcreteModel()
mdl.lr = Var(initialize=np.random.random(1)[0], bounds=(0, 1))
mdl.sigma = Var(initialize=np.random.random(1)[0], bounds=(0, 10))

关于python - 在 pyomo 中使用 mle 进行参数估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67007607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com