2

これは私のコードの一部です:

import gekko as GEKKO
for i in range(0,4,1):
    m = GEKKO()
    x = m.Var()
    e_i1 = R_n[0,0] * A_slice[i,0] + R_n[1, 0] * A_slice[i, 1]
    e_i2 = R_n[0, 1] * A_slice[i, 1] + R_n[1, 1] * A_slice[i, 1]
    r = get_determinante(R_n)
    d = P[0,i]
    m.Equation(e_i1*R_n[0,1]*x + e_i1*R_n[1,1]*A_slice[i,4] - e_i2*R_n[0,0]*x + e_i2*R_n[1,0]*A_slice[i,4] == r * d)
    m.solve()
    print(x)

ただし、xを印刷していません。

理由はありますか?

4

1 に答える 1

1

の値を次のように出力してみてくださいx

print(x.value)

変数xは月光変数タイプで、結果はx.valuenumpy 配列としてロードされます。値にアクセスするには、印刷するx.valuex.value[0]、配列の最初の要素だけを取得します。

各ループで新しい Gekko モデル、変数、方程式を作成しています。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)
于 2019-10-18T15:24:17.837 に答える