python - 如何在 Python - GEKKO 中构建和打印循环生成的优化值列表?

标签 python python-3.x gekko

我有一个目标函数,有四个要优化的参数(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')

Result Table in Excel

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

相关文章:

python 3 smtplib : binary attachment encodes incorrectly in flask when gnupg is active

python - 如何从 Tkinter 条目小部件获取字节数组

optimization - Gekko 不可行解,应满足 cotraint

python - 运行 Django 的 ./manage.py syncdb 时禁用更新 content_types

python - 如何减去多索引数据框中的列?

python - 两个日期时间之间的平均值;如果是 NaN,则获取最后一个非 NaN 值

python - 操作列时如何使用 pandas 数据帧处理 "divide by zero"?

python - Pandas :填充组内的缺失值

python - 对 Gekko 整数变量进行平方时的错误解决方案

python - 通过 L0 范数/GEKKO 中非零元素的数量约束混合整数非线性优化问题