我有一个目标函数,有四个要优化的参数(n1、n2、n3 和 n4)。这种优化应该在“for T in T”循环中完成,因为目标函数是 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))
最佳答案
有多种方法可以export data from Python as shown here 。您需要将结果放入二维列表、NumPy 数组或 Pandas 数据框中。如果您需要将值转换为 Excel 可以打开的表单(例如 CSV 文件),则以下是对原始脚本的修改。该脚本使用 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')
关于python - 如何在 Python - GEKKO 中构建和打印循环生成的优化值列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57417373/