309 const double globalLB,
310 const double globalUB);
346 const bool resolve =
true,
394 <<
" isTight = " << (
m_relGap <= tightGap)
431 double& mostNegReducedCost);
444 const bool isXSparse =
false,
445 const double feasVarTol = 1.0e-6,
446 const double feasConTol = 1.0e-5,
447 const double intTol = 1.0e-5);
450 const bool isXSparse =
false,
451 const double feasVarTol = 1.0e-6,
452 const double feasConTol = 1.0e-5);
456 const double* origCost,
458 const int n_origCols,
462 std::list<DecompVar*>& vars,
470 copy(varList.begin(), varList.end(), back_inserter(
m_vars));
481 std::vector< std::pair<int, double> >& downBranchUb,
482 std::vector< std::pair<int, double> >& upBranchLb,
483 std::vector< std::pair<int, double> >& upBranchUb);
530 const double* rowRhs,
536 const double* rowRhs,
547 const std::string baseName,
550 const int pricePass);
553 const std::string baseName,
557 const int blockId = -1,
558 const bool printMps =
true,
559 const bool printLp =
true);
564 const std::string fileName,
565 const bool printMps =
true,
566 const bool printLp =
true);
594 std::vector<std::string>& colNames);
597 std::vector<int >& colInd,
598 std::vector<double >& colVal,
611 std::vector<std::string>& colNames,
638 const double intTol = 1.0e-5);
705 std::map<int, DecompSubModel>::iterator mit;
708 return (*mit).second;
798 for (
int i = 0 ; i < nc ; i++ ) {
799 retVal += objCoef[i] * primSol[i];
830 if (nHistorySize > 0) {
871 const double thisBoundUB) {
891 #ifdef UTIL_USE_TIMERS
910 (*
m_osLog) <<
"New Global UB = "
922 objBoundIP = *objBoundLP;
927 #ifdef UTIL_USE_TIMERS
939 const double changePerLimit = 0.1);
944 std::vector<DecompRowType>::iterator vi;
947 if (*vi == rowType) {
982 bool doSetup =
true) :
1041 throw UtilException(
"Branching Implementation should be set correctly",
1042 "initSetup",
"DecompAlgo");
std::vector< double > m_origColUB
Store the name of the class (for logging/debugging) - "who am I?".
std::list< DecompCut * > DecompCutList
virtual void createMasterProblem(DecompVarList &initVars)
Create the master problem (all algorithms must define this function).
virtual void addVarsFromPool()
void UtilDeleteVectorPtr(vector< T * > &vectorPtr, typename vector< T * >::iterator first, typename vector< T * >::iterator last)
virtual int adjustColumnsEffCnt()
The main DECOMP process loop for a node.
double thisBoundUB
The recorded continuous upper bound.
DecompAlgoStop m_stopCriteria
Store the name of the class (for logging/debugging) - "who am I?".
std::vector< int > m_masterOnlyCols
Store the name of the class (for logging/debugging) - "who am I?".
virtual void phaseDone()
Run the done phase for processing node.
DecompStats m_stats
Storage of statistics for run and node.
bool m_isColGenExact
Store the name of the class (for logging/debugging) - "who am I?".
const int getNodeIndex() const
Get a ptr to the current solution (in x-space).
const double getNodeIPGap() const
Get the current node (integrality) gap.
std::vector< DecompObjBound > objHistoryBound
Storage of the bounds.
bool checkPointFeasible(const DecompConstraintSet *modelCore, const double *x)
Initial setup of algorithm structures and solver interfaces.
int m_numCols
Store the name of the class (for logging/debugging) - "who am I?".
virtual DecompStatus processNode(const AlpsDecompTreeNode *node, const double globalLB, const double globalUB)
The main DECOMP process loop for a node.
bool isMasterColArtificial(const int index) const
Initial setup of algorithm structures and solver interfaces.
int m_nRowsOrig
Store the name of the class (for logging/debugging) - "who am I?".
int nodeIndex
The node index (in the branch-and-bound tree).
double m_masterObjLast
Store the name of the class (for logging/debugging) - "who am I?".
DecompApp * getDecompAppMutable()
Get a ptr to the current solution (in x-space).
double thisBoundIP
The recorded integer upper bound.
std::vector< int > m_masterArtCols
Store the name of the class (for logging/debugging) - "who am I?".
DecompAlgo * m_decompAlgo
Pointer to the base algorithmic object.
virtual void postProcessNode(DecompStatus decompStatus)
Do some information sending after the current node has been processed.
virtual void postProcessBranch(DecompStatus decompStatus)
Do some information sending after the current node has been branched.
DecompParam m_param
Parameters.
std::string UtilDblToStr(const double x, const int precision=-1, const double tooBig=UtilSmallerThanTooBig)
void printCurrentProblem(const OsiSolverInterface *si, const std::string baseName, const int nodeIndex, const int cutPass, const int pricePass, const int blockId=-1, const bool printMps=true, const bool printLp=true)
Initial setup of algorithm structures and solver interfaces.
double * m_colUBNode
Store the name of the class (for logging/debugging) - "who am I?".
virtual void recomposeSolution(const double *solution, double *rsolution)
Compose solution in x-space from current space.
int m_compressColsLastNumCols
Store the name of the class (for logging/debugging) - "who am I?".
virtual void phaseInit(DecompPhase &phase)
Run the initial phase for processing node.
std::vector< double > m_primSolution
Store the name of the class (for logging/debugging) - "who am I?".
void dumpSettings(const std::string &sec, std::ostream *os=&std::cout)
OsiSolverInterface * getOsiIpSolverInterface()
Initial setup of algorithm structures and solver interfaces.
bool BranchEnforceInSubProb
0: print nothing 1: print the node objective history
int LogDebugLevel
0: print nothing 1: print the node objective history
const double * m_objective
Store the name of the class (for logging/debugging) - "who am I?".
void masterPhaseItoII()
Initial setup of algorithm structures and solver interfaces.
virtual int generateVars(DecompVarList &newVars, double &mostNegReducedCost)
OsiSolverInterface * getMasterOSI()
Get a ptr to the current solution (in x-space).
DecompStatus solveRelaxed(const double *redCostX, const double *origCost, const double alpha, const int n_origCols, const bool isNested, DecompSubModel &subModel, DecompSolverResult *solveResult, std::list< DecompVar * > &vars, double timeLimit)
virtual bool updateObjBound(const double mostNegRC=-DecompBigNum)
Calculate the current LB and update best/history.
void masterMatrixAddArtCol(std::vector< CoinBigIndex > &colBeg, std::vector< int > &colInd, std::vector< double > &colVal, char LorG, int rowIndex, int colIndex, DecompColType colType, double &colLB, double &colUB, double &objCoeff)
Initial setup of algorithm structures and solver interfaces.
double m_globalUB
Store the name of the class (for logging/debugging) - "who am I?".
void checkMasterDualObj()
Initial setup of algorithm structures and solver interfaces.
std::vector< double > m_phaseIObj
Store the name of the class (for logging/debugging) - "who am I?".
const DecompApp * getDecompApp() const
Get a ptr to the current solution (in x-space).
void breakOutPartial(const double *xHat, DecompVarList &newVars, const double intTol=1.0e-5)
Initial setup of algorithm structures and solver interfaces.
bool isDualRayInfProofCpx(const double *dualRay, const CoinPackedMatrix *rowMatrix, const double *colLB, const double *colUB, const double *rowRhs, std::ostream *os)
Initial setup of algorithm structures and solver interfaces.
DecompCutList m_cuts
Containers for cuts (current and pool).
static UtilTimer globalTimer
int m_function
Store the name of the class (for logging/debugging) - "who am I?".
DecompPhase m_phaseLast
Store the name of the class (for logging/debugging) - "who am I?".
void generateVarsAdjustDuals(const double *uOld, double *uNew)
Create an adjusted dual vector with the duals from the convexity constraints removed.
virtual const double * getMasterDualSolution() const
Get current dual solution for master problem.
const std::string DecompAlgoStr[5]
bool m_isStrongBranch
Store the name of the class (for logging/debugging) - "who am I?".
virtual const double * getObjCoefficients() const =0
Get a pointer to an array[getNumCols()] of objective function coefficients.
bool isMasterColMasterOnly(const int index) const
Initial setup of algorithm structures and solver interfaces.
const DecompSolution * getXhatIPBest() const
Get a ptr to the current solution (in x-space).
An interface to CGL cut generator library.
const double * getXhat() const
Get a ptr to the current solution (in x-space).
virtual void masterMatrixAddArtCols(CoinPackedMatrix *masterM, double *colLB, double *colUB, double *objCoeff, std::vector< std::string > &colNames, int startRow, int endRow, DecompRowType rowType)
Initial setup of algorithm structures and solver interfaces.
DecompSubModel m_modelCore
Store the name of the class (for logging/debugging) - "who am I?".
Sparse Matrix Base Class.
double MasterGapLimit
0: print nothing 1: print the node objective history
DecompVarList m_vars
Containers for variables (current and pool).
virtual void adjustMasterDualSolution()
Adjust the current dual solution for master problem.
int m_colIndexUnique
Store the name of the class (for logging/debugging) - "who am I?".
const double * getOrigObjective() const
Get a ptr to the current solution (in x-space).
std::map< int, int > m_masterOnlyColsMap
Map from original index to master index for master-only vars.
void generateVarsCalcRedCost(const double *u, double *redCostX)
Calculated reduced cost vector (over vars in compact space) for a given dual vector.
DecompStatus m_status
The current algorithm status.
std::vector< double * > getDualRays(int maxNumRays)
int m_nRowsBranch
Store the name of the class (for logging/debugging) - "who am I?".
double m_globalLB
Store the name of the class (for logging/debugging) - "who am I?".
std::vector< DecompSolution * > m_xhatIPFeas
Store the name of the class (for logging/debugging) - "who am I?".
DecompParam & getMutableParam()
Get a ptr to the current solution (in x-space).
int cutCallsTotal
Number of cut calls in this node in total.
int cutPass
The cut pass when bound was recorded.
#define UTIL_MSG(param, level, x)
const int getStopCriteria() const
Get a ptr to the current solution (in x-space).
virtual void addCutsToPool(const double *x, DecompCutList &newCuts, int &m_cutsThisCall)
int cutsThisCall
Number of cuts generated in this particular cut call.
int LogLevel
0: print nothing 1: print the node objective history
int m_compressColsLastPrice
Store the name of the class (for logging/debugging) - "who am I?".
const double getObjBestBoundUB() const
Get the current best UB.
void appendVars(DecompVarList &varList)
DecompPhase m_phase
The current algorithm phase.
DecompBranchingImplementation
void loadSIFromModel(OsiSolverInterface *si, bool doInt=false)
Create the master problem (all algorithms must define this function).
const double getObjBestBoundLB() const
Get the current best LB.
bool m_firstPhase2Call
Store the name of the class (for logging/debugging) - "who am I?".
virtual DecompSolverResult * solveDirect(const DecompSolution *startSol=NULL)
Initial setup of algorithm structures and solver interfaces.
int getNumRowType(DecompRowType rowType)
Get a ptr to the current solution (in x-space).
const double * m_objective
Model data: objective function.
const double * getMasterPrimalSolution() const
Get current primal solution for master problem.
UtilParameters * m_utilParam
Store the name of the class (for logging/debugging) - "who am I?".
int m_numConvexCon
Store the name of the class (for logging/debugging) - "who am I?".
void UtilDeleteListPtr(list< T * > &listPtr, typename list< T * >::iterator first, typename list< T * >::iterator last)
double bestBoundIP
The best recorded integer upper bound.
int m_nRowsCuts
Store the name of the class (for logging/debugging) - "who am I?".
DecompMemPool m_memPool
Memory pool used to reduce the number of allocations needed.
bool isMasterColStructural(const int index) const
Initial setup of algorithm structures and solver interfaces.
std::map< int, int > m_artColIndToRowInd
Store the name of the class (for logging/debugging) - "who am I?".
DecompAlgo(const DecompAlgoType algo, DecompApp *app, UtilParameters &utilParam, bool doSetup=true)
Default constructors.
DecompVarPool m_varpool
Store the name of the class (for logging/debugging) - "who am I?".
int phase
The phase when bound was recorded.
const DecompParam & getDecompParam() const
Get a ptr to the current solution (in x-space).
std::vector< DecompColType > m_masterColType
Store the name of the class (for logging/debugging) - "who am I?".
void printVars(std::ostream *os)
Initial setup of algorithm structures and solver interfaces.
int priceCallsTotal
Number of price calls in this node in total.
double bestBound
The best recorded continuous lower bound.
double m_infinity
The value of "infinity".
int m_nArtCols
Store the name of the class (for logging/debugging) - "who am I?".
std::map< int, DecompSubModel > m_modelRelax
Store the name of the class (for logging/debugging) - "who am I?".
void getSettings(UtilParameters ¶m)
void createOsiSubProblem(DecompSubModel &subModel)
Initial setup of algorithm structures and solver interfaces.
double getMasterObjValue() const
Get a ptr to the current solution (in x-space).
std::pair< double, double > objBest
The global lower (.first) and upper (.second) bound.
void setCutoffUB(const double thisBound)
Get a ptr to the current solution (in x-space).
double UtilCalculateGap(const double boundLB, const double boundUB, double infinity)
Calculate gap: |(ub-lb)|/|lb|.
virtual bool chooseBranchSet(std::vector< std::pair< int, double > > &downBranchLb, std::vector< std::pair< int, double > > &downBranchUb, std::vector< std::pair< int, double > > &upBranchLb, std::vector< std::pair< int, double > > &upBranchUb)
void printBasisInfo(OsiSolverInterface *si, std::ostream *os)
Initial setup of algorithm structures and solver interfaces.
const double getCutoffUB() const
Get a ptr to the current solution (in x-space).
int pricePass
The price pass when bound was recorded.
void checkReducedCost(const double *u, const double *u_adjusted)
Initial setup of algorithm structures and solver interfaces.
virtual DecompStatus solutionUpdate(const DecompPhase phase, const bool resolve=true, const int maxInnerIter=COIN_INT_MAX, const int maxOuterIter=COIN_INT_MAX)
Update of the solution vectors (primal and/or dual).
virtual void addVarsToPool(DecompVarList &newVars)
const int getPriceCallsTotal() const
Get a ptr to the current solution (in x-space).
double * m_xhat
Storage for current solution (in x-space).
double getRealTime()
Get wallClock time.
OsiClpSolverInterface * m_cutgenSI
Solver interface(s) for entire problem (Q'').
void getModelsFromApp()
Initial setup of algorithm structures and solver interfaces.
const DecompSubModel & getModelCore() const
Get a ptr to the current solution (in x-space).
const double getMasterRowType(int row) const
Get a specific row type.
const double getNodeLPGap() const
Get the current node (continuous) gap.
OsiSolverInterface * getOsiLpSolverInterface()
Initial setup of algorithm structures and solver interfaces.
DecompStats & getDecompStats()
Get a ptr to the current solution (in x-space).
Abstract Base Class for describing an interface to a solver.
std::vector< double * > getDualRaysOsi(int maxNumRays)
const int getCutCallsTotal() const
Get a ptr to the current solution (in x-space).
double m_relGap
Current node gap (bestUB-bestLB)/bestLB.
virtual void setMasterBounds(const double *lbs, const double *ubs)
void printCuts(std::ostream *os)
Initial setup of algorithm structures and solver interfaces.
const double COIN_DBL_MAX
double timeStamp
The time stamp (from start) when bound was recorded.
DecompAlgoType m_algo
Type of algorithm for this instance.
int m_cutgenObjCutInd
Store the name of the class (for logging/debugging) - "who am I?".
double m_cutoffUB
User-defined cutoff (global UB) for B&B fathoming and LR.
bool isLPFeasible(const double *x, const bool isXSparse=false, const double feasVarTol=1.0e-6, const double feasConTol=1.0e-5)
bool isTailoffLB(const int changeLen=10, const double changePerLimit=0.1)
Get a ptr to the current solution (in x-space).
DecompApp * m_app
Pointer to current active DECOMP application.
const AlpsDecompTreeNode * m_curNode
Store the name of the class (for logging/debugging) - "who am I?".
const double getGlobalGap() const
Get the current global (integrality) gap.
const double * getColLBNode() const
Get a ptr to the current solution (in x-space).
std::vector< double > m_dualSolution
Store the name of the class (for logging/debugging) - "who am I?".
virtual int addCutsFromPool()
void coreMatrixAppendColBounds()
Calculate gap: |(ub-lb)|/|lb|.
OsiSolverInterface * m_auxSI
Store the name of the class (for logging/debugging) - "who am I?".
virtual int compressColumns()
The main DECOMP process loop for a node.
int m_rrLastBlock
Store the name of the class (for logging/debugging) - "who am I?".
DecompBranchingImplementation m_branchingImplementation
Store the name of the class (for logging/debugging) - "who am I?".
const std::vector< DecompSolution * > & getXhatIPFeas() const
Get a ptr to the current solution (in x-space).
DecompNodeStats m_nodeStats
Store the name of the class (for logging/debugging) - "who am I?".
virtual void solveMasterAsMIP()
The main DECOMP process loop for a node.
void appendVars(DecompVar *var)
std::string m_classTag
Store the name of the class (for logging/debugging) - "who am I?".
virtual ~DecompAlgo()
Destructor.
bool isIPFeasible(const double *x, const bool isXSparse=false, const double feasVarTol=1.0e-6, const double feasConTol=1.0e-5, const double intTol=1.0e-5)
const void setStrongBranchIter(bool isStrongBranch=true)
Set the object to be in strong branching mode.
OsiSolverInterface * m_masterSI
Solver interface(s) for subproblems (P').
DecompSolution * m_xhatIPBest
Store the name of the class (for logging/debugging) - "who am I?".
virtual int generateCuts(double *xhat, DecompCutList &newCuts)
void UtilPrintFuncBegin(std::ostream *os, const std::string &classTag, const std::string &funcName, const int logLevel, const int logLimit)
virtual void setSubProbBounds(const double *lbs, const double *ubs)
DecompParam m_param
Parameters.
int m_rrIterSinceAll
Store the name of the class (for logging/debugging) - "who am I?".
void masterPhaseIItoI()
Initial setup of algorithm structures and solver interfaces.
const DecompParam & getParam() const
Get a ptr to the current solution (in x-space).
#define UtilException(msg, methodN, classN)
void masterMatrixAddMOCols(CoinPackedMatrix *masterM, double *colLB, double *colUB, double *objCoeff, std::vector< std::string > &colNames)
Initial setup of algorithm structures and solver interfaces.
int varsThisCall
Number of vars generated in this particular price call.
int m_nRowsConvex
Store the name of the class (for logging/debugging) - "who am I?".
void UtilPrintFuncEnd(std::ostream *os, const std::string &classTag, const std::string &funcName, const int logLevel, const int logLimit)
DecompCutPool m_cutpool
Store the name of the class (for logging/debugging) - "who am I?".
const double * getMasterColReducedCost() const
Get a ptr to the current solution (in x-space).
virtual void setObjBound(const double thisBound, const double thisBoundUB)
Set the current continuous bounds and update best/history.
std::vector< double > m_origColLB
Pointer (and label) to current active model core/relax.
Storage of solver result.
double getInfinity()
Return the value of infinity.
Base class for DECOMP algorithms.
DecompObjBound * getLastBound()
bool isDualRayInfProof(const double *dualRay, const CoinPackedMatrix *rowMatrix, const double *colLB, const double *colUB, const double *rowRhs, std::ostream *os)
Initial setup of algorithm structures and solver interfaces.
std::map< int, std::vector< DecompSubModel > > m_modelRelaxNest
Store the name of the class (for logging/debugging) - "who am I?".
virtual void phaseUpdate(DecompPhase &phase, DecompStatus &status)
Update of the phase for process loop.
double thisBound
The recorded continuous lower bound.
std::vector< double * > getDualRaysCpx(int maxNumRays)
DecompPhase m_phaseForce
Store the name of the class (for logging/debugging) - "who am I?".
double m_stabEpsilon
Store the name of the class (for logging/debugging) - "who am I?".
DecompSubModel & getModelRelax(const int blockId)
Get a ptr to the current solution (in x-space).
std::ostream * m_osLog
Stream for log file (default to stdout).
std::vector< DecompRowType > m_masterRowType
Store the name of the class (for logging/debugging) - "who am I?".
void printCurrentProblemDual(OsiSolverInterface *si, const std::string baseName, const int nodeIndex, const int cutPass, const int pricePass)
Initial setup of algorithm structures and solver interfaces.
double * m_colLBNode
Store the name of the class (for logging/debugging) - "who am I?".
virtual int generateInitVars(DecompVarList &initVars)
Generate initial variables for master problem (PC/DC/RC).
bool m_useInitLpDuals
Store the name of the class (for logging/debugging) - "who am I?".
std::list< DecompVar * > DecompVarList
const AlpsDecompTreeNode * getCurrentNode() const
Provide the current node the algorithm is solving.
void checkDuals()
Initial setup of algorithm structures and solver interfaces.
bool BranchEnforceInMaster
0: print nothing 1: print the node objective history
void checkBlocksColumns()
Get a ptr to the current solution (in x-space).
const double DecompBigNum
DecompStats & getStats()
Get a ptr to the current solution (in x-space).
virtual void setObjBoundIP(const double thisBound)
Set the current integer bound and update best/history.
const int getAlgo() const
Get a ptr to the current solution (in x-space).
std::vector< double > m_reducedCost
Store the name of the class (for logging/debugging) - "who am I?".
bool m_objNoChange
Store the name of the class (for logging/debugging) - "who am I?".
DecompAlgoCGL * m_cgl
Store the name of the class (for logging/debugging) - "who am I?".
The main application class.
const double * getColUBNode() const
Get a ptr to the current solution (in x-space).
void createFullMps(const std::string fileName)
Initial setup of algorithm structures and solver interfaces.
void initSetup()
Initial setup of algorithm structures and solver interfaces.