跳转至

pockit: Python Optimal Control KIT.

Pockit 是面向连续时间最优控制与轨迹优化的 Python 工具包。用户使用 SymPy 表达式定义动力学、代价和约束;Pockit 通过 Radau 或 Lobatto 配点完成转录,并向 Ipopt 或 SciPy 提供稀疏导数。

从一个可运行的求解开始

从 conda-forge 创建推荐环境:

conda create -n pockit -c conda-forge pockit-optimal-control matplotlib
conda activate pockit

Conda 包已经包含 Ipopt 和 SciPy 两种后端;额外安装的 matplotlib 用于运行教程 和示例中的绘图代码。如果当前环境无法使用 conda,请改用通过 PyPI 安装双积分器最短时间教程完整展示如何设置模型、构造初始猜测、 求解问题、在密集时间网格上验证结果并绘图。

目标 推荐页面
安装 Pockit 快速安装
构建并验证第一个模型 求解第一个问题
理解转录、配点与离散 NLP 从最优控制到稀疏 NLP
在 Ipopt 与 SciPy 之间选择 优化器选择
定义动力学、边界和目标函数 问题设置
通过事件连接多个阶段 多阶段建模
排查转录精度不足 误差检查与网格调整

跨领域使用同一流程

所有正式维护的案例都采用相同的可组合结构:

system, phase = build_problem()
guess = initial_guess(phase)
solution = solve_problem(system, guess)
figure = plot_solution(solution)

每个案例页面都会说明连续时间模型、单位、端点和路径约束、离散方式, 以及独立的数值检查。文档中的结果来自物理时间上的密集重构,而不是 只依据配点处的数值判断可行性。

按学科浏览案例

正式案例库包含 33 个可运行示例,覆盖 23 个保守划分的应用领域。 导航将其归并为 12 个宽组,下表则保留 23 个领域的完整口径。每个 链接页面都给出背景、方程、单位、约束、假设、适用限制和数值检查。

学科领域 正式案例 主要建模内容
数学与变分问题 最速降线 非线性力学及其与解析摆线的核对
控制理论与数值基准 双积分器LQR超敏感问题 自由时间、Riccati 验证、bang-bang 控制和边界层
机器人 机械臂自由飞行机器人人形机器人 OSC/WBC人形运动重定向平面四旋翼六自由度无人机 耦合运动、任务层级、接触与非冗余姿态坐标
航空航天工程与轨道动力学 地球至金星转移两级火箭火星动力下降 轨道根数、级间事件与受约束着陆制导
行星科学与小天体作业 Bennu 小行星软着陆 固连旋转系近域动力学、表面接近与小推力制导
天文学与精密指向 柔性望远镜转动 输入整形与残余模态抑制
物理海洋学 海洋惯性流 Coriolis 动力学与可控性 Gramian 强迫基准
结构工程 结构振动控制 柔性模态主动阻尼
化学与反应工程 批式反应器反应选择性 运行工况切换与竞争反应路径
交通工程 电动车生态驾驶 道路阶段、限速和能耗时间权衡
流行病学与公共卫生 SIR 疫情干预 非线性传播动力学与医疗容量约束
生物医学工程与神经科学 神经刺激 非线性膜动力学的最小代价兴奋
建筑科学 HVAC 需求管理 蓄热、舒适区和分时电价
能源系统与电力 电池储能套利 转换效率、终端库存和循环代价
药理学 PK 输注 多阶段负荷、效应室延迟与稳态维持
量子物理 二能级状态转移 带解析能流下界的 Bloch 球控制
宏观经济学 Ramsey 增长 消费与投资的跨期分配
量化金融 最优交易执行 持仓风险与临时市场冲击
水资源工程 水库防洪 库容调洪与受约束下游泄流
农业水管理 灌溉调度 根区水量平衡、降雨、渗漏和作物胁迫
生态与资源经济学 渔业生物经济 可再生资源动态与可持续捕捞
通信工程 无线传输 截止时间约束下的注水功率分配
科学机器学习 Neural ODE XOR 带解析分类器核对的连续深度训练

代表性验证结果

核心建模能力

  • 基于多项式状态和控制插值的 Radau、Lobatto 直接配点
  • 具有阶段内动力学和共享静态参数的单阶段、多阶段系统
  • 固定或自由的阶段时间、端点条件、路径约束、事件方程和积分项
  • 符号稀疏一阶、二阶导数,以及可复用的编译函数
  • 面向大型稀疏非线性规划的 Ipopt 和纯 Python 的 SciPy trust-constr
  • 连续时间重构、密集可行性检查,以及初始离散不足时可选的网格更新

相关项目

如果希望使用精简的 C++20 运行时和预生成模型代码,可以了解 naive-planner。其预生成的 C++ 求值代码可显著提升运行时性能。在一项与 Pockit 的对比测试中,运行时间约为 原来的十分之一。实际加速比取决于具体问题、离散方式和求解器设置。该项目结合了 多区间 Legendre-Gauss-Radau(LGR)配点、SymPy 生成的稀疏解析导数和 Ipopt 求解接口。

已知的奇异弧限制

Pockit 目前没有经过验证、能够可靠求解真正奇异弧的流程。求解器 收敛不能单独作为正确性证明。若控制仿射问题可能包含奇异区间, 请先阅读奇异弧:识别方法与当前限制

下一步可完成安装,或直接开始 第一个完整求解