gpt4 book ai didi

python-3.x - 在 GEKKO 中定义控制变量和目标函数

转载 作者:行者123 更新时间:2023-12-04 13:37:21 25 4
gpt4 key购买 nike

我试图在 GEKKO 中解决以下动力系统

(1) d ϕ d t = − M T D M ϕ

我按照给出的例子 here在 GEKKO 中建立以下方程

M, MT = get_mmt()
A = MT @ np.diag(Dhat) @ M
A = A[1:ngrid - 1]

# first node
m.Equation(phi_hat[0].dt() == 0)

# interior nodes
int_value = -A @ phi_hat # function value at interior nodes
m.Equations(phi_hat[i].dt() == int_value[i] for i in range(0, ngrid-2))

# terminal node
m.Equation(phi_hat[ngrid-1].dt() == Dhat[end] * 2 * (phi_hat[end-1] - phi_hat[end]))

状态变量是 phi_hat。我想最小化模型中 phi_meas 和 phi_hat 之间的平方误差差异。因此,使用以下设置。

phi_hat = [m.Var(value=phi_0[i]) for i in range(ngrid)]
phi_hat = m.CV(value=phi_meas)
phi_hat.FSTATUS = 1 # fit to measurement phi obtained from 'def actual'

必须通过优化等式 1 中的参数 D(与下面的 Dhat 相同)来最小化误差。

Dhat0 = 500*np.ones(ngrid-1)
Dhat = m.FV(value=Dhat0[i] for i in range(0, ngrid-1))
Dhat.STATUS = 1 # adjustable parameter

我希望这些设置是正确的。如果这些错误,请纠正我。我在这里有点困惑,不确定我是否应该使用 Dhat = m.CV(value=Dhat0[i] for i in range(0, ngrid-1)) 代替 m.FVDhat 是必须估计的控制变量向量。

发布此消息,我想寻求有关如何使用 (f = sum((phi(:) - phi_tilde(:)).^2)) 定义目标函数的帮助m.最小化()。

我有以下模拟设置

m.options.IMODE = 5  # simultaneous dynamic estimation
m.options.NODES = 5 # collocation nodes
m.solve()

编辑:可以找到我试图解决的问题的详细描述 here .注:这里说的方程1其实就是方程2 here .

最佳答案

关于使用 FVCV 的问题:

根据您的描述,它听起来应该是一个FV。作为解决问题的第一步,我建议您通过切换到 m.options.IMODE=7 来验证您是否正确设置了规范并解决。这将告诉您是否有相同数量的方程和变量以及initializes the model。使参数估计更快。

如果您使用 CV,则使用 m.options.EV_TYPE=2 为您定义平方误差目标函数。如果您将 CV 定义为 Var,也可以使用 m.Minimize()

关于python-3.x - 在 GEKKO 中定义控制变量和目标函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61028331/

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