gpt4 book ai didi

python - 如何在 GEKKO 中编写条件和公差?

转载 作者:行者123 更新时间:2023-12-05 05:56:48 24 4
gpt4 key购买 nike

需要帮助以在 GEKKO python 中实现以下条件。

  1. 对于Matlab,我有以下条件

    如果 t<15

    x1 = 1e-7;

    否则 x1 = 0;

    结束

对于 python,我将代码编写为

m.time = np.linspace(0,60)
t = m.Var(0)
m.Equation(t.dt()==1)
x1 = m.if2(t-15,1e-7,0)

但这没有用。基本上 x1 是我的输入,我希望 x1 仅可用 15 分钟,之后为 0。请告诉我解决方案。

2.effect=min((0.2x17+0.8x19)/APequil, 1)在 Matlab 中

在 python 中,我使用了以下内容effect=m.min2(((0.2x17+0.8x19)/APequil),1)

请检查是否正常?因为删除 min2 不会影响我的解决方案。

  1. 在matlab中,使用过options=odeset('InitialStep',0.0001,'RelTol',1e-09),

如何在 GEKKO python 中使用它?由于我在 matlab 中有成功的解决方案,但在 Python 中没有实现相同的输出,我认为这是由于这个公差值还是什么?

最佳答案

使用值列表根据时间或位置给出不同的值。

x1 = m.Param([0 if i<15 else 1e-7 for i in range(101)])

使用松弛变量 seffect 的值限制在 1 的上限。这比使用 if2()if3() 函数更有效。

effect = m.Var(ub=1)
s = m.Var(lb=0)
m.Minimize(s)
m.Equation(effect==x1*3e7-s)

公差可以用m.options.RTOL(方程残差公差)和m.options.OTOL(目标公差)设置。这是一个例子:

example problem

import numpy as np
from gekko import GEKKO

m = GEKKO(remote=False)
t = np.linspace(0,100,101); m.time = t
x1 = m.Param([0 if i<15 else 1e-7 for i in range(101)])
effect = m.Var(ub=1)
s = m.Var(lb=0)
m.Minimize(s)
m.Equation(effect==x1*3e7-s)

m.options.IMODE=6
m.options.RTOL = 1e-6
m.options.OTOL = 1e-6
m.solve()

import matplotlib.pyplot as plt
plt.subplot(2,1,1)
plt.plot(t,x1,'k--',label='x1')
plt.legend()
plt.subplot(2,1,2)
plt.plot(t,effect,'r--',label='Effect')
plt.plot(t,s,'b.-',label='Slack')
plt.legend(); plt.xlabel('Time')
plt.show()

additional examplesdocumentation这也有帮助。

关于python - 如何在 GEKKO 中编写条件和公差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69008121/

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