我有一个带有四个要优化参数(n1,n2,n3和n4)的Objective函数。该优化应在“针对T中的T”的循环中完成,因为Objective函数是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循环生成的优化值列表?-LMLPHP

关于python - 如何在Python中构建和打印-GEKKO循环生成的优化值列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57417373/

10-14 18:30
查看更多