pockit: Python Optimal Control KIT.¶
Pockit 是面向连续时间最优控制与轨迹优化的 Python 工具包。用户使用 SymPy 表达式定义动力学、代价和约束;Pockit 通过 Radau 或 Lobatto 配点完成转录,并向 Ipopt 或 SciPy 提供稀疏导数。
从一个可运行的求解开始¶
从 conda-forge 创建推荐环境:
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 目前没有经过验证、能够可靠求解真正奇异弧的流程。求解器 收敛不能单独作为正确性证明。若控制仿射问题可能包含奇异区间, 请先阅读奇异弧:识别方法与当前限制。


