"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])
我开始学习 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])