Documentation |
Compute effect of controller tuning weights on performance
[J, sens] = sensitivity(MPCobj, PerfFunc, PerfWeights,
Tstop, r, v, simopt, utarget)
[J, sens] = sensitivity(MPCobj,'perf_fun',param1,param2,...)
The sensitivity function is a controller tuning aid. J specifies a scalar performance metric. sensitivity computes J and its partial derivatives with respect to the controller tuning weights. These sensitivities suggest tuning weight adjustments that should improve performance, i.e., reduce J.
[J, sens] = sensitivity(MPCobj, PerfFunc, PerfWeights, Tstop, r, v, simopt, utarget) calculates the scalar performance metric, J, and sensitivities, sens, for the controller defined by the MPC controller object MPCobj.
PerfFunc must be one of the following strings:
'ISE' (integral squared error) for which the performance metric is
$$J={\displaystyle \sum _{i=1}^{Tstop}\left({\displaystyle \sum _{j=1}^{{n}_{y}}{({w}_{j}^{y}{e}_{yij})}^{2}+{\displaystyle \sum _{j=1}^{{n}_{u}}[{({w}_{j}^{u}{e}_{uij})}^{2}+{({w}_{j}^{\Delta u}\Delta {u}_{ij})}^{2}]}}\right)}$$
'IAE' (integral absolute error) for which the performance metric is
$$J={\displaystyle \sum _{i=1}^{Tstop}\left({\displaystyle \sum _{j=1}^{{n}_{y}}\left|{w}_{j}^{y}{e}_{yij}\right|+{\displaystyle \sum _{j=1}^{{n}_{u}}(|{w}_{j}^{u}{e}_{uij}|+|{w}_{j}^{\Delta u}\Delta {u}_{ij}|)}}\right)}$$
'ITSE' (integral of time-weighted squared error) for which the performance metric is
$$J={\displaystyle \sum _{i=1}^{Tstop}i\Delta t\left({\displaystyle \sum _{j=1}^{{n}_{y}}{({w}_{j}^{y}{e}_{yij})}^{2}+{\displaystyle \sum _{j=1}^{{n}_{u}}[{({w}_{j}^{u}{e}_{uij})}^{2}+{({w}_{j}^{\Delta u}\Delta {u}_{ij})}^{2}]}}\right)}$$
$$J={\displaystyle \sum _{i=1}^{Tstop}i\Delta t}\left({\displaystyle \sum _{j=1}^{{n}_{y}}\left|{w}_{j}^{y}{e}_{yij}\right|+{\displaystyle \sum _{j=1}^{{n}_{u}}(|{w}_{j}^{u}{e}_{uij}|+|{w}_{j}^{\Delta u}\Delta {u}_{ij}|)}}\right)$$
'ITAE' (integral of time-weighted absolute error) for which the performance metric is
In the above expressions n_{y} is the number of controlled outputs and n_{u} is the number of manipulated variables. e_{yij} is the difference between output j and its setpoint (or reference) value at time interval i. e_{uij} is the difference between manipulated variable j and its target at time interval i.
The w parameters are non-negative performance weights defined by the structure PerfWeights, which contains the following fields:
'OutputVariables': 1 by n_{y} vector containing the $${w}_{j}^{y}$$ values
'ManipulatedVariables': 1 by n_{u} vector containing the $${w}_{j}^{u}$$ values
'ManipulatedVariablesRate': 1 by n_{u} vector containing the $${w}_{j}^{\Delta u}$$ values
If PerfWeights is unspecified, it defaults to the corresponding weights in MPCobj. In general, however, the performance weights and those used in the controller have different purposes and should be defined accordingly.
Inputs Tstop, r, v, and simopt define the simulation scenario used to evaluate performance. See sim for details.
Tstop is the integer number of controller sampling intervals to be simulated. The final time for the simulations will be Tstop × Δt, where Δt is the controller sampling interval specified in MPCobj.
The optional input utarget is a vector of n_{u} manipulated variable targets. Their defaults are the nominal values of the manipulated variables. Δu_{ij} is the change in manipulated variable j and its target at time interval i.
The structure variable sens contains the computed sensitivities (partial derivatives of J with respect to the MPCobj tuning weights.) Its fields are
'OutputVariables' | (1 by n_{y}) sensitivities with respect to MPCobj.Weights.OutputVariables |
'ManipulatedVariables' | (1 by n_{u}) sensitivities with respect to MPCobj.Weights.ManipulatedVariables |
'ManipulatedVariablesRate' | (1 by n_{u}) sensitivities with respect to MPCobj.Weights.ManipulatedVariablesRate |
See Weights for details on the tuning weights contained in MPCobj.
[J, sens] = sensitivity(MPCobj,'perf_fun',param1,param2,...) employs a performance function 'perf_fun' to define J. Its function definition must be in the form
function J = perf_fun(MPCobj, param1, param2, ...)
i.e., it must compute J for the given controller and optional parameters param1, param2, ... and it must be on the MATLAB^{®} path.
Suppose variable MPCobj contains a default controller definition for a plant with two controlled outputs, three manipulated variables, and no measured disturbances. Compute its performance and sensitivities as follows:
PerfFunc = 'IAE'; PerfWts.OutputVariables = [1 0.5]; PerfWts.ManipulatedVariables = zeros(1,3); PerfWts.ManipulatedVariablesRate = zeros(1,3); Tstop = 20; r = [1 0]; v = []; simopt = mpcsimopt; utarget = zeros(1,3); [J, sens] = sensitivity(MPCobj, PerfFunc, PerfWts, Tstop, ... r, v, simopt, utarget)
The simulation scenario in the above example uses a constant r = 1 for output 1 and r = 0 for output 2. In other words, the scenario is a unit step in the output 1 setpoint.