
简介Matlab MPTModel Predictive Control Toolbox工具箱是一套面向科研与工程人员的开源软件包专注于参数优化、计算几何与模型预测控制MPC设计尤其适合需要处理多面体、凸包、Voronoi图等几何对象以及进行线性/非线性、混合系统控制策略开发的中高级用户。本资源为MPT3.2.1稳定版2019年更新共包含约2000个文件压缩包大小13.61MB。文件以m源码、png图片、html帮助文档为主另有mexw64动态库、mdl仿真模型、mat数据文件、pdf说明等覆盖从核心算法、几何工具到Simulink模块的完整体系。附带详尽帮助文档与多个示例便于用户从底层函数调用到上层控制系统构建逐步掌握。目前已有4058人学习下载。通过本资源读者可快速搭建MPT环境结合实例理解MPC控制器设计、约束处理及计算几何应用并在此基础上扩展至数据驱动优化或机器学习与控制结合的自适应场景。 搞控制、做显式MPC、天天跟多面体打交道的人几乎没有不知道MPT的。MPT全称Multi-Parametric Toolbox是Matlab生态里做多参数规划、显式模型预测控制和多面体计算的标杆工具箱。最近我把MPT3.2.1这个2019年发布的稳定版完整配置了一遍它自带帮助文档和十几个现成例子从安装到跑通第一个显式MPC控制器的整个过程就是今天这篇要讲的内容。适合正在做控制算法研究、或者想用显式MPC做实时控制但还没找到顺手工具的人参考也适合只是需要算多面体几何、做约束可行性分析的工程师。1. MPT到底是什么搞控制的人为什么绕不开它1.1 一句话定位多参数规划、计算几何与显式MPCMPT的核心能力可以拆成三块。第一块是多参数规划Multi-Parametric Programming也就是处理一类特殊的优化问题约束条件和目标函数里有参数需要求的是“决策变量随参数变化的显式函数”。第二块是计算几何尤其是凸多面体的求交、凸包、闵可夫斯基和、投影、顶点枚举这些操作。第三块是显式模型预测控制这也是MPT在控制领域最出名的应用——把在线反复求解的QP问题离线算成一张“查表”把状态空间划分成很多凸的临界区域每个区域对应一个分段仿射控制律。很多刚开始接触的人会问Matlab里不是有MPC Toolbox吗为什么还要MPT区别在于MPC Toolbox是通用商业工具箱偏工程部署MPT则偏算法研究尤其是显式MPC、PWA系统、混合整数规划这些偏学术和控制理论的方向。你在论文里看到的那种五颜六色的状态分区图十有八九就是MPT画的。1.2 哪些人最该装这个工具箱我总结下来三类人最离不开MPT。一是做控制理论研究的硕博生。显式MPC是多参数规划最经典的应用场景MPT把从建模、求解到可视化的流程全打通了改改A、B矩阵和约束就能验证新想法。二是做运动规划、路径规划和约束验证的工程师。比如自动驾驶场景里把障碍物膨胀成多面体再算安全走廊或者做可达集计算MPT的Polyhedron类比大部分自写几何库稳定得多。三是想快速评估“我的系统适不适合用显式MPC”的人。搭一个几行代码的模型跑一遍toExplicit看分区数量和求解时间心里就有数了。2. 为什么这次选MPT3.2.1而不是MPT2或更早版本2.1 MPT2和MPT3是两代完全不同的东西很多老教程和硕士论文还在用MPT2但我不建议新项目再碰它。MPT2是2004年前后的架构函数式接口Polytope类封装很粗糙用起来各种不顺。MPT3从2014年发布是一次彻底的面向对象重写核心是Polyhedron类搭配ConvexSet、Function、LTISystem、MPCController这些成体系的类结构。MPT3最关键的改变是深度集成YALMIP。所有优化求解都通过YALMIP统一走不需要自己绑求解器而且各种求解器之间可以切换。底层几何算法也做了大量重构H表示和V表示的切换、冗余约束消除的数值稳定性比MPT2强了一个量级。简单说MPT2能干的活MPT3都能干但代码更清晰、扩展性更强、坑更少。2.2 3.2.1这个版本为什么值得固定下来MPT3的版本演进里3.2.1是2019年的一个稳定更新主要修了一批跟新版Matlab的兼容性问题尤其是R2018、R2019里函数废弃带来的报错。它自带完整的doc帮助文档和demos示例目录解压即用不依赖网络非常适合实验室离线环境。我给新机器装MPT时基本固定在这一版。它官方声明支持R2014b及以上但我实测R2018b、R2020a、R2023a都能正常跑核心功能。相比那些还在更新的开发版3.2.1胜在“稳”社区里遇到问题也容易搜到解决方案相比MPT2又是全新的架构。所以无论对新手还是老手3.2.1都是当前最值得落地的版本。3. 安装与配置从零到跑通第一个demo3.1 准备工作YALMIP必须装好安装MPT3.2.1之前有两个前置条件一定要检查。第一是YALMIP这个是硬依赖MPT3内部的多面体计算和多参数规划全要调YALMIP没有它就等于汽车没装发动机。第二是Matlab的Optimization Toolbox提供linprog和quadprog作为默认的低层求解器。如果你有MOSEK或Gurobi许可证可以一并把路径加进MatlabMPT3会优先用商业求解器遇到大批量分区计算时速度快很多。我建议顺序永远是先装YALMIP确认yalmip(clear)或者简单的sdpvar赋值测试通过再装MPT。顺序反了容易出现路径覆盖问题排查起来很头疼。3.2 三步完成MPT3.2.1安装第一步把压缩包解压到一个纯英文、不带空格的目录例如D:\mpt3-3.2.1。这一步看起来不起眼但特别重要。MPT内部大量使用相对路径拼接Windows下中文路径会导致demos和doc目录加载失败甚至连类都定义不了报错信息还很隐晦。第二步在Matlab命令行cd到解压根目录直接输入mpt3运行安装脚本。脚本会自动检测依赖、配置路径、把mpt3源代码和demos目录加入Matlab path。安装过程中如果提示选择LP solver默认选linprog就行。第三步运行mpt_init验证配置。正常的话会提示MPT初始化完成。然后试着输入mpt_demo这个是MTP自带的示例菜单能看到一组demo脚本列表能弹出来基本就说明安装成功了。3.3 第一个验证demo画一个多面体安装完成最快验证方式就是画图P Polyhedron(lb, [-1; -1], ub, [1; 1]); P.plot();能画出一个正方形说明核心没问题。再试一个更复杂的:Q Polyhedron(V, [0 0; 1 0; 0.5 1]); R P.intersect(Q); figure; P.plot(color, b); hold on; R.plot(color, r);能画出蓝色正方形和红色交集区域说明几何计算和可视化链路全通了。这一步务必跑通后面显式MPC的分区图、临界域显示全依赖这块基础能力。4. 核心功能拆解从多面体操作到显式MPC全流程4.1 Polyhedron类的常用操作直接收藏MPT3里Polyhedron是最常用的类同时管理H表示不等式Ax≤b和V表示顶点。我整理了一份高频操作表方法作用典型用法intersect多面体求交P.intersect(Q)闵可夫斯基和P Qprojection向指定维度投影P.projection(1)contains判断点是否在集合内P.contains([0;0])minHRep消除冗余约束P.minHRep()convexHull计算凸包P.convexHull(Q)注意事项闵可夫斯基和计算代价很高维度一高、顶点一多耗时指数上升。我实测超过5维的多面体做Minkowski sum就很吃力建议运算前先调用minHRep把冗余约束删掉能省非常多时间。另外contains方法有数值容差问题点刚好在边界上时可能误判用到边界判定时记得留一定余量。4.2 显式MPC完整流程双积分器从建模到仿真以一个经典双积分器为例离散模型A[1 1;0 1]、B[0.5;1]状态约束和输入约束都加上设计预测时域N5的显式MPCA [1 1; 0 1]; B [0.5; 1]; sys LTISystem(A, A, B, B); sys.x.min [-5; -5]; sys.x.max [5; 5]; sys.u.min -1; sys.u.max 1; sys.x.penalty QuadFunction(eye(2)); sys.u.penalty QuadFunction(0.1); N 5; mpc MPCController(sys, N); empc mpc.toExplicit();MPCController负责在线优化toExplicit内部调用YALMIP的solvemp做多参数QP把所有临界区域和对应的分段仿射控制律一次算完。之后执行empc.plot()就能看到状态空间被划分成若干凸区域每个区域一种颜色代表不同的反馈增益。闭环仿真同样简洁loop ClosedLoop(empc, sys); x0 [-4; 2]; data loop.simulate(x0, 20); figure; data.plot();轨迹从初始点逐步收敛到原点控制量全程没有越界。把在线MPC和显式MPC的解对比理论上完全一致但显式MPC单步决策从毫秒级降到微秒级这就是它的核心价值——适合采样周期极短、硬件算力有限的嵌入式场景。注意显式MPC的分区数量随预测时域N增大而近似指数增长。双积分器N5可能只有几十个区域N10就可能上百甚至更多。工程上一律从N3或N5起步跑通再逐步加大不要一上来就把N设得很大。5. 自带帮助文档和examples怎么用才能少走弯路5.1 目录结构先搞清楚MPT3.2.1解压后核心目录有demos、doc、mpt3、utils。demos里是大量示例脚本命名非常直白比如demo_polyhedron_operations、demo_mpc_explicit、demo_parametric_programming。doc目录是生成好的HTML帮助文档按“几何计算”“显式MPC”“多参数规划”等主题分类浏览器打开就能全文检索比Matlab的help命令好用得多。很多新手装完只看README忽略了doc和demos这等于抱着金矿挖土。官方帮助文档里连Polyhedron每个方法的输入输出、数值容差参数都有说明排查问题时比到处搜帖子有效。5.2 推荐一条刷example的路线我的建议是三条demo按顺序刷第一demo_polyhedron_operations把Polyhedron所有操作过一遍重点理解H表示、V表示、minHRep和intersect这是所有几何计算的底子。第二demo_parametric_programming看solvemp怎么输出临界区域理解“参数空间被划分”这个概念。第三demo_mpc_explicit完整走一遍从建模到闭环仿真的流程。这三条刷完你基本就能改自己的系统了。千万别一上来就看混合整数MPC那类复杂例子那些是给特定研究问题准备的新手容易被劝退。官方example最大的价值不是让你抄代码而是展示“问题建模—优化求解—结果可视化”三段式框架你改项目时只需要换A、B、约束和代价矩阵骨架完全不用动。5.3 一个我常用的显式MPC模板实际项目里反复手写建模太累我把常用流程封装成函数新项目直接改参数function empc make_explicit_mpc(A, B, xmin, xmax, umin, umax, Q, R, N) sys LTISystem(A, A, B, B); sys.x.min xmin; sys.x.max xmax; sys.u.min umin; sys.u.max umax; sys.x.penalty QuadFunction(Q); sys.u.penalty QuadFunction(R); mpc MPCController(sys, N); empc mpc.toExplicit(); end调用时只要传入系统矩阵、边界和权重返回的就是一个可直接plot、可仿真的显式控制器。批量做参数扫描时这个模板能省下大量重复代码也方便对比不同Q、R、N下的分区数和性能。6. 常见问题与排查技巧6.1 安装阶段最容易踩的坑安装阶段的坑集中在路径和依赖上。运行mpt3.m报错找不到函数或路径大概率是没在解压根目录运行或者目录含中文、空格。YALMIP missing的报错则说明没装YALMIP或没加进path。这两个问题每天都有新人遇到解决起来就是重新解压、重新加路径但排查要花不少时间。还有一类情况是机器上装了多个Matlab版本MPT3的路径配到了旧版新版里运行还是找不到。解决办法是在当前使用的Matlab版本里重新跑一遍mpt3别指望跨版本共享配置。6.2 求解阶段处理分区爆炸和数值退化toExplicit()转显式时特别慢十有八九是预测时域太大导致分区爆炸。这不是bug是显式MPC的固有计算瓶颈。前期探索阶段建议把N控制在10以内等方案定型了再考虑是否需要更大时域。如果系统状态维度大于5显式MPC基本就不现实了直接走在线MPC更务实。多面体计算出现NaN或“The given polytope is not full-dimensional”的报错说明约束系统产生了退化比如所有不等式交集是一条线。先用minHRep看看是不是有冗余约束再检查是否有矛盾的上下界。数值上可以给约束边界放宽一个极小epsilon避免边界恰好相切。6.3 新版Matlab兼容性问题在R2022b以上版本MPT3.2.1有些老接口会触发弃用警告个别情况下GUI相关功能显示异常。但核心计算基本不受影响把这些警告忽略即可。如果真有函数用不了最省事的做法是装一个R2019b到R2021a之间的版本专门跑重型计算这是社区里验证过最稳的区间。现象可能原因处理办法mpt3运行报错路径含中文/空格解压到纯英文路径YALMIP missing依赖未安装先装YALMIP再装MPT多面体计算结果NaN约束退化minHRep并加epsilontoExplicit极慢预测时域过大减小N后期再扩分区图只有线不填充OpenGL渲染问题set(gcf,Renderer,painters)最后分享一个我自己的教训MPT这类依赖链比较长的工具箱最怕的就是版本错配。我连续两次在新机器上重装时因为YALMIP版本太新导致MPT3内部某个接口行为变化排查了大半天。后来养成一个习惯任何涉及MPT的项目在README第一行写清三件事Matlab版本、YALMIP版本、MPT版本。新机器clone下来照着装十分钟跑通再没出过幺蛾子。你如果也准备长期用MPT这个习惯建议尽早养成。本文还有配套的精品资源点击获取