【发布时间】:2017-10-09 01:01:34
【问题描述】:
参考我下面的代码(仅原始代码的相关部分),由于 x0 是一个 4 X 3 数组,x 也应该是相同的。但我在约束 1 中收到“标量变量的无效索引”错误。
我按照scipy.optimize.minimize (COBYLA and SLSQP) ignores constraints initiated within for loop 中的答案迭代地编写了约束
编写约束的任何更好(通用)方式都会很棒。提前致谢!
我需要约束循环,因为这只是一个玩具优化问题,而不是我希望解决的原始优化问题(博弈论)。
代码(下面的完整代码链接):
def constraint1(i):
def g(x):
con = 20
for k in range(3):
con = con - x[i][k]
return con
return g
x0 = np.array([[5,5,5],[5,5,5],[5,5,5],[5,5,5]])
cons = []
for i in range(4):
cons.append({'type': 'ineq', 'fun': constraint1(i)})
solution = minimize(objective,x0,method='SLSQP',\
bounds=None,constraints=cons)
还有错误(请忽略行号,因为上面是稍大代码的一部分):
Traceback (most recent call last):
File "opt.py", line 44, in <module>
bounds=None,constraints=cons)
File "C:\Users\dott\Anaconda2\lib\site-packages\scipy\optimize\_minimize.py", line 458, in minimize constraints, callback=callback, **options)
File "C:\Users\dott\Anaconda2\lib\site-packages\scipy\optimize\slsqp.py", line 312, in _minimize_slsqp
mieq = sum(map(len, [atleast_1d(c['fun'](x, *c['args'])) for c in cons['ineq']]))
File "opt.py", line 15, in g
con = con - x[i][k]
IndexError: invalid index to scalar variable.
【问题讨论】: