Попробуйте напечатать значение x
как:
print(x.value)
Переменная x
является типом переменной Gekko, а результаты загружаются в x.value
в виде массива. Чтобы получить доступ к значению, вы можете напечатать x.value
или x.value[0]
, чтобы получить только первый элемент массива.
Вы создаете новую модель Гекко, переменные и уравнения в каждом цикле. Вы также можете объявить массив значений x
с помощью x=m.Array(m.Var,4)
и решить все уравнения и переменные одновременно без цикла. Это может помочь ускорить ваш код. Если вы сделаете это, вам нужно будет напечатать каждое значение x
как:
print([x[i].value[0] for i in range(4)])
Вот отдельный пример с функциями массива:
from gekko import GEKKO
m = GEKKO()
# variable array dimension
n = 3 # rows
p = 2 # columns
# create array
x = m.Array(m.Var,(n,p))
for i in range(n):
for j in range(p):
x[i,j].value = 2.0
x[i,j].lower = -10.0
x[i,j].upper = 10.0
# create parameter
y = m.Param(value = 1.0)
# sum columns
z = [None]*p
for j in range(p):
z[j] = m.Intermediate(sum([x[i,j] for i in range(n)]))
# objective
m.Obj(sum([z[j]**2 + y for j in range(p)]))
# minimize objective
m.solve()
print(x)