min int(0,1) x(t).u(t)+u(t)**2
x.dt()= x(t)+u(t), x(0)=1
0 <= u(t) <= t**2+(1-t)**3 for 0<=t<=1
我的第一个问题是如何定义Gekko的控制上限。另外,假设我们想将这个问题与规划期内控制不变的情况进行比较,即u(0)=...=u(t)=...=u(1)
。我们如何定义它
在另一种情况下,如何在不同的子间隔中有固定但未知的控制?例如,在[0,t1]
中,控件应该是固定的,在[t1,t2]
中,控件应该是固定的,但可以不同于[0,t1]
中的控件(例如t1=0.5,t2=1,Tf=t2=1)
如果能研究t1,t2。。。是否也是控制,是否应该确定
以下是解决此问题的代码:
解决方案不是很有趣,因为最佳目标是
u(t)=0
和x(t)=0
。如果添加像x(1)=0.75
这样的最终条件,则解决方案更有趣如果您希望所有的间隔都是一个值,那么我建议您使用
u=m.FV()
类型。当您设置u.STATUS=1
时,u=m.MV()
类型可由优化器在每个时间间隔进行调整。您还可以使用m.options.MV_STEP_HOR=5
作为Gekko中所有MV的全局选项来减少自由度,或者u.MV_STEP_HOR=5
仅为该MV调整自由度。有more information on the different Gekko types您可以使用m.time=[0,…,1]设置最终时间,然后使用time final
tf
缩放它。问题中的导数也需要除以tf
。这里有一个相关的rocket launch problem或Jennings optimal control problem来最小化最终时间。您还可以设置多个时间间隔,然后将它们与m.Connection()
连接相关问题 更多 >
编程相关推荐