最適化する4つのパラメーター(n1、n2、n3、n4)を持つ目的関数があります。目的関数はTの関数であるため、この最適化は「for T in T」のループで実行する必要があります。その結果、各Tに対して、パラメーターのセットを取得します。T、n1、n2、n3、n4を含む個別のリストを作成して印刷するにはどうすればよいですか?
ループの内側と外側で、さまざまな「印刷」方法を試しました。こことGEKKOのドキュメントでも例を検索しましたが、それでも私にとっては挑戦です。前もって感謝します。
import math
import numpy as np
from gekko import GEKKO
T = np.arange(1, 10, 2)
for T in T:
A = 3/(T**2)
B = 20-T**2
C = 3+T
D = T
mA = A-T*C
mB = B-T*D
# Minimization routine
from gekko import GEKKO
m = GEKKO()
# Variables to be minimized:
n1, n2, n3, n4 = [m.Var() for i in range(4)]
var = [n1, n2, n3, n4]
# Initial values:
n0 = [3,2,3,3]
nL = np.ones(len(n0))*10**-10
nU = np.ones(len(n0))*10**10
for i,x in enumerate(var):
x.value = n0[i]
x.lower = nL[i]
x.upper = nU[i]
nt = m.Intermediate(n1 + n2 + n3 + n4)
# Objective:
m.Obj(T*A*mA + B*mB + C*D/nt)
# Set global options
m.options.IMODE = 3
# Solve minimization
m.solve()
print(n1, n2, n3, n4)
print(str(n1.value), str(n2.value), str(n3.value), str(n4.value))
ここに示すように、Pythonからデータをエクスポートする方法は複数あります。結果を2次元リスト、NumPy配列、またはPandasデータフレームに取り込む必要があります。以下は、CSVファイルなど、Excelで開くことができる形式に値を取得する必要がある場合の元のスクリプトへの変更です。このスクリプトは、NumPyを使用してファイルを書き込みます。
import math
import numpy as np
from gekko import GEKKO
T = np.arange(1, 10, 2)
z = [None]*len(T)
for j,T in enumerate(T):
A = 3/(T**2)
B = 20-T**2
C = 3+T
D = T
mA = A-T*C
mB = B-T*D
# Minimization routine
from gekko import GEKKO
m = GEKKO()
# Variables to be minimized:
n1, n2, n3, n4 = [m.Var() for i in range(4)]
var = [n1, n2, n3, n4]
# Initial values:
n0 = [3,2,3,3]
nL = np.ones(len(n0))*10**-10
nU = np.ones(len(n0))*10**10
for i,x in enumerate(var):
x.value = n0[i]
x.lower = nL[i]
x.upper = nU[i]
nt = m.Intermediate(n1 + n2 + n3 + n4)
# Objective:
m.Obj(T*A*mA + B*mB + C*D/nt)
# Set global options
m.options.IMODE = 3
# Solve minimization
m.solve(disp=False)
result = [T]
for x in var:
result.append(x.value[0])
z[j] = result
zn = np.array(z)
np.savetxt('z.txt',zn,delimiter=',',comments='',header='T,n1,n2,n3,n4')
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加