我很难尝试使用scipy.optimize优化任意数量的变量。目标是找到每种类型的冰棒的最佳数量,以最大化冰棒商店的利润。限制如下:
以下是变量名称的解释。
popsicle_budget是商店必须在冰棒上花多少钱
def func(x): "在名为arb_vars"的列表中存储x [0] ... x [N]; arb_vars = [] j = 0 对于范围内的我(len(popsicle_types)): arb_vars [j] = x [j] "将arb_vars转换为数组" arb_vars = np.asarray(arb_vars) "最大化这两个向量之间的点积" return - (np.dot(arb_vars,popsicle_profits))
上面的功能是我想要优化的。下面是我创建的一个函数,以便我可以在func函数之外使用arb_vars列表。
def arb(x):
arb_vars = []
j = 0
for i in range(len(popsicle_types)):
arb_vars[j] = x[j]
return arb_vars
arb_vars = arb(x)
我不明白第一个界限(0,0)的要点。所有的界限 之后它在1到20之间,因为这是我想要的每种类型的数量范围。
bnds = ((0,0),(1,20)*len(popsicle_types))
popsicle_budget = 1000
cons = ({'type':'eq','fun':lambda x: np.dot(arb_vars, popsicle_costs)-popsicle_budget})
x0 = [0]*len(popsicle_types)
res = optimize.minimize(func,x0,method='SLSQP',bounds=bnds,constraints=cons)
print res
当我运行此代码时,我收到错误:IndexError:标量变量的索引无效。突出显示arb_vars [j] = x [j]的行。
有没有办法在Python中优化任意数量的变量?如果是这样,你如何做,以及使用的正确语法是什么?