我正在尝试解决Python中的优化问题,使用gekko,其中一个变量在每个时间步取随机值,但我无法使用返回随机数的gekko函数。
在文档页面(http://t-t.dk/gekko/docs/user-manual/functions.htm)之后,函数rnorm返回"一个来自正态分布的随机数,并提供了平均值和方差"。我使用它的方式如下所示:
x = m.Var(value=0)
m.Equation(x == 5.*m.rnorm(0, 1))
,
m = GEKKO()
但是我得到以下错误信息:
AttributeError: 'GEKKO' object没有属性'rnorm'
我想知道是否有什么我错过了,或者是否有另一种方法来获得随机数。
您链接的文档页与另一个与Python中的优化套件不同的包相关联。我建议查看这个页面:https://gekko.readthedocs.io/en/latest/model_methods.html以获取正确的文档。
至于你关于随机数的问题,我建议使用另一个包,如python的random或numpy的random.normal。我不确定如何准确地应用它在你的问题没有看到更多的代码;你可以做的是为每个时间步取一个随机数数组,然后在某处乘或加,同时用Gekko写问题。
您提供的文档链接指向不同的gekko软件:
Gekko Timeseries and Modeling Software是一个免费的开源软件系统,用于管理和分析时间序列数据,求解和分析大规模经济模型。请参阅Gekko主页:www.t-t.dk/gekko。在Gekko版本概述页面上阅读更多关于不同Gekko版本状态的信息。
Pythonpip install gekko
中的Gekko优化套件在维基百科文章和阅读文档中有描述。
GEKKO是一个Python包,用于混合整数和微分代数方程的机器学习和优化。它与线性、二次、非线性和混合整数规划(LP、QP、NLP、MILP、MINLP)的大规模求解器相结合。运行方式包括参数回归、数据协调、实时优化、动态仿真和非线性预测控制。GEKKO是一个面向对象的Python库,用于促进APMonitor的本地执行。
两个软件包都可以分析时间序列数据。numpy.random.randn()
功能可与gekko
配合使用。
from gekko import GEKKO
import numpy as np
m = GEKKO(remote=False)
p = m.Param()
x = m.Var()
m.Equation(x==5*p)
for i in range(10):
p.value = np.random.randn()
m.solve(disp=False)
print(x.value[0],p.value[0])
这就解决了p
从正态、均零分布中采样10次不同值的优化问题。