快速最优控制套件

rockit-meco的Python项目详细描述


摇滚乐

pipeline statuscoverage reporthtml docspdf docs

说明

Rockit logo

Rockit(快速最优控制工具包)是一个软件框架,用于快速原型化工程中可能出现的最优控制问题(也称为动态优化): 迭代学习(ILC)、模型预测控制(NMPC)、运动规划。

值得注意的是,该软件允许自由结束时间问题和多阶段优化问题。 该软件目前主要集中在直接方法和CasADi上的relieas。 这个软件是由KU Leuven MECO research team开发的。

安装

使用pip安装:pip install rockit-meco

你好世界

(取自example gallery

您可以在浏览器中实时试用:Binder

导入项目:

fromrockitimport*

启动时间范围为10秒的最佳控制环境(可用FreeTime(initial_guess)配置空闲时间问题)。

ocp=Ocp(T=10)

定义两个标量状态(也支持向量和矩阵):

x1=ocp.state()x2=ocp.state()

定义分段常量控制输入(分段线性使用order=1):

u=ocp.control()

为状态指定微分方程(时间依赖性支持ocp.t,DAE也支持ocp.algebraicadd_alg):

ocp.set_der(x1,(1-x2**2)*x1-x2+u)ocp.set_der(x2,x1)

拉格朗日目标项

ocp.add_objective(ocp.integral(x1**2+x2**2+u**2))
ocp.add_objective(ocp.at_tf(x1**2))

路径约束(必须在从t0tf=t0+T的整个时间域上有效,可用的网格选项):

ocp.subject_to(x1>=-0.25)ocp.subject_to(-1<=(u<=1))

边界约束:

ocp.subject_to(ocp.at_t0(x1)==0)ocp.subject_to(ocp.at_t0(x2)==1)

选择NLP解算器后端(casadinlpsol插件):

ocp.solver('ipopt')

选择解决方法: n——控制间隔数 m—每个控制间隔的积分步数

method=MultipleShooting(N=10,M=2,intg='rk')#method = DirectCollocation(N=10, M=2)ocp.method(method)

求解:

sol=ocp.solve()

显示结构:

ocp.spy()

Structure of optimization problem

后处理:

tsa, x1a = sol.sample(x1, grid='control')
tsb, x1b = sol.sample(x1, grid='integrator')
tsc, x1c = sol.sample(x1, grid='integrator', refine=100)
plot(tsa, x1a, '-')
plot(tsb, x1b, 'o')
plot(tsc, x1c, '.')

Solution trajectory of states

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用CSPRNG中的序列种子PRNG安全吗?   java如何使JTable列大小与内容精确(或紧密)匹配?   java Android textview具有两种不同大小的文本   java在任意事物的列表(数组)中创建关联的最佳方法是什么?   java保存可扩展字符串?   java成员类(内部类)如何访问外部类的实例变量?   java使用Android 6.0(API级别23)使用rest的最佳方式是什么   java为什么我会收到“学习记录”。Student@25a43blb'尝试显示链接列表中的所有对象时?   java如何将SVG文本转换为SVG路径?   java Paypal返回URL参数支付状态   java Libgdx:导出到可运行Jar   java JPA获取连接实体的最小/最大属性   附加到类型变量的java编号?   java Object[]到底是什么?   java如何在安卓中的片段和活动之间共享数据   java使用MinGW为windows构建linux库   java将变量值传递给eval函数   java仅在转换完成时使方法返回   Java二维数组对角线