ADMIT documentation: ADMITcorrectOutliers

ADMITcorrectOutliers

ADMITcorrectOutliers searches for outlier candidates in the data set of an
infeasible problem and corrects them.

optInfo = ADMITcorrectOutliers(problem)
optInfo = ADMITcorrectOutliers(problem, ops)
optInfo = ADMITcorrectOutliers(problem, boundSelection)
optInfo = ADMITcorrectOutliers(problem, boundSelection, ops)
optInfo = ADMITcorrectOutliers(problem, boundSelection, invertSelection)
optInfo = ADMITcorrectOutliers(problem, boundSelection, invertSelection, ops)

ADMITcorrectOutliers searches for outliers in the explicit upper and lower
bounds using ADMITdetectOutliers and corrects them by increasing or
decreasing the upper or lower bounds of the outlier candidates. This is
done iteratively until ADMITdetectOutliers can no longer find outliers.
The strength of the increase or decrease can be set by the field
OUTLIER.correction.strength of the ADMIToptions object ops.
The maximum number of iterations can be modified by setting
the field OUTLIER.correction.maxIter of ops.
This function utilizes the algorithm presented in [1].

NOTE

Please note that only explicit bounds can be found as outliers by
ADMITcorrectOutliers. Consider the following example
opt = ADMITproject() + ADMITvariable('x := {real, timeInvariant}') + ...
                       ADMITconstraint('x := [5 10]') + ...
                       ADMITconstraint('x < 3');
Then only the constraint x >= 5 is detected as an outlier, not x < 3,
since this constraint does not define an explicit bound for x.

Inputs
  problem:         A valid ADMITproject or ADMITinfo object describing an
                   infeasible problem. The problem must not contain
                   either binary or integer variables.
  ops:             A valid ADMIToptions object.
  boundSelection:  A char or cell array describing the set of bounds which
                   should be relaxed. ADMITdetectOutliers will only look
                   for outliers in this set of bounds. See the examples
                   below for the syntax.
                   If not given, all explicit upper and lower bounds are
                   selected.
  invertSelection: Logical value. If true, the boundSelection will be
                   inverted, i.e. ADMITdetectOutliers will only relax
                   those bounds which are not contained in
                   boundSelection.
                   Default value is false.

Returns
  optInfo: ADMITinfo object describing the problem with corrected bounds.

Examples for boundSelection

Select the upper and lower bound of the time invariant variable x:
  ADMITcorrectOutliers(optInfo, 'x');

Select the lower bounds of all variables:
  ADMITcorrectOutliers(optInfo, {'*', 'lower'})

Select the lower bound of the time invariant variable x and all upper
bounds of the time variant variable y for all time points.
  ADMITcorrectOutliers(optInfo, {{'x', 'lower'}, {'y(*)', 'upper'}})

Select the upper bound of the time variant variable y at time 0.1.
  ADMITcorrectOutliers(optInfo, {'y(0.1), 'upper'})

Example

opt = ADMITproject() + ADMITvariable('x := {real, timeInvariant}') + ...
                       ADMITvariable('y := {real, timeInvariant}') + ...
                       ADMITconstraint('x := [5, 10]') + ...
                       ADMITconstraint('y := [2, 7]') + ...
                       ADMITconstraint('z := [5, 10]') + ...
                       ADMITconstraint('x+z == 18') + ...
                       ADMITconstraint('x+y == 18'); % either x or y too low
optInfo = ADMITcompose(opt);
optInfoNew = ADMITcorrectOutliers(optInfo);
%=> sets the bounds of x to [5 1.075000e+01] and of y to [2 7.750000e+00]
optInfoNew = ADMITcorrectOutliers(optInfo, 'y');
%=> sets the bounds of y to [2 8.250000e+00]
optInfoNew = ADMITcorrectOutliers(optInfo, 'y', ...
                  ADMITsetOptions('OUTLIER.correction.strength', 1e-6))
%=> sets the bounds of y to [2 8.000003e+00]

References

 [1] Streif, S.; Karl, M.; Findeisen, R.,
      "Outlier analysis in set-based estimation for nonlinear systems
      using convex relaxations," Control Conference (ECC), 2013 European,
      pp.2921,2926, 17-19 July 2013