“int 'object is not subscriptable”

▼魔方 西西 提交于 2020-06-16 02:13:47

问题


i'm starting to learn GEKKO. Now, I am solving a knapsak problem to learn, but this time I get the error "int 'object is not subscriptable". can you look at this code? what is the source of the problem How should I define the 1.10 matrices?

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)

My second question is that there is a function called "showproblem ()" in MATLAB. Does GEKKO have this function?

thanks for help. new question that according to answer. can i write here this style(that doesnt work, if i can do it, please write working style)(i want to write this style, because i think this style is easier to understand.),

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

instead of this.

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

回答1:


Here is a modified version that solves the mixed integer problem in 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)

Your problem formulation was close. You just needed to define a list xw that you use to form the capacity constraint. If you want to use a loop instead of a list comprehension then I recommend the following instead of xw = [x[i]*w[i] for i in range(10)].

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


来源:https://stackoverflow.com/questions/61881241/int-object-is-not-subscriptable

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!