作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
需要帮助以在 GEKKO python 中实现以下条件。
对于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 不会影响我的解决方案。
如何在 GEKKO python 中使用它?由于我在 matlab 中有成功的解决方案,但在 Python 中没有实现相同的输出,我认为这是由于这个公差值还是什么?
最佳答案
使用值列表根据时间或位置给出不同的值。
x1 = m.Param([0 if i<15 else 1e-7 for i in range(101)])
使用松弛变量 s
将 effect
的值限制在 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
(目标公差)设置。这是一个例子:
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 examples和 documentation这也有帮助。
关于python - 如何在 GEKKO 中编写条件和公差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69008121/
我是一名优秀的程序员,十分优秀!