Python 在Gekko中何时使用Param而不是Const?

Python 在Gekko中何时使用Param而不是Const?,python,gekko,Python,Gekko,我试图将三次样条曲线拟合到下面的数据点,当我使用Param时,比如示例m.x=m.Param(value=np.linspace(-1,6))或者当我使用常量Const时,我有点困惑 将numpy导入为np 从gekko进口gekko xm=np.array([0,1,2,3,4,5]) ym=np.数组([0.1,0.2,0.3,0.5,1.0,0.9]) m=GEKKO() m、 x=m.Param(值=np.linspace(-1,6)) m、 y=m.Var() m、 options.I

我试图将三次样条曲线拟合到下面的数据点,当我使用
Param
时,比如示例
m.x=m.Param(value=np.linspace(-1,6))
或者当我使用常量
Const
时,我有点困惑

将numpy导入为np
从gekko进口gekko
xm=np.array([0,1,2,3,4,5])
ym=np.数组([0.1,0.2,0.3,0.5,1.0,0.9])
m=GEKKO()
m、 x=m.Param(值=np.linspace(-1,6))
m、 y=m.Var()
m、 options.IMODE=2
m、 cspline(m.x、m.y、xm、ym)
m、 求解(disp=False)
p=壁虎()
p、 x=p.Var(值=1,磅=0,磅=5)
p、 y=p.Var()
p、 cspline(p.x,p.y,xm,ym)
p、 Obj(-p.y)
p、 求解(disp=False)

常数
常量
是一个预期不会更改的单个标量值。参数
Param
具有初始值,但用户可以使用数据对其进行更改。固定值
FV
或操纵变量
MV
是成为解算器决策变量的两种特殊类型的参数。
FV
MV
之间的区别在于
FV
有一个值,而
MV
可以在数据(
IMODE=2
)或时间(
IMODE=4-9
)维度上有不同的值

您有一个很好的例子,将三次样条曲线拟合到数据,然后求解范围
0
的最大值

将numpy导入为np
从gekko进口gekko
xm=np.array([0,1,2,3,4,5])
ym=np.数组([0.1,0.2,0.3,0.5,1.0,0.9])
m=GEKKO()
m、 x=m.Param(值=np.linspace(-1,6))
m、 y=m.Var()
m、 options.IMODE=2
m、 cspline(m.x、m.y、xm、ym)
m、 求解(disp=False)
p=壁虎()
p、 x=p.Var(值=1,磅=0,磅=5)
p、 y=p.Var()
p、 cspline(p.x,p.y,xm,ym)
p、 最大化(年)
p、 求解(disp=False)
将matplotlib.pyplot作为plt导入
plt.plot(xm,ym,'rs',label='Data')
plt.plot(m.x,m.y,'r.-',label='三次样条曲线')
plt.plot(p.x,p.y,'bo',label='Maximize')
plt.xlabel('x'),plt.ylabel('y'))
plt.legend()
plt.show()

在您的情况下,
Param
(或
MV
,状态为0
)是合适的gekko对象。
Const
给出了一个错误:
ValueError:常量值必须是标量。

FYI:gekko中有一个新的
Maximize
函数,这样你的目标函数就可以用
p.Maximize(p.y)
而不是
p.Obj(-p.y)
更具可读性。