% MPT Multi-Parametric Toolbox % Version 2.6.2 05-Dec-2006 % % Authors: Michal Kvasnica, Pascal Grieder, Mato Baotic % kvasnica@control.ee.ethz.ch, grieder@control.ee.ethz.ch, baotic@control.ee.ethz.ch % % For support, write to: mpt@control.ee.ethz.ch Version 2.6.2 (05-Dec-2006) -------------------------- [NEW] included latest release of YALMIP [NEW] Massive speedup of the mpQP algorithm especially for large dimensions [NEW] Included a mex version of polytope/isinside.m [NEW] mpt_mpsol2ctrl: convert YALMIP solution into an MPTCTRL object [NEW] speed improvements especially when solving mpMILP/mpMIQP problems [NEW] new function polytope/grid [PATCH] fixed mpt_solveMILP and mpt_solveMIQP when CPLEX is used and options.verbose=-1 [PATCH] mpt_mplp: properly handle F*x terms in cost [PATCH] mpt_simplify: properly reject/accept controllers with overlaps [PATCH] mpt_sys: fixed an undefined variable [PATCH] simulink interface: improved detection of tracking controllers [PATCH] Bug 13: improve qhull numerical robustness in matlab R14 and newer [PATCH] Bug 28: mpt_mplp: improved detection of infeasible cases [PATCH] Bug 30: Open-loop solution had wrong number of elements [PATCH] Bug 37: improved mpt_verify() [PATCH] Bug 38: use ctrl.details.x0format instead of ctrl.details.dims [PATCH] Bug 39: Greedy merging failed for 1D polytopes [PATCH] Bug 41: tracking=1 fails for on-line MPC for MLD systems [PATCH] Bug 43: fprintf(0, ...) throws an error in R2006b (affects SeDuMi) [PATCH] Bug 46: isinvariant/isstabilizable was broken in MPT 2.6.1 [PATCH] Bug 47: suppress annoying warnings when using quadprog [PATCH] Bug 50: make optimal merging more numerically robust [PATCH] Bug 51: mpQP fails to find an initial feasible point [PATCH] Bug 54: Better detection of the MATLAB release number [PATCH] Bug 56: Complex referencing of polytopes/polyarrays fails [PATCH] Bug 57: Automatically symmetrize the H matrix in mpt_mpqp [PATCH] Bug 60: Speedup of polytope/subsref [PATCH] Bug 61: Indexing of polyarrays by logicals now works [PATCH] Bug 64: polytope/uminus didn't update bounding box [PATCH] Bug 67: polytope/isinside: auto-switch to fastbreak=1 if nargout < 2 Version 2.6.1 (17-May-2006) -------------------------- [NEW] included latest release of YALMIP. note that YALMIP changed its directory structure and you need to adjust your Matlab path accordingly!! [PATCH] consistent use of deltaU formulation. if probStruct.tracking=1 is used with LTI or PWA systems, MPT now always goes for deltaU formulation [PATCH] fixed a performance regression in on-line control of LTI systems [PATCH] fixed loading of saved controllers for nonlinear systems [PATCH] C-code obtained by mpt_exportST() now uses single-precision numbers instead of double-precision [PATCH] mpt_mplp, mpt_mpqp now accept sparse matrices [PATCH] fixed problems with MOSEK on mixed-integer problems [PATCH] fixed passing of optional arguments to the HYSDEL compiler Version 2.6 (30-Mar-2006) ------------------------- [NEW] "Design your own MPC" function. see 'help mpt_ownmpc' for details [NEW] on-line MPC for nonlinear and piecewise nonlinear systems (see 'help mpt_nonlinfcn') [NEW] support for soft constraints (see 'help mpt_yalmipcftoc' for details) [NEW] support for move blocking for PWA/MLD systems (see 'help mpt_yalmipcftoc' for details) [NEW] support for multi-model dynamics (see 'help mpt_yalmipcftoc' for details) [NEW] support for terminal state constraints defined in "probStruct.xN" (see 'help mpt_yalmipcftoc' for details) [NEW] export search tree into C-code (see 'help mpt_exportST' for details) [NEW] mpt_lyapunov now allows to analyze stability of autonomous systems where the input argument to mpt_lyapunov() is a system structure [NEW] new function to display detailed information about a given explicit controller (see 'help mptctrl/info' for details) [NEW] output constraints are no longer mandatory and are not required if state constraints are defined [NEW] mpt_plotTimeTrajectory/simplot: allow to disable displaying of legends (see 'help mpt_plotTimeTrajectory' for details) [NEW] included latest version of MEXCLP [NEW] polytope/plot: now supports Options.elevate to enable "elevation" of plotted polytopes (see 'help polytope/plot' for details) [PATCH] mpt_computePWATset: include state constraints if they are given [PATCH] mpt_lyapunov: fix crashes when no lyapunov function was found [PATCH] mpt_mplp, mpt_mpqp: speedup [PATCH] mpt_mpqp: give warning when the problem is not strictly positive definite [PATCH] polytope/projection: add protection against cycling [PATCH] mpt_getInput: give a warning if x0 violates constraints [PATCH] mpt_init: added better detection of path Version 2.5 (23-Nov-2005) ------------------------- [NEW] Hybrid Identification Toolbox included [NEW] Ellipsoidal Toolbox now included [NEW] latest version of YALMIP included [NEW] mpMILP and mpMIQP solvers [NEW] optimal control of PWA systems with quadratic objective function [NEW] support for lower-dimensional noise polytopes [NEW] mex files for the GLNXA64 platform (64-bit linux for AMD processors) [NEW] mpt_sysStructInfo can now display textual information about a given system when called with no output arguments [NEW] mptctrl: allow to evaluate the control law for state x0 more easily by 'ctrl(x0)' [NEW] new function for simulations of closed-loop systems: mptctrl/sim, mptctrl/simplot [NEW] mptctrl/get, mptctrl/set: set/get methods for MPTCTRL objects [NEW] mptctrl/modify: modify a controller in certain way (e.g. remove certain regions) [NEW] mpt_buildAdjacency: computes which regions are adjacent [NEW] mpt_norm2pwa: converts a norm to a PWA function [NEW] mpt_maxCtrlSet: allow to break computation of Kinf sets based on volume increase (Options.Vconverge) [NEW] mpt_maxCtrlSet: make mpt_maxCtrlSet() return sets obtained at each iteration [NEW] mpt_maxCtrlSet: allow to call mpt_maxCtrlSet with custom problem-dependent parameters (Options.probStruct) [NEW] mpt_computeTrajectory: now allows to specify arbitrary system which will be used for simulations (Options.sysStruct, Options.sysHandle) [NEW] mpt_sys: do not generate HYSDEL simulator if user tells so (mpt_sys('hysdelfile.hys', 'nosimulator')) [NEW] mpt_options: allow to return individual settings [NEW] recompiled mex files on linux (issue157) [NEW] mpt_voronoi: sort voronoi cells according to seed points [NEW] mpt_iterativePWA: allow to specify which Lyapunov function to compute (Options.lyapunov_type={'any', 'pwq', 'pwa', 'none'}) [NEW] mpt_plotPWA, mpt_plotPWQ: allow color of edges to be specified (Options.edgecolor) [NEW] mpt_plotPWA, mpt_plotPWQ: allow to specify level of transparency (Options.shade) [NEW] unitbox: unitbox(n) now produces the same output as unitbox(n, 1) [NEW] mpt_getInput: allow to use a "recovery" mode (Options.recover=1) [NEW] mpt_voronoi: allow to pass a "bounding polytope" when computing voronoi cells (Options.pbound) [NEW] polytope/distribpoints: distribure points in a polytope [NEW] polytope/dointersect: return indicies of intersecting regions [NEW] polytope/facetcircle: now allows to pass a vector of facets to explore [NEW] polytope/facetvoronoi: Computes an equivalent of voronoi diagrams for facets of a polytope [NEW] polytope/getInnerEllipsoid, polytope/getOutterEllipsoid: now return ellipsoid objects [NEW] polytope/minus: allow to simplify minkowski difference representation by merging (Options.merge) [NEW] polytope/pelemfun: execute arbitrary functions on each element of a polyarray [NEW] polytope/plot: allow colormap to be specified for polytope plots (Options.colormap) [NEW] polytope/plot: allow gradient coloring (Options.gradcolor=1) [NEW] polytope/projection: can now solve projection by mplp (Options.projection=7) [NEW] polytope/unique: remove redundant entries of a polytope array [PATCH] polytope/bounding_box: allows to return all vertices of a bounding box [PATCH] polytope/bounding_box: change behavior with Options.noPolyOutput [PATCH] polytope/extreme, hull: allow rounding to increase numerical robustness for CDD (Options.roundat) [PATCH] polytope/facetcircle: properly normalize vectors of normals [PATCH] polytope/minus, polytope/plus: treat polytope arrays as a union of polytopes, not as single polytopes [PATCH] polytope/mtimes: allow scaling even when origin is not included [PATCH] polytope/projection: fix problems with fourier-motzkin C-implementation [PATCH] polytope/projection: fix handling of dimensions which are not sorted [PATCH] polytope/reduce: always return correct keptrows [PATCH] polytope/reduce: preserve order of hyperplanes [PATCH] polytope/regiondiff: fix problems with Options.infbox being too large [PATCH] polytope/triangulate: properly update extreme points [PATCH] polytope/triangulate: do not return volume as a complex number [PATCH] polytope/volume: do not return volume as a complex number [PATCH] mpt_computeTrajectory: fixed computation of closed-loop cost for systems with deltaU constraints [PATCH] mpt_exportc: allows to specify name of output file [PATCH] mpt_getInput: don't check regions twice [PATCH] mpt_infsetPWA: properly detect cases where invariant set is empty [PATCH] mpt_invariantSet: speed improvements [PATCH] mpt_invariantSet: allow to simplify intermediate steps using greedy merging [PATCH] mpt_init: improve speed [PATCH] mpt_mplp: fix problems with cycling [PATCH] mpt_mplp: fix random perturbations for 1D systems [PATCH] mpt_mplp: fix problems with "xBeyond violates more than one bounds" [PATCH] mpt_mpqp: improved handling of degeneracies [PATCH] mpt_optControlPWA: fixed handling of 1D systems [PATCH] mpt_optControlPWA: always return Pfinal as a polytope array [PATCH] mpt_plotPWA, mpt_plotPartition, mpt_plotU: respect user's choice of subplots [PATCH] mpt_plotU: fixed handling of 1D systems with multiple inputs [PATCH] mpt_solveQP: properly impose equality constraints for NAG QP solver [PATCH] mpt_voronoi: make mpt_mplp() silent Version 2.0.4 (16-Sep-2005) --------------------------- [PATCH] fix computation of extreme points for cyclic polytopes [PATCH] mpt_iterativePWA: allow user-defined target sets even if no dynamics contains the origin [PATCH] remove ghost legends in mpt_plotTimeTrajectory [PATCH] YALMIP updated to R20050915 Version 2.0.3 (05-Sep-2005) --------------------------- [NEW] mpt_solveLP: unified "exitflag" output [NEW] polytope/facetvoronoi - computes some kind of "voronoi cells" for facets of a polytope [NEW] mpt_invariantSet: another major speedup [NEW] polytope/isconvex - decides if a polyarray forms a convex union [NEW] major speedup of polytope/union by calling isconvex() [NEW] mpt_evalPWA - evaluates a PWA function at a given location [NEW] mpt_solveLP: now allows to specify bounds on variables [issue136] [PATCH] polytope/isbounded is now less sensitive to numerical problems (by Miroslav Baric) [issue141, issue142] [PATCH] polytope/regiondiff now exits quickly if input polytope is not fully dimensional [issue145] [PATCH] fixed conversion of MLD systems with boolean states to PWA form [issue127, issue140] [PATCH] polytope/facetcircle is now more numerically robust [issue138] [PATCH] better handling of empty regions in mpt_mplp (by Miroslav Baric) [PATCH] hull.m: use unreduced (H,K) pair when checking hull correctness (by Mario Vasak) [PATCH] mpt_sysStructInfo now propely detect intersections of dynamics in X-space [issue146] [PATCH] polytope/plot - minor updates by Frank J. Christophersen [PATCH] enforce deltaU constraints in closed-loop in on-line MPC for hybrid systems [PATCH] mpt_sys: properly handle cases where both Ts and 'nopwa' flag are given [PATCH] include constraints on final states when solving an on-line MPC for hybrid systems [PATCH] fixed issue with GLPKMEX giving different results on subsequent runs [PATCH] polytope/envelope - if envelope is R^n, keep dimension of input polytope [PATCH] check if probStruct.Rdu is positive definite (for 2-norm) [PATCH] mpt_solveLP - use e04naf()'s syntax for equality constraints [issue141] [PATCH] calculate correct output for PWA/MLD systems with guards on U [PATCH] renamed mpt_ss2mld to mpt_pwa2hys [PATCH] use mpt_pwa2mld() when converting from PWA to MLD Version 2.0.2 (25-Jul-2005) --------------------------- [NEW] mpt_init can now permanently save list of available solvers, such that consequent runs of mpt_init are performed much faster. to utilize the new feature, call: mpt_init('save') if you want to set some default options, e.g. if you want to use CDD as default LP solver and change value of absolute tolerance to 1e-8, call: mpt_init('lpsolver', 'cdd', 'abs_tol', 1e-8, 'save'); Note! if you install some new solvers _after_ you save the settings, this change will not be reflected by MPT. in order to tell MPT to find your new solver, call: mpt_init('rehash') [NEW] polytope/slice.m - orthogonal cuts through polytope(s) [NEW] mpt_mldsim - simulates an MLD system for one time step. can be used from mpt_simSys if Options.usemldsim is set to true [NEW] mpt_sys now accepts a combination mpt_sys(S, 'nopwa') - i.e. it can be used to create a sysStruct structure based on MLD matrices stored in "S" without translation to equivalent PWA representation [NEW] mpt_pwa2mld - converts a PWA system into MLD representation by assigning 1 boolean variable per region [NEW] 2 new mpLP solvers - mpt_mplp_ver6, mpt_mplp_ver7 [NEW] major speedup of Lyapunov functions computation by exploting transtions map [NEW] major speedup of invariant set computation by exploiting transitions map [NEW] use bounding boxes for fast detection of intersections of polytopes (also used in eq.m, le.m and lt.m) [NEW] allow to pass guess of feasible solution to MILP/MIQP solvers [NEW] allow penalties on "z" and "d" variables in on-line MPC for MLD systems (probStruct.Qz, probStruct.Qd) [NEW] support terminal set constraints (probStruct.Tset) for on-line MPC for MLD systems [NEW] mpt_plotLyapunov - plots a Lyapunov function stored in controller objects [NEW] store matrices of MPC problem for MLD systems directly in controller object [NEW] mpt_transmap - computes transition maps [NEW] assign modified polytope object in caller's workspace in extreme.m [NEW] assign modified controller object in caller's workspace in mpt_lyapunov.m, mpt_invariantSet, mpt_searchTree [NEW] mpt_verify now allows to solve a verification problem using a feasibility test (see "help mpt_verify", Options.usereachsets) [PATCH] hull.m - improved analytical computation for dimensions above 3 by Mario Vasak [PATCH] use proper solver for 1/Inf-norm problems for LTI systems with uncertainties [PATCH] properly close progress bar in hys2pwa.m [PATCH] merge.m now allows to use optimal merging (by Tobias Geyer) [PATCH] mpt_optMerge, mpt_optMergeDivCon - documentation update [PATCH] allow to pass initial guess of xopt and return full optimizers [PATCH] vectorize code to improve set-up speed when looking for PWP Lyapunov functions [PATCH] use sparse matrices when constructing MPC problem for MLD systems [PATCH] handle hard final state constraints in on-line MPC problems for MLD systems (probStruct.xN) [PATCH] allow time-varying penalties for on-line MPC controllers for MLD systems [PATCH] do not reduce constraints in on-line MPC for LTI systems (leads to significant speedup) [PATCH] support permament saving of options in mpt_init [PATCH] compute proper mapping in domain.m if horizon > 1 [PATCH] fixed propblem with persistent variables, which caused craches if 2 or more PWA2MLD translations are performed after each other [PATCH] fixed a problem where information about bounding boxes has been lost if a polytope object was loaded from disk [PATCH] must faster setup of MILP/MIQP problems for solvers interfaced by YALMIP [PATCH] automatically switch to fastest LP solver in mpt_getPWALyapFct (significant speedup) [PATCH] fixed problems which caused annoying warnings under Matlab R12.1 [PATCH] handle time-varying penalty on outputs in explicit solution for LTI systems [PATCH] feasibility flag in mpt_solveMPC was not set properly for 1- and Inf-norm problems Version 2.0.1 (28-Apr-2005) --------------------------- [new] included latest release of YALMIP which fixes some issues with MILP/MIQP and sum-of-squares computation [new] added support for CPLEXMEX and BPMPDMEX solvers [new] added an alternative method to compute LQR gain for linear systems. from this point on it is no longer necessary to have the Control Toolbox installed in order to solve 2-norm problems [fix] fixed stupid error which caused "mpt_sys()" to break when processing HYSDEL models which contain only continuous inputs [fix] fixed computation of value of the objective function for certain QP solvers [fix] the reachability computation function "mpt_reachXU()" now allows to specify non-square matrix "A". Version 2.0 final (13-Apr-2005) ------------------------------- [new] export of explicit controllers to standalone C-code (see 'help mpt_exportc' and 'edit mpt_example.c') [new] updated Simulink library which allows to compile the controller block using Real-Time Workshop [new] new block in Simulink library - 'In Polytope' - returns a boolean flag if a given point is inside of a given polytope [new] verification of hybrid systems (see 'help mpt_verify', 'verifdemo1' and 'verifdemo2' [new] improved reachability analysis (see 'help mpt_reachSets', 'reachdemo1' and 'reachdemo2') [new] computation of Common Sum of Squares Lyapunov functions (see 'help mpt_lyapunov') [new] mpt_solveMIQP and mpt_solveMILP now support CPLEX 8 [new] included latest release of YALMIP [new] included Solaris mex files of SeDuMi 1.05 [new] allow piecewise penalties on final states to be used for CFTOC of PWA systems [fix] improved compatibility of MPT studio with Matlab R12 [fix] improved error checks Version 2.0PR (24-Feb-2005) --------------------------- [new] graphical user interface. run 'mpt_studio' to start it. [new] global options can now be set using setup gui - run 'mpt_setup'. [new] solution to on-line MPC problems where the optimization problem is solved at every time step. supports linear systems, linear systems with boolean/integer inputs and hybrid systems modeled with HYSDEL [new] improved Simulink interface [new] models of dynamical system can now be imported either from HYSDEL or from SS (state-space), TF (transfer-function), IDSS (system identification toolbox) and MPC (MPC toolbox) objects [new] mpt_control now returns an instance of MPTCTRL object, which is a newly introduced class to replace the ctrlStruct structures. all functions now accept both the mptctrl object, as well as the ctrlStruct structures as inputs, such that backwards compatibility is preserved [new] analyze.m - analyzes a given explicit controller and suggests which improvements can be made to the controller. call it by "analyze(controller)" [new] mpt_lyapunov - interface function for computation of Lyapunov functions [new] mpt_invariantSet - calculates an invariant subset of an explicit controller [new] new option for tracking - probStruct.tracking=2 yields a tracking controller without delta U formulation (i.e. without introducing additional states). note, however, that convergence towards a given reference cannot be guaranteed with this approach, in general [new] very fast conversion from an MLD (mixed logical-dynamical) representation to an equivalent PWA (piecewise-affine) form. [new] state constraints can now be used. just define them in sysStruct.xmin and sysStruct.xmax Polytope library: [new] computation of an analytic center of a polytope (analyticCenter.m) [new] computation of a distance of two polytopes (distance.m) [new] speedup in calculation of convex union of high-dimensional polytopes Miscelaneous: [new] included latest release of YALMIP [new] support for CLP solvers, a free LP and QP solver. mex interface included [new] mpt_isPWAbigger calculates if one PWA function dominates another PWA function [new] mpt_removeOverlaps can now be used on polytope arrays if called as: P = mpt_removeOverlaps(Pn) [new] improved verification of results in mpt_getPWQLyapFct if the LMI solver reports numerical problems Notable bug fixes: [fix] affine terms have always been assumed to be zero in mpt_getPWQLyapFct [fix] mpt_infsetPWA often stalled when applied to higher-dimensional partitions. this is now solved by using a different method to compute convex unions. [fix] added more verification on user inut [fix] output tracking no longer produces an error in mpt_computeTrajectory (http://autsun04.ee.ethz.ch:8080/mpt/issue98) Version 2.0TR (13-Dec-2004) --------------------------- IMPORTANT NOTE: probStruct.y0bounds is now set to 1 by default!!! this means that constraints are enforced on y(0) as well ( before only on y(1)..y(N) ). this may change the look of your solution, feasible space will also be smaller. costraints satisfaction and stability guarantees (if available) are still provided. [new] mpt_reachSets - computes sets of states wich are reachable from some initial conditions in given number of steps [new] mpt_optControlPWA is used for computing CFTOC solutions for LTI systems with linear cost functions (the procedure uses a dynamic programming approach with piecewise-affine cost-to-go expression which is much faster than the one-step solution with mpt_optControl) [new] dointersect - returns true if two polytopes / polyarrays intersect [new] state vector is automatically augmented if deltaU constraints are present to guarantee fulfilment of these constraints in closed-loop [new] support for XPress, Mosek, OOQP, bintprog solvers [new] mpt_solveMILP / mpt_solveMIQP - interfaces to various MILP and MIQP solvers (CPLEX9, glpk, YALMIP's branch & bound) [new] mpt_solveMPC can now handle LTI systems with boolean/integer inputs [new] added support for CPLEX9 as an LP/QP/MILP/MIQP solver (interfaced with cplexint) [new] cplexint mex interface for CPLEX9 included in distribution (only windows version at this point) [new] mpt_solveLP, mpt_solveLPi and mpt_solveQP can use the new "rescue" mode in which the problem is re-solved with a different solver if the intitial solver fails to give an optimal solution [issue87] [new] mptOptions.rescueLP and mptOptions.rescueQP can be enabled in mpt_init to enable the "rescue" mode in mpt_solveLP and mpt_solveQP [new] mpt_init tries to solve a test problem for all solvers which are found on a particular computer. originally we were only testing if the interface file exists [new] chebyball, chebyball_f, facetcircle, mpt_removeOverlaps and mpt_searchTree use the "rescue" mode when solving chebyshev's LP [issue87] [new] mpt_solveLP and mpt_solveLPi use NAG's e04naf as LP solver if NAG is the default solver (before we used e04mbf, which is a tick slower and also les reliable (tested on [issue79])) [new] chebyball_f.m uses initial guess for x0 by default [issue79] [new] included optimal merging routines by Tobias Geyer [new] included espresso binaries for windows and linux in the distro [new] mpt_simplify can now use optimal merging if called with appropriate flag (see help file for more info) [new] mpt_plotPartition: use standard coloring scheme for solutions simplified by mpt_simplify() [new] optimset('LargeScale','off') added to calls to linprog() in mpt_solveLP and mpt_solveLPi - this makes the solver work more reliable on our test cases [new] mpt_solverInfo converts textual description of a solver to it's numerical code and vice versa (used by mpt_init, mpt_getOptions, mpt_setOptions) [new] sysStruct.xlabels renamed to sysStruct.StateName sysStruct.ulabels renamed to sysStruct.InputName sysStruct.ylabels renamed to sysStruct.OutputName [new] dupicate data (information about value function and hard bounds) are now removed from ctrlStruct.details [new] Options.display changed to Options.verbose [new] YALMIP 3 included and fully supported [new] mpt_simplify.m reduces complexity of explicit controller by merging regions which have the same control law. try mpt_simplify(ctrlStruct) currently returns an error if controller parititon contains overlaps, but there is an option to make it work even in this case (but the saving is too small, that's why i disabled it) [new] @polytope/merge.m for merging of polytopes into larger chunks. merging can either be greedy or optimal (requires espresso solver) [new] new mpLP solver is now available and used by default (mpt_mplp_ver4.m). older solvers are still available using the Options.mplpver option. [new] solver for finite horizon optimal control problems for PWA systems based on DP approach with PWA cost-to-go is now improved and used by default. the solver has been available since version 1.4.1 as mpt_optControlPWA_new.m, now it was renamed to mpt_optControlPWA.m. the original solver is still available in auxiliary/mpt_optControlPWAold.m) [new] code optimization & speedup (up to 30% compared to version 1.4.4) [new] faster generation of search trees by mpt_searchTree (thanks Arne Linder) [new] search tree generated by mpt_searchTree is now stored in ctrlStruct.details and the control law is now evaluated by mpt_getInput.m insted of mpt_getInputST.m which has been removed from the distribution [new] mpt_identifyRegion for graphical identification of regions. try: plot(Pn); mpt_identifyRegion(Pn); [new] analytical computation of extreme points for polytopes of arbitrary dimensions [new] alternative methods for convex hull and extreme points enumeration [new] mpt_checkPWQLyapFct and mpt_checkPWALyapFct merged into mpt_checkLyapFct [new] extended error handling in mpt_sysStructInfo [new] mpt_patch2eps converts 3D figures into EPS files (by Frank J. Christophersen) [new] extended problem reporting in projection.m [new] scripts for thorough testing of MPT are now available in the new testing/ directory (mpt_runTests.m, mpt_test_LTI2d.m, mpt_test_PWA.m) [new] mpt_feasibleStates generates equidistantly placed data points in feasible space of a given controller [new] new option in mpt_oneStepCtrl - Options.set_limit. if the invariant set has a chebychev redius which is smaller than this value, the iteration is aborted. (default is 1e-3) [fix] sysStruct.dymax and sysStruct.dymin constraints now of the following form: sysStruct.dymin <= y(k+1) - y(k) <= sysStruct.dymax [fix] projection: skip sub_iterativehull() if polytope is only defined by one constraint, otherwise the subfunction runs into infinite loop [fix] mpt_optControlPWA: return open-loop solution in details only if Options.details>0 [fix] mpt_mplp_ver4: increased ALPHAit to 50 (seems to solve [issue86]) [fix] mpt_mplp_ver4: findActiveSet() now calls mpt_solveLPi instead of mpt_solveLP [fix] mpt_mplp_ver4: findActiveSet() now uses the "rescue" mode in call to mpt_solveLPi [fix] mpt_mplp_ver4: uses rescue mode in call to mpt_solveQP (re-solves the QP with a different solver if the initial one fails, see mpt_solveQP for details) [issue87] [fix] mpt_solveLPi, mpt_solveLP: call YALMIP to solve an LP with sedumi [fix] mpt_solveQP: call YALMIP to solve a QP with sedumi [fix] mpt_mplp_ver4: message about "same AS found" now displayed only if Options.verbose > 1 [fix] mpt_verifySysStruct: allows Inf values in sysStruct.umin and sysStruct.umax (due to tracking problems) [fix] mpt_sysStructInfo.m: don't compute intersection polytopes if they are not requested in output arguments [fix] default value for mptOptions.step_size changed to 1e-5 to avoid holes in solutions [fix] mpt_iterative now correctly handles feedback pre-stabilization case [fix] mpt_computeTrajectory now allows user-specified control action in Options.manualU also for open-loop trajectories [fix] cost function was not computerd for nominal system in case of parametric uncertainties [fix] automatic initialization of the toolbox in mpt_delaunay and mpt_voronoi [fix] mpt_iterativePWA now does not produce occasional warnings with Matlab 6.1 [fix] variable declaration was missing in mpt_mixedMinTime [fix] original problem structure was not set in solution of mpt_oneStepCtrl Version 1.4.4 (30-Aug-2004) --------------------------- [new] extended code in mpt_getPWQLyapFct, mpt_verifySolution [new] mpt_getQuadLyapFct computes common Lyapunov function for PWA system [new] extended error display in projection.m [fix] fixed inconsistency in projection.m for large dimensions (thanks to Lars Imsland for quick report) Version 1.4.3 (30-Aug-2004) --------------------------- [new] extended core computation in mpt_optControlPWA [new] additional error checks in mpt_solveLP [new] mpt_setOptions and mpt_getOptions to set/get global MPT options [fix] mpt_plotTimeTrajectory doesn't crash for 3D systems [fix] mpt_delaunay doesn't crash with Options.mplpver=3 [fix] in extreme.m, call to combnk() has been replaced by nchoosek() Version 1.4.2 (10-Aug-2004) --------------------------- [fix] shortcut and (&&) and or (||) operators removed from mpt_mplp_ver3.m to ensure backwards compatibility with Matlab 6.1 [fix] small fix in mtimes.m Version 1.4.1 (25-Jul-2004) --------------------------- [new] automatic checking for updates through mpt_update can be enabled in mpt_init [new] mpt_maxCtrlSet.m now computes maximum controllable set also for PWA systems [new] updated mpLP solver [new] new LP solver supported - QSopt (mex interface written by Johan Loefberg) [new] template for system and problem structures added to mpt_sysStruct and mpt_probStruct, respectively [new] new functions mpt_checkPWQLyapFct and mpt_checkPWALyapFct which check if decay rate of PWQ(PWA) Lyapunov Function is always negative [new] plotting of polytope arrays now does not break with an error message if a problem occurs. if any problems are detected, the function tries to plot as many polytopes as possible, giving an error message at the end [new] mpt_update connects to MPT webpage and checks for available updates [new] mpt_version returns version number when called as mpt_init('version') [new] less textual output when validating system and problem structures [new] text labeling of states, inputs and outputs (see Double_Integrator.m, mpt_plotTimeTrajectory, mpt_plotTrajectory) [new] constraints on slew rate of the output can now be defined in sysStruct.dymin and sysStruct.dymax [new] time-varying weighting matrices can now be used by defining probStruct.Q probStruct.R as cell arrays [new] generation of binary search trees (see help mpt_searchTree, mpt_getInputST) [new] HTML command reference guide added [new] minor speedup of control routines for PWA systems (by 5-20%) [new] mpt_removeOverlaps runs faster with Options.lowmem=0 and consumes less memory compared to previous version [new] improved low memory modes for mpt_removeOverlaps [new] function 'double' can now handle polyarrays [new] 'double' now outputs only 2 arguments: H and K matrices of the H-representation of a given polytope. to access minrep, normal, xCheb and RCheb fields, use isminrep, isnormal and chebyball functions, respectivelly [new] 'double' now outputs a cell array of H and K matrices if used on a polyarray [new] isinside.m now checks for proper dimension of x0 [new] mpt_plotTimeTrajectory returns evolution of output variables as well [fix] fixed a problem in eq.m when comparing single polytopes with polyarrays [fix] extreme points were not updatededit mpt correctly when doing a sum of a polytope and a vector (@polytope/plus.m) [fix] fixed inexact function call to mpt_mplp from mpt_delanuay and mpt_voronoi [fix] fixed a bug in mpt_getPWQLyapFct and mpt_getPWALyapFct for systems with parametric uncertainty [fix] fixed issue with output regulation & quadratic performance criterions [fix] mpt_computeTrajectory stops when reference is reached for output regulation [fix] plot was crashing when applied to empty polytopes, this is fixed now [fix] fixed typo in function name in degeneracy handler of mpt_optInfControl [fix] fixed typo in code of mpt_optControl (useSymmetry part) [fix] additional checks performed in mpt_verifyProbStruct - excluding combination of tracking & time-optimal (low complexity) solutions; probStruct.Tconstraint=0 & probStruct.subopt_lev>0; probStruct.tracking & probStruct.Tconstraint=2; time-varying Q and R in combination with probStruct.N=Inf or subopt_lev>0 Version 1.4 (25-Jun-2004) --------------------------- [new] move-blocking implemented (see help mpt_blockingMatrices, runMoveBlocking) [new] infinite-time, minimum-time and low-complexity solutions now available also for LTI systems and linear cost functions [new] cost-optimal and minimum-time solution for systems with discrete inputs [new] plot of PWA/PWQ functions now allows plotting of the function in same colors as regions below it (see help mpt_plotPWA, mpt_plotPWQ) [new] new function mpt_solveMPC solves the MPC problem on-line [new] new flag Options.lowmem -- defines 'memory saving mode'. if required, the user can switch this mode on if the procedure runs into memory problems (but computation will be slower if switched on). see mpt_removeOverlaps, mpt_optControlPWA and mpt_optInfControlPWA for more details [new] mpt_plotTrajectory and mpt_plotPartition now accept Options.color and plot the whole controller partition in that given color. Options.color has to be a character as in the 'plot' command, e.g. 'y', 'r', 'b'... only one color can be given [new] initial state for trajectory plotting in mpt_plotTrajectory can now be provided in Options.x0 (in such case the mouse interface will be disabled [new] new mpLP algorithm which is faster and more reliable (you can still use the old version by specifying Options.oldmplp=1) [new] SeDuMi can now be used to solve LP's (call mpt_init('lpsolver','sedumi') ) [new] solvers can now be specified by strings in mpt_init (e.g. mpt_init('lpsolver','nag','qpsolver','quadprog') ) [new] new method for projection -- Equality Set Projection (thanks to Colin Jones for allowing us to include his code into the toolbox) [new] fast implementation of Fourier-Motzkin elimination in C (thanks to Colin Jones for allowing us to include his code into the toolbox) [new] new function mpt_getCinf computes maximum controllable set of states [new] mpt_delaunay computes the delaunay triangulation of a polytope [new] mpt_voronoi computes the voronoi diagram via mpLP [new] if starting part of the infinite time solution for PWA systems is not found in given number of iterations, alternative technique is used rather than breaking with an error (see help mpt_optInfControlPWA) [new] intermediate results obtained at each iteration can now be stored and returned by setting appropriate field in the Options for finite and infinite horizon algorithms for PWA systems (see help mpt_optInfControlPWA, help mpt_optControlPWA) [new] in finite horizon solution for PWA systems, regions which belong to infinite-time solution can be identified upon request (see help mpt_optControlPWA) [new] generation of the core of infinite time solution for PWA systems can be now switched off through Options (see help mpt_optInfControlPWA) [new] core of the infinite time solution can be specified by Options (see help mpt_optInfControlPWA) [fix] fixed handling of equality constraints in mpt_solveQP for CPLEX [fix] plotting of polyhedral partition below the function plot in mpt_plotU and mpt_plotPWA is now enabled through Options.showPn (was Options.full_partition before) [fix] mpt/simulink: mpt_getSimInput renamed to mpt_simInput [fix] keptrows is no longer stored in the polytope object. to access this information, use reduce (see help polytope/reduce) [fix] for some PWA systems, infinite time solution was not complete. fixed in this version. [fix] new call to projection.m - second argument now denotes indices of dimensions on which the given polytope should be projected [fix] reduced switching strategy available in mpt_iterativePWA via Options (see help mpt_iterativePWA) [fix] plotting of 1D polytopes now works properly [fix] mpt_solveLP now accepts calls with just 3 input arguments [fix] minor fix in mpt_mplp for one-dimensional systems [fix] mpt_init is called from mpt_verifySysStruct if the toolbox was not initialized [fix] vertical concatenation of polytopes now accepts also empty matrices Version 1.3.1 (26-Mar-2004) --------------------------- [new] fastest method to compute projections is now automatically selected by the function [new] computation of extreme points in mpt_control can now be disabled (see help mpt_control for details) [fix] trajectory evolution in mpt_computeTrajectory for Options.stopInTset=1 will stop if all states belong to the terminal set for two consecutive time steps [fix] fixed a problem in mpt_computeTrajectory for tracking problems [fix] a bug in mpt_constructMatrices caused an error for systems with a non-square output matrix C Version 1.3 (23-Mar-2004) ------------------------- [new] new functionality - projection of a polytope or a polytope array! (see help projection for more details) [new] mpt_oneStepCtrl - computation of low complexity controllers via projection [new] mpt_iterativePWA uses projections to calculate the maximum feasible set [new] mpt_iterativePWA with probStruct.subopt_lev=2 computes a one-step controller. [new] fixed-state tracking can be enabled by setting probStruct.xref and/or probStruct.uref [new] Simulink interface now available [new] speedup of nearly all functions [new] mpLP and mpQP algorithms use a search tree to detect if a point lies in some already explored polytope [new] bounding box of a polytope is now be stored in the polytope object [new] polytope/reduce now runs much faster [new] mpt_plotJ plots value function associated to an explicit controller [new] mpt_plotU can plot value of the control action for systems with multiple inputs (thanks to Arne Linder) [new] mpt_removeOverlaps runs much faster on results obtained by iterative algorithms (mpt_iterative, mpt_iterativePWA) [new] terminal sets can be used in mpt_optControlPWA [new] value function is returned from mpt_mpqp [new] mpt_simplexContr now uses projection to compute maximum feasible set [new] new oprator introduced for polytope objects -- multiplication see help polytope/mtimes for more details [fix] mpt_iterativePWA now outputs less information when calling with Options.display=1 [fix] change of output arguments in polytope/triangulate [fix] LQR invariant sets are now computed directly in mpt_constructMatrices rather than in individual control functions [fix] mpt_constructMatrices now augments the cost function for linear norms to take x(0) into account [fix] mpt_constructMatrices now outputs the structure containing all matrices of the particular problem [fix] fixed a small bug in triangulate.m which appeared when calling the function without output arguments [fix] polytope/subsasgn now allows P([i j k ... x])=[] assignment Version 1.2R1 (18-Feb-2004) --------------------------- [fix] mpt_iterative no longer ignores user defined target sets [fix] modified "subsref"; P([]) now returns an empty polytope if P is a polytope or polytope array. Version 1.2 (6-Feb-2004) ------------------------ [new] Solution to constrained infinite-time optimal control problem for PWA systems with linear performance indexes [new] Solution to constrained finite time optimal control problem for PWA systems with linear performance indexes [new] Extended help for system and problem definition - see help mpt_sysStruct and help mpt_probStruct [new] Triangulation of arbitrary polytopes (see help polytope/triangulate) [new] Visualization of tracking problems [new] Pre-stabilization with feedback implemented. Set probStruct.feedback = 1 to enable this feature [new] mpt_simplexContr - Computes a piecewise affine feedback law defined over simplices. Feedback law is obtained by linear interpolation. [new] Yalmip 3 now supported! [new] SeDuMi 1.05 included in this release [new] CDDmex interface now compiled with the latest version of cddlib (0.93c) [new] mpt_plotArrangement - plots hyperplane arrangement [new] New LP solver - CDD using Dual-Simplex method [new] mpt_init now automatically chooses the fastest solver installed on the user's computer. Manual specification is still possible. [new] extended manual now available (but still not complete) [fix] mpt_iterative no longer overwrites the feasible set Pfinal [fix] change of X-axis captions in mpt_plotTimeTrajectory [fix] Fixed checking of constraints violations in mpt_computeTrajectory Version 1.1 Revision 3 (19-Dec-2003) ------------------------------------ [new] output arguments from control functions have been changed! instead of separate fields (PA, Fi, Gi, details), all results are stored in the so-called controller structure (ctrlStruct). Analysis and plotting functions also use the ctrlStruct as input argument. Check individual help files and the manual for more details. [new] some functions have been moved to the auxiliary/ folder. This involves all functions which are not intended to be used directly by the user. [new] mpt_solveLP now supports only version 1.1 of the Matlab-to-CPLEX interface which can be downloaded from: http://control.ee.ethz.ch/~hybrid/cplexint.msql [new] mpt_getInput returns the optimal control input for a given state vector [new] mpt_plotPWA, mpt_plotPWQ allow to plot PWA and PWQ functions defined over polyhedral partitions [new] mpt_removeOverlaps can be used to remove overlaps from partitions with associated linear cost function. [new] mousepoly.m - allows to "draw" a 2D polytope by mouse clicks [new] isbounded.m - contributed by Miroslav Baric. By solving 1 LP determines if a given polytope is bounded. [new] mpt_solveQP now handles equality constraints [fix] mpt_plotPartition now uses the same coloring scheme for all infinite-time and time-optimal solutions [fix] x0 in mpt_solveLP was not passed correctly [fix] hull.m now returns an empty polytope directly if vertices are empty matrix [del] mpt_plotLyap3D - replaced by mpt_plotPWQ Version 1.1 Revision 2 (29-Nov-2003) ------------------------------------ [fix] Arne Linder reported a problem with handling of PWA systems defined purely in U space. the bug was fixed in this release. Version 1.1 Revision 1 (25-Nov-2003) ------------------------------------ [fix] Adam Lagerberg reported an inconsistency in call to mpt_getCommonLyapFct from mpt_getStabFeedback [fix] based on a report from Adam Lagerberg, mpt_iterativePWA waas fixed while it was failing then origin was not included in first dynamics Version 1.1 (24-Nov-2003) ------------------------- [new] improved degeneracy handling in mpQP solver [new] improved error checks [fix] many small bugs fixed Version 1.0 ----------- initial release for public testing