"int 'object is not subscriptable"

"int 'object is not subscriptable"

我开始学习 GEKKO。现在,我正在解决一个背包问题来学习,但是这次我得到错误"int 'object is not subscriptable"。你能看看这段代码吗?问题的根源是什么 我应该如何定义 1.10 矩阵?

from gekko import GEKKO    
import numpy as np

m = GEKKO(remote=False)
x = m.Var((10),lb=0,ub=1,integer=True)
#x = m.Array(m.Var,(1,10),lb=0,ub=1,integer=True)
v=np.array([2, 2, 7, 8, 2, 1, 7, 9, 4, 10])
w=np.array([2, 2, 2, 2, 2, 1, 6, 7, 3, 3])
capacity=16

for j in range(10):
           m.Maximize(v[j]*x[j])

for i in range(10):
        m.Equation(m.sum(x[i]*w[i])<=capacity)

m.options.solver = 1
m.solve()
#print('Objective Function: ' + str(m.options.objfcnval))
print(x)

我的第二个问题是MATLAB中有一个叫做"showproblem ()"的函数。 GEKKO有这个功能吗?

感谢您的帮助。 根据答案的新问题。 我可以在这里写这种风格吗(不行,如果我可以,请写工作风格)(我想写这种风格,因为我觉得这种风格更容易理解。),

for i in range(10):
    xw = x[i]*w[i] 
    m.Equation(m.sum(xw)<=capacity)

而不是这个。

xw = [x[i]*w[i] for i in range(10)]
m.Equation(m.sum(xw)<=capacity)

这里是一个修改版本,解决了gekko中的混合整数问题。

from gekko import GEKKO    
import numpy as np

m = GEKKO(remote=False)
x = m.Array(m.Var,10,lb=0,ub=1,integer=True)
v=np.array([2, 2, 7, 8, 2, 1, 7, 9, 4, 10])
w=np.array([2, 2, 2, 2, 2, 1, 6, 7, 3, 3])
capacity=16

for j in range(10):
    m.Maximize(v[j]*x[j])

xw = [x[i]*w[i] for i in range(10)]
m.Equation(m.sum(xw)<=capacity)

m.options.solver = 1
m.solve()
print('Objective Function: ' + str(-m.options.objfcnval))
print(x)

您的问题表述很接近。您只需要定义一个用于形成容量约束的列表 xw。 如果您想使用循环而不是列表理解,那么我建议使用以下内容而不是 xw = [x[i]*w[i] for i in range(10)].

xw = []
for i in range(10):
    xw.append(x[i]*w[i])