gpt4 book ai didi

python - 如何在 python 的 gekko 优化器中使用数组

转载 作者:太空宇宙 更新时间:2023-11-03 13:27:17 25 4
gpt4 key购买 nike

我尝试通过使用列表、数组 x[] 而不是变量 x1 来转换来自 gekko python 优化器的示例..x4。这是给出结果的代码,但我认为它不正确

from gekko import GEKKO
import numpy as np
# Initialize Model
m = GEKKO(remote=False)

#help(m)

#define parameter
eq = m.Param(value=40)

#initialize variables
x = [m.Var(value=1,lb=1,ub=5) for i in range(4)]
x[1].value=5
x[2].value=5

#Equations
m.Equation(np.prod([x[i] for i in range(0,4)])>=25)
m.Equation(np.sum([x[i]**2 for i in range(0,4)])==eq)

#Objective
m.Obj(x[0]*x[3]*(x[0]+x[1]+x[2])+x[2])

#Set global options
m.options.IMODE = 3 #steady state optimization

#Solve simulation
m.solve() # solve on public server

#Results
print('')
print('Results')
print('x1: ' + str(x[0].value))
print('x2: ' + str(x[1].value))
print('x3: ' + str(x[2].value))
print('x4: ' + str(x[3].value))

请任何人帮助我了解如何在 gekko 中使用列表、变量数组。这在我看来不太优雅,我想知道是否有一种使用 Array() 函数而不是 Var() 的方法。我不知道如何以及何时可以使用 Array() 函数。

最佳答案

您可以使用 m.Array GEKKO 函数将变量、参数、FV、MV、SV 或 CV 创建为一维或多维数组。下面是使用 m.Array 声明变量的示例。在后续步骤中,我定义了初始猜测和界限。

import numpy as np
from gekko import GEKKO
m = GEKKO()
x = m.Array(m.Var,(4))
# intial guess
ig = [1,5,5,1]
# lower bounds
i = 0
for xi in x:
xi.value = ig[i]
xi.lower = 1
xi.upper = 5
i += 1
#Equations
m.Equation(np.prod(x)>=25)
m.Equation(sum(x**2)==40)
#Objective
m.Obj(x[0]*x[3]*(x[0]+x[1]+x[2])+x[2])
m.solve()
print(x)

结果如下:

The solution was found.

The final value of the objective function is 17.0140171270735

---------------------------------------------------
Solver : IPOPT (v3.12)
Solution time : 9.999999980209395E-003 sec
Objective : 17.0140171270735
Successful solution
---------------------------------------------------

[[1.000000057] [4.74299963] [3.8211500283] [1.3794081795]]

关于python - 如何在 python 的 gekko 优化器中使用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52944970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com