22920

# “int 'object is not subscriptable”

<h3>Question</h3>

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) ```

```xw = [x[i]*w[i] for i in range(10)] m.Equation(m.sum(xw)<=capacity) ```
<pre class="lang-py prettyprint-override">```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)]`.
<pre class="lang-py prettyprint-override">```xw = [] for i in range(10): xw.append(x[i]*w[i]) ```