ConicBundle

NNCBoxSupportFunction is an example implementation of ConicBundle::MatrixFunctionOracle for the minimization of the support function over a box (it is, however, recommended to use a BoxOracle instead, which should be more efficient). It may be used for Lagrangian relaxation of linear programs over boxes or, using FunctionTask::AdaptivePenaltyFunction, over unbounded domains with finite optima. More...
Classes  
class  ConicBundle::NNCBoxSupportMinorantExtender 
Implementation of MinorantExtender for NNCBoxSupportFunction. More...  
class  ConicBundle::NNCBoxSupportFunction 
general purpose implementation of MatrixFunctionOracle as explained in implemention of MatrixFunctionOracle (NNCBoxSupportFunction) (see, however, the likely better choice of a BoxOracle) More...  
class  ConicBundle::NNCBoxSupportModification 
Collects modifications for NNCBoxSupport for appending, deleting or reassigning variables and respective upper and lower bounds. More...  
Functions  
ConicBundle::NNCBoxSupportMinorantExtender::NNCBoxSupportMinorantExtender (NNCBoxSupportFunction *fun)  
the NNCBoxSupportFunction pointed to has to be valid for the livetime of this object  
int  ConicBundle::NNCBoxSupportMinorantExtender::extend (Minorant &minorant, int n_coords, const int *indices) 
called by ConicBundle to update internal Minorant objects, has to return 0 on success More...  
int  ConicBundle::NNCBoxSupportFunction::apply_modification (const NNCBoxSupportModification &mod) 
applies the NNCBoxSupportModfication mod to the current function  
Variables  
NNCBoxSupportFunction *  ConicBundle::NNCBoxSupportMinorantExtender::fun 
the oracle this MinorantExtender was generated by, needed for retrieving problem data  
CH_Matrix_Classes::Matrix  ConicBundle::NNCBoxSupportFunction::lb 
column vector of lower bounds  
CH_Matrix_Classes::Matrix  ConicBundle::NNCBoxSupportFunction::ub 
column vector of upper bounds  
Initialization  
ConicBundle::NNCBoxSupportFunction::NNCBoxSupportFunction (const CH_Matrix_Classes::Matrix &lb, const CH_Matrix_Classes::Matrix &ub, const CBout *cb=0, int incr=1)  
intialize with lower bounds vector lb and upper bounds vector ub (and output options), both must be column vectors of the same length and lb<=ub componentwise, length 0 results in objective value 0  
ConicBundle::NNCBoxSupportFunction::~NNCBoxSupportFunction ()  
Implementations of MatrixFunctionOracle routines  
int  ConicBundle::NNCBoxSupportFunction::evaluate (const CH_Matrix_Classes::Matrix ¤t_point, CH_Matrix_Classes::Real relprec, CH_Matrix_Classes::Real &objective_value, std::vector< Minorant *> &minorants, PrimalExtender *&primal_extender) 
see MatrixFunctionOracle::evaluate()  
virtual int  ConicBundle::NNCBoxSupportFunction::apply_modification (const OracleModification &oracle_modification, const CH_Matrix_Classes::Matrix *new_center, const CH_Matrix_Classes::Matrix *old_center, bool &discard_objective_in_center, bool &discard_model, bool &discard_aggregates, MinorantExtender *&minorant_extender) 
see MatrixFunctionOracle::apply_modification() for the general use, here oracle_modification has a special role if it can be cast to an AMFModification More...  
virtual bool  ConicBundle::NNCBoxSupportFunction::check_correctness () const 
see MatrixFunctionOracle::check_correctness() (true only needed for debugging)  
routines for querying data of the problem  
const CH_Matrix_Classes::Matrix &  ConicBundle::NNCBoxSupportFunction::get_lower_bounds () 
returns the column vector of lower bounds  
const CH_Matrix_Classes::Matrix &  ConicBundle::NNCBoxSupportFunction::get_upper_bounds () 
retunrs the column vector of upper bounds  
routines for supporting input and output  
void  ConicBundle::NNCBoxSupportFunction::set_out (std::ostream *o=0, int pril=1) 
see ConicBundle::CBout  
void  ConicBundle::NNCBoxSupportFunction::set_cbout (const CBout *cb, int incr=1) 
see ConicBundle::CBout  
std::ostream &  ConicBundle::NNCBoxSupportFunction::print_problem_data (std::ostream &out) const 
write the problem description to out so that it can be read again by read_problem_data()  
std::istream &  ConicBundle::NNCBoxSupportFunction::read_problem_data (std::istream &in) 
clear() and read the problem from in in the format written by print_problem_data()  
std::ostream &  ConicBundle::NNCBoxSupportFunction::print_problem_data_to_mfile (std::ostream &out, CH_Matrix_Classes::Integer blocknr) const 
undocumented highly volatile variant for external testing  
NNCBoxSupportFunction is an example implementation of ConicBundle::MatrixFunctionOracle for the minimization of the support function over a box (it is, however, recommended to use a BoxOracle instead, which should be more efficient). It may be used for Lagrangian relaxation of linear programs over boxes or, using FunctionTask::AdaptivePenaltyFunction, over unbounded domains with finite optima.
NOTE: For support functions over boxes the BoxOracle with its specialized BoxModel should be much better suited and more efficient. This is just an additional possible option and serves as a good example implementation of a MatricFunctionOracle.
The class NNCBoxSupportFunction implements a general purpose version of MatrixFunctionOracle for minimizing the support function
where are given lower and upper bounds ( componentwise). When adding this function to the solver by MatrixCBsolver::add_function(), one may specify a weight , a ConicBundle::FunctionTask, and an AffineFunctionTransformation for given and . Depending on the ConicBundle::FunctionTask, the solver actually minimizes the following:
FunctionTask::ObjectiveFunction
If in setting up the groundset within MatrixCBSolver the variables are introduced with a linear cost vector and appropriate sign constraints, this corresponds to Lagrangian relaxation of the linear constraints in the linear program
FunctionTask::ConstantPenaltyFunction
or, as above in the Lagrangean relaxation setting
FunctionTask::AdaptivePenaltyFunction
or, as above in the Lagrangean relaxation setting
The standard use of a NNCBoxSupportFunction is to fully initialize it on construction with the data l and u and then to add this function to the MatrixCBSolver. If dynamic changes to this NNCBoxSupportFunction are required afterwards (only adding and deleting box coordinates is allowed), use the class ConicBundle::NNCBoxSupportModification within the corresponding problem modification routines of the MatrixCBSolver interface.
The minorant generated for the input cost vector is a maximizing vertex of the box, so it is itself the basic primal data and no extram primal data is needed.
For facilitating input and output, NNCBoxSupportFunction offers

virtual 
see MatrixFunctionOracle::apply_modification() for the general use, here oracle_modification has a special role if it can be cast to an AMFModification
if oracle_modification cannot be cast to an NNCBoxSupportModification it is assumed that all append modifications amount to have already been carried out on *this seperately before this routine is called. In particular, it is only checked whether the new dimension matches the one given by oracle_modification, the old dimension is ignored. If this does not hold, the routine stops with an error. Otherwise it checks the other stuff as if a suitable NNCBoxSupportModification has just been executed.
Reimplemented from ConicBundle::ModifiableOracleObject.

virtual 
called by ConicBundle to update internal Minorant objects, has to return 0 on success
[in,out]  minorant  (Minorant&) it holds a (possibly aggregated) minorant that was generated from minorants returned by oracle calls, e.g. as in FunctionOracle::evaluate() If PrimalData was provided in these minorants, this will be aggregated along and will also be available in this minorant. 
[in]  n_coords  (int) the number of coordinate positions that have to be filled in 
[out]  indices  (const int*) the indices of these coordinate positions (sorted in strictly increasing order) 
Implements ConicBundle::MinorantExtender.