Systems Theory and Automatic Control

ADMITpresolve
ADMIT documentation: ADMITpresolve

ADMITpresolve

ADMITpresolve presolves the feasibility problem using interval arithmetics

[INFEASIBLE, BOUNDS_XI, BOUNDS_IMPL, BOUNDS_CONS] = ...
            ADMITpresolve(OPTINFO,[OPTIONS])
Performs a feasibility test based on interval arithmetics. This approach
to feasibility testing is quite conservative (see manual). It is however
fast and actually necessary to derive implicit bounds on additional
variables and also other variables for which no explicit bounds were
given. The function is therefore used as a presolve algorithm and if the
problem is not proved infeasible, the less conservative feasibility
testing methods based on solving SDPs/MILPs are used. To only use the
presolve algorithm set the option named "ESTIMATE.presolve.only" to "1".

The presolver can be run in different modes. Please see ADMIToptions help
texts (section ESTIMATE.presolve.mode) for further information.

Inputs
  [...]       : square brackets notify that input is optional.
  OPTINFO     : valid ADMITinfo object
  OPTIONS     : options structure; if OPTIONS
                is a valid options structure, then the option
                "ESTIMATE.bounds.forcePositive" will be used to ensure that
                all lower bounds on variables are positive; this is
                necessary for the MILP-solvers;
                also option ESTIMATE.presolve.maxIterations will be used

Returns
  INFEASIBLE       : ("0" or "1") indicating if problem is feasible based
                     on a interval arithmetics feasibility test
  BOUNDS_XI        : cell array with ADMITinterval objects containing the
                     bounds on the variables in the vector xi
  BOUNDS_IMPL      : cell array with ADMITinterval objects containing the
                     bounds on implications
  BOUNDS_CONS      : cell array with ADMITinterval objects containing the
                     bounds on constraints

Examples

opt = ADMITproject();
% Estimate interior of an ellipse 
opt = opt + ADMITconstraint('a^2 + b^2 <= 2') + ...
            ADMITconstraint('a := [-10,10]') + ...
            ADMITconstraint('b := [-10,10]');
opt = opt + ADMITvariable('a := {ofInterest}') + ...
            ADMITvariable('b := {ofInterest}')          
[optInfo,opt] = ADMITcompose(opt)
% employ more sophisticated presolve mode
ops = ADMITsetOptions('ESTIMATE.presolve.mode',2);
% check if initial problem is feasible
infeasible = ADMITpresolve(optInfo,ops)
% no check infeasible region [3,4]x[3,4]
optInfo = ADMITcompose(optInfo,'setBounds',ADMITconstraint('a := [3,4]'));
optInfo = ADMITcompose(optInfo,'setBounds',ADMITconstraint('b := [3,4]'));
infeasible = ADMITpresolve(optInfo,ops)
% no check feasible region [1,2]x[0,1]
optInfo = ADMITcompose(optInfo,'setBounds',ADMITconstraint('a := [1,2]'));
optInfo = ADMITcompose(optInfo,'setBounds',ADMITconstraint('b := [0,1]'));
infeasible = ADMITpresolve(optInfo,ops)