250 int &numberNodesOutput,
int &
status);
255 #ifdef CBC_KEEP_DEPRECATED
261 CbcModel *cleanModel(
const double *lower,
const double *upper);
278 int subBranchAndBound(
CbcModel *model2,
296 int subBranchAndBound(
const double *lower,
const double *upper,
357 double *saveLower = NULL,
358 double *saveUpper = NULL);
395 int lessThanThis,
int defaultValue = 1000);
436 bool tightenVubs(
int type,
bool allowMultipleBinary =
false,
437 double useCutoff = 1.0e50);
445 double useCutoff = 1.0e50);
556 #ifdef SWITCH_VARIABLES
563 const double *solution,
int printLevel);
892 bool doCutsNow(
int allowForTopOfTree)
const;
1343 double &objectiveValue,
const double *solution,
1344 int fixVariables = 0);
1350 const double *solution);
1359 virtual double checkSolution(
double cutoff,
double *solution,
1360 int fixVariables,
double originalObjValue);
1368 int &numberObjectInfeasibilities)
const;
1478 double objectiveValue,
bool check =
false);
1790 int howOften = 1,
const char *name = NULL,
1791 bool normal =
true,
bool atSolution =
false,
1792 bool infeasible =
false,
int howOftenInSub = -100,
1793 int whatDepth = -1,
int whatDepthInSub = -1);
2226 return returnSolver;
2424 const double *lowerBefore,
const double *upperBefore,
2447 bool allowResolve,
OsiCuts *saveCuts,
2448 int numberNewCuts = 0,
const OsiRowCut **newCuts = NULL);
2485 double &lower,
double &upper,
int force);
2510 int *numberDown = NULL,
int *numberUp = NULL,
2511 int *numberDownInfeasible = NULL,
2512 int *numberUpInfeasible = NULL)
const;
2640 int numberFixed,
bool ifInfeasible);
2685 void setMIPStart(
const std::vector< std::pair< std::string, double > > &mipstart)
2704 void setMIPStart(
int count,
const char **colNames,
const double colValues[]);
3240 double &originalUpper);
3247 int callCbc(
const char *input2);
3249 int callCbc(
const std::string input2);
void flipModel()
Flip direction of optimization on all models.
CbcThread * masterThread() const
Get pointer to masterthread.
void passInSolverCharacteristics(OsiBabSolver *solverCharacteristics)
For advanced applications you may wish to modify the behavior of Cbc e.g.
const double * testSolution() const
For testing infeasibilities - will point to currentSolution_ or solver–>getColSolution() ...
CbcNodeInfo ** walkback_
Array used to assemble the path between a node and the search tree root.
const double * cbcColUpper_
Pointer to array[getNumCols()] (for speed) of column upper bounds.
int status_
Status of problem - 0 finished, 1 stopped, 2 difficulties.
void setProblemFeasibility(CbcFeasibilityBase *feasibility)
CglTreeProbingInfo * probingInfo_
Probing info.
The objective is assumed to worsen by this amount for each integer infeasibility. ...
CbcObjectUpdateData * updateItems_
Update items.
void resetToReferenceSolver()
Uses a copy of reference solver to be current solver.
int numberExtraNodes_
Number of extra nodes in fast lp.
Number of branches (may be more than number of nodes as may include strong branching) ...
void newLanguage(CoinMessages::Language language)
Set language.
virtual const double * getRowActivity() const =0
Get a pointer to array[getNumRows()] of row activity levels.
CbcNodeInfo ** lastNodeInfo_
CbcHeuristic * lastHeuristic() const
Pointer to heuristic solver which found last solution (or NULL)
CbcModel * integerPresolve(bool weak=false)
Do integer presolve, creating a new (presolved) model.
void setPointers(const OsiSolverInterface *solver)
Set pointers for speed.
double * currentSolution_
Array holding the current solution.
char * integerInfo_
Whether of not integer.
const double * getRightHandSide() const
Get pointer to array[getNumRows()] of rows right-hand sides.
void setHowOftenGlobalScan(int number)
Set how often to scan global cuts.
virtual CoinBigIndex getNumElements() const =0
Get the number of nonzero elements.
int strongStrategy_
Strategy for strong branching 0 - normal when to do all fractional 1 - root node 2 - depth less than ...
CbcNode * currentNode_
Current node so can be used elsewhere.
void setLastHeuristic(CbcHeuristic *last)
set last heuristic which found a solution
int parallelCuts(CbcBaseModel *master, OsiCuts &cuts, CbcNode *node, OsiCuts &slackCuts, int lastNumberCuts)
Generate one round of cuts - parallel mode returns - 0 - normal 1 - must keep going 2 - set numberTri...
CbcBranchDecision * branchingMethod() const
Get the current branching decision method.
virtual OsiSolverInterface * clone(bool copyData=true) const =0
Clone.
double getSolverObjValue() const
Get solver objective function value (as minimization)
int * usedInSolution() const
Array marked whenever a solution is found if non-zero.
void setOptionalInteger(int index)
int numberSavedSolutions_
Number of saved solutions.
int numberSolutions_
Number of solutions.
int moreSpecialOptions() const
Get more special options.
double numberDJFixed_
Number of reduced cost fixings.
void * getApplicationData() const
Get application data.
int preferredWay_
Preferred way of branching.
void setRandomSeed(int value)
Set random seed.
bool setAllowableFractionGap(double value)
Set the fraction allowable gap between the best known solution and the best possible solution...
const std::vector< std::pair< std::string, double > > & getMIPStart()
const double * cbcRowLower_
Pointer to array[getNumRows()] (for speed) of row lower bounds.
bool isInitialSolveProvenOptimal() const
Is optimality proven (for initialSolve) ?
int cutoffRowNumber_
-1 - cutoff as constraint not activated -2 - waiting to activate >=0 - activated
int stateOfSearch_
State of search 0 - no solution 1 - only heuristic solutions 2 - branched to a solution 3 - no soluti...
const double * getRowRange() const
Get pointer to array[getNumRows()] of row ranges.
int getPrintingMode() const
Get the printing mode.
void incrementStrongInfo(int numberTimes, int numberIterations, int numberFixed, bool ifInfeasible)
Increment strong info.
CbcCountRowCut ** addedCuts_
The list of cuts initially collected for this subproblem.
void setCutoffAsConstraint(bool yesNo)
Set cutoff as constraint.
CbcSymmetry * symmetryInfo_
Symmetry information.
bool resolveAfterTakeOffCuts_
Whether to force a resolve after takeOffCuts.
CbcModel & operator=(const CbcModel &rhs)
Assignment operator.
double sumChangeObjective2_
Sum of Changes to objective by subsequent solves.
CglPreProcess * preProcess() const
Returns CglPreProcess used before branch and bound.
const double * getObjCoefficients() const
Get pointer to array[getNumCols()] of objective function coefficients.
bool isAbandoned() const
Are there a numerical difficulties?
The maximum number of nodes before terminating.
bool isNodeLimitReached() const
Node limit reached?
int priority() const
Return Priority - note 1 is highest priority.
int * whichGenerator_
Which cut generator generated this cut.
int maximumRows_
Maximum number of rows.
const char * integerType() const
Whether or not integer.
CbcModel * heuristicModel() const
A pointer to model from CbcHeuristic.
void setFastNodeDepth(int value)
Set depth for fast nodes.
CbcCompareBase * nodeCompare_
User node comparison function.
void setNumberStrongIterations(int number)
Set the number of iterations done in strong branching.
int getThreadMode() const
Get thread mode.
int numberObjects() const
Get the number of objects.
bool isSolutionLimitReached() const
Solution limit reached?
bool setHeuristicFractionGap(double value)
Set the fraction heuristic gap between the best known solution and the best possible solution...
CoinBigIndex getNumElements() const
Get number of nonzero elements.
int moreSpecialOptions2() const
Get more special options2.
bool isIntegerNonBinary(int colIndex) const
Return true if variable is general integer.
int maximumNumberUpdateItems_
Maximum number of outstanding update information items.
void setStrongStrategy(int value)
Set strong branching strategy.
int numberGlobalCutsIn_
Number of global cuts on entry to a node.
int * mutableStrongInfo()
Return mutable strong info.
virtual bool isIntegerNonBinary(int colIndex) const
Return true if the variable is general integer.
virtual CbcModel * clone(bool cloneHandler)
Clone.
const double * getCbcColUpper() const
Get pointer to array[getNumCols()] (for speed) of column upper bounds.
virtual const char * getRowSense() const =0
Get a pointer to an array[getNumRows()] of row constraint senses.
void setHeuristicModel(CbcModel *model)
Set a pointer to model from CbcHeuristic.
void setCurrentPassNumber(int value)
Set current cut pass number in this round of cuts.
bool isBinary(int colIndex) const
Return true if variable is binary.
void setResolveAfterTakeOffCuts(bool yesNo)
int getIterationCount() const
Get how many iterations it took to solve the problem.
void * temporaryPointer_
Useful temporary pointer.
int numberHeuristics() const
Get the number of heuristics.
int secondaryStatus() const
Secondary status of problem -1 unset (status_ will also be -1) 0 search completed with solution 1 lin...
void incrementNodeCount(int value)
Increment how many nodes it took to solve the problem.
void setContinuousPriority(int value)
Set anything with priority >= this can be treated as continuous.
void resizeWhichGenerator(int numberNow, int numberAfter)
Update size of whichGenerator.
int maximumRows() const
Maximum number of rows.
double rootObjectiveAfterCuts() const
Value of objective after root node cuts added.
int getContinuousInfeasibilities() const
Number of infeasibilities at continuous.
int callCbc(const char *input2, OsiClpSolverInterface &solver1)
CbcEventHandler * getEventHandler() const
Retrieve a pointer to the event handler.
void lockThread()
Locks a thread if parallel so that stuff like cut pool can be updated and/or used.
const double * getReducedCost() const
Get a pointer to array[getNumCols()] of reduced costs.
bool getKeepNamesPreproc() const
int getNumberHeuristicSolutions() const
Get number of heuristic solutions.
Stored Cut Generator Class.
Just a marker, so that a static sized array can store parameters.
const double * getCbcReducedCost() const
Get a pointer to array[getNumCols()] (for speed) of reduced costs.
int serialCuts(OsiCuts &cuts, CbcNode *node, OsiCuts &slackCuts, int lastNumberCuts)
Generate one round of cuts - serial mode returns - 0 - normal 1 - must keep going 2 - set numberTries...
bool setInfeasibilityWeight(double value)
Set the weight per integer infeasibility .
OsiSolverInterface * solver_
The solver associated with this model.
void reserveCurrentSolution(const double *solution=NULL)
Make sure region there and optionally copy solution.
int getMultipleRootTries() const
Get multiple root tries.
int numberRowsAtContinuous() const
Number of rows in continuous (root) problem.
double * bestSolution_
Array holding the incumbent (best) solution.
bool setIntegerTolerance(double value)
Set the integrality tolerance .
int * integerVariable_
Indices of integer variables.
int logLevel() const
Get log level.
CbcModel * parentModel_
Parent model.
int searchStrategy() const
Strategy worked out - mainly at root node for use by CbcNode.
CoinMessageHandler * handler_
Message handler.
const double * hotstartSolution() const
Get the hotstart solution.
bool addCuts1(CbcNode *node, CoinWarmStartBasis *&lastws)
Traverse the tree from node to root and prep the model.
bool setMaximumSolutions(int value)
Set the maximum number of solutions desired.
int specialOptions_
Special options 0 bit (1) - check if cuts valid (if on debugger list) 1 bit (2) - use current basis t...
bool isFreeBinary(int colIndex) const
Return true if variable is binary and not fixed at either bound.
bool canStopOnGap() const
See if can stop on gap.
double minimumDrop_
Minimum degradation in objective value to continue cut generation.
Cutoff - stored for speed.
bool isProvenOptimal() const
Is optimality proven?
CbcCutGenerator ** generator_
int numberLongStrong_
Number of long strong goes.
virtual const double * getRowPrice() const =0
Get pointer to array[getNumRows()] of dual variable values.
CbcNodeInfo ** walkback() const
Get pointer to walkback.
int howOftenGlobalScan() const
Get how often to scan global cuts.
int fastNodeDepth_
Depth for fast nodes.
bool integerPresolveThisModel(OsiSolverInterface *originalSolver, bool weak=false)
Do integer presolve, modifying the current model.
int numberSolves_
Cumulative number of solves.
unsigned int ownership_
Ownership of objects and other stuff.
const CbcFullNodeInfo * topOfTree() const
Pointer to top of tree.
CoinWarmStartBasis & workingBasis()
Work basis for temporary use.
const double * cbcColLower_
Whether to automatically do presolve before branch and bound.
CbcEventHandler * eventHandler_
Pointer to the event handler.
virtual const CoinPackedMatrix * getMatrixByCol() const =0
Get a pointer to a column-wise copy of the matrix.
char * setupCleanVariables()
Sets up cleanVariables array (i.e. ones to be careful about)
CbcCountRowCut ** addedCuts() const
Return the list of cuts initially collected for this subproblem.
void setStoredRowCuts(CglStored *cuts)
Set stored row cuts for donor/recipient CbcModel.
bool setDblParam(CbcDblParam key, double value)
Set a double parameter.
CbcHeuristic * lastHeuristic_
Pointer to heuristic solver which found last solution (or NULL)
CbcHeuristic ** heuristic_
Heuristic solvers.
void clearContinuousSolver()
Clear solver with continuous state.
CoinMessages * messagesPointer()
Return pointer to messages.
void makePartialCut(const OsiRowCut *cut, const OsiSolverInterface *solver=NULL)
Make partial cut into a global cut and save.
int getRandomSeed() const
Get random seed.
void setNumberHeuristicSolutions(int value)
Set number of heuristic solutions.
int getNodeCount2() const
Get how many Nodes it took to solve the problem.
int numberInfeasibleNodes_
Number of nodes infeasible by normal branching (before cuts)
Sum of non-zero changes on a branch.
int phase() const
Current phase (so heuristics etc etc can find out).
int multipleRootTries_
Multiple root tries.
bool modelOwnsSolver()
Get ownership of solver.
void setPreProcess(CglPreProcess *preProcess)
Set CglPreProcess used before branch and bound.
int numberStrong_
Maximum number of candidates to consider for strong branching.
void setKeepNamesPreproc(bool _keep)
if original column names will be preserved in preprocessed problem
int moreSpecialOptions2_
More more special options 0 bit (1) - find switching variables 1 bit (2) - using fake objective until...
Collections of row cuts and column cuts.
void setModelOwnsSolver(bool ourSolver)
Set ownership of solver.
void setNumberAnalyzeIterations(int number)
Number of analyze iterations to do.
int currentNumberCuts() const
Number of entries in the list returned by addedCuts()
void setThreadMode(int value)
Set thread mode always use numberThreads for branching 1 set then deterministic 2 set then use number...
int takeOffCuts(OsiCuts &cuts, bool allowResolve, OsiCuts *saveCuts, int numberNewCuts=0, const OsiRowCut **newCuts=NULL)
Remove inactive cuts from the model.
double getCurrentObjValue() const
Get current objective function value.
void setNumberThreads(int value)
Set number of threads.
void saveReferenceSolver()
Save a copy of the current solver so can be reset to.
CbcStrategy * strategy_
Strategy.
int strongStrategy() const
Stong branching strategy.
const double * cbcRowPrice_
Pointer to array[getNumRows()] (for speed) of dual prices.
void setPrintFrequency(int number)
Set the print frequency.
bool feasibleSolution(int &numberIntegerInfeasibilities, int &numberObjectInfeasibilities) const
Test the current solution for feasiblility.
bool normalSolver() const
Says if normal solver i.e. has well defined CoinPackedMatrix.
virtual double checkSolution(double cutoff, double *solution, int fixVariables, double originalObjValue)
Call this to really test if a valid solution can be feasible Solution is number columns in size...
int currentDepth_
Current depth.
void passInEventHandler(const CbcEventHandler *eventHandler)
Set an event handler.
void setNumberStrong(int number)
Set the maximum number of candidates to be evaluated for strong branching.
void setLanguage(CoinMessages::Language language)
OsiRowCut * conflictCut(const OsiSolverInterface *solver, bool &localCuts)
Create conflict cut (well - most of)
void passInTreeHandler(CbcTree &tree)
For modifying tree handling (original is cloned)
void incrementUsed(const double *solution)
Increases usedInSolution for nonzeros.
double savedSolutionObjective(int which) const
Return a saved solution objective (0==best) - COIN_DBL_MAX if off end.
int numberNewCuts_
Number of new cuts.
void unlockThread()
Unlocks a thread if parallel to say cut pool stuff not needed.
The default COIN simplex (basis-oriented) warm start class.
bool defaultHandler() const
Check default handler.
void convertToDynamic()
If numberBeforeTrust >0 then we are going to use CbcBranchDynamic.
OsiObject ** object_
Integer and Clique and ...
double getIntegerTolerance() const
Get the integrality tolerance .
CbcStatistics ** statistics_
statistics
int numberStrong() const
Get the maximum number of candidates to be evaluated for strong branching.
const double * getColUpper() const
Get pointer to array[getNumCols()] of column upper bounds.
bool setAllowablePercentageGap(double value)
Set the percentage allowable gap between the best known solution and the best possible solution...
int numberIntegers() const
Number of integers in problem.
void setBranchingMethod(CbcBranchDecision *method)
Set the branching decision method.
int cleanBounds(OsiSolverInterface *solver, char *cleanVariables)
Clean model i.e.
void generateCpp(FILE *fp, int options)
Create C++ lines to get to current state.
int CbcMain(int argc, const char *argv[], CbcModel &babSolver)
int maximumNumberIterations_
Maximum number of iterations (designed to be used in heuristics)
Adjusts printout 1 does different node message with number unsatisfied on last branch.
void setApplicationData(void *appData)
Set application data.
Base class for message handling.
Stop when the gap between the objective value of the best known solution and the best bound on the ob...
void setStrategy(CbcStrategy &strategy)
Set the strategy. Clones.
void setSearchStrategy(int value)
Set strategy worked out - mainly at root node for use by CbcNode.
virtual bool isInteger(int colIndex) const
Return true if the variable is integer.
bool isInitialSolveProvenPrimalInfeasible() const
Is primal infeasiblity proven (for initialSolve) ?
This class allows for the use of more exotic solvers e.g.
void setOriginalColumns(const int *originalColumns, int numberGood=COIN_INT_MAX)
Set original columns as created by preprocessing.
void deleteSolutions()
Delete best and saved solutions.
virtual int getNumCols() const =0
Get the number of columns.
void makeGlobalCuts()
Make partial cuts into global cuts.
double * bestSolution() const
The best solution to the integer programming problem.
bool isProvenInfeasible() const
Is infeasiblity proven (or none better than cutoff)?
const OsiRowCut ** lastCut_
CbcFullNodeInfo * topOfTree_
Pointer to top of tree.
bool eventHappened_
Whether event happened.
CbcCutGenerator ** cutGenerators() const
Get the list of cut generators.
void setMoreSpecialOptions(int value)
Set more special options at present bottom 6 bits used for shadow price mode 1024 for experimental ho...
double penaltyScaleFactor_
Scale factor to make penalties match strong.
int numberStrongIterations_
Number of iterations in strong branching.
CbcNode ** solveOneNode(int whichSolver, CbcNode *node, int &numberNodesOutput, int &status)
Input one node output N nodes to put on tree and optional solution update This should be able to oper...
int numberUpdateItems_
Number of outstanding update information items.
bool setPrintingMode(int value)
Set the printing mode.
void setDefaultHandler(bool yesNo)
Set flag to say if handler_ is the default handler.
int numberGlobalViolations() const
Number of times global cuts violated.
CbcNode * currentNode() const
Get a pointer to current node (be careful)
Abstract Base Class for describing an interface to a solver.
void setCutAndHeuristicOptions(CbcModel &model)
int getMaximumCutPasses() const
Get the maximum number of cut passes at other nodes (default 10)
void moveToModel(CbcModel *baseModel, int mode)
Move/copy information from one model to another -1 - initialization 0 - from base model 1 - to base m...
bool ownObjects() const
Now we may not own objects - just point to solver's objects.
const double * getCbcColSolution() const
Get pointer to array[getNumCols()] (for speed) of primal solution vector.
double getHeuristicGap() const
Get the heuristic gap between the best known solution and the best possible solution.
const CoinPackedMatrix * getMatrixByRow() const
Get pointer to row-wise copy of matrix.
int maximumCutPassesAtRoot_
Maximum number of cut passes at root.
double getAllowablePercentageGap() const
Get the percentage allowable gap between the best known solution and the best possible solution...
OsiSolverInterface * referenceSolver_
A copy of the solver, taken at constructor or by saveReferenceSolver.
bool maximumSecondsReached() const
Return true if maximum time reached.
int numberNodes2_
Cumulative number of nodes for statistics.
int maximumDepth_
Current limit on search tree depth.
double getObjSense() const
Get objective function sense (1 for min (default), -1 for max)
bool isSecondsLimitReached() const
Time limit reached?
int whenCuts() const
Get at which depths to do cuts.
void incrementSubTreeStopped()
Says a sub tree was stopped.
int threadMode_
thread mode always use numberThreads for branching 1 set then deterministic 2 set then use numberThre...
int getMaximumCutPassesAtRoot() const
Get the maximum number of cut passes at root node.
double getMinimumDrop() const
Get the minimum drop to continue cuts.
CbcCutModifier * cutModifier_
Cut modifier function.
void zapGlobalCuts()
Get rid of global cuts.
const double * getRowPrice() const
Get pointer to array[getNumRows()] of dual prices.
void gutsOfCopy(const CbcModel &rhs, int mode=0)
Most of copy constructor mode - 0 copy but don't delete before 1 copy and delete before 2 copy and de...
bool isProvenDualInfeasible() const
Was continuous solution unbounded.
int printFrequency() const
Get the print frequency.
void setInfoInChild(int type, CbcThread *info)
Set information in a child -3 pass pointer to child thread info -2 just stop -1 delete simple child s...
CbcEventHandler::CbcAction dealWithEventHandler(CbcEventHandler::CbcEvent event, double objValue, const double *solution)
Deals with event handler and solution.
void branchAndBound(int doStatistics=0)
Invoke the branch & cut algorithm.
CbcBaseModel * master_
Thread stuff for master.
CbcEvent
Events known to cbc.
const double * cbcReducedCost_
Get a pointer to array[getNumCols()] (for speed) of reduced costs.
virtual bool isContinuous(int colIndex) const =0
Return true if the variable is continuous.
Current minimization objective value.
CoinWarmStartBasis * getEmptyBasis(int ns=0, int na=0) const
Return an empty basis object of the specified size.
double getAllowableFractionGap() const
Get the fraction allowable gap between the best known solution and the best possible solution...
int logLevel() const
Get current log (detail) level.
CbcCutModifier * cutModifier() const
Get the current cut modifier method.
void setBestSolutionBasis(const CoinWarmStartBasis &bestSolutionBasis)
Warm start object produced by heuristic or strong branching.
void synchronizeHandlers(int makeDefault)
Makes all handlers same.
void setNumberPenalties(int number)
Set the number of variables for which to compute penalties in dynamic strong branching.
double getAllowableGap() const
Get the allowable gap between the best known solution and the best possible solution.
int numberNodes_
Cumulative number of nodes.
int numberFixedAtRoot_
Number of fixed by analyze at root.
void setMinimizationObjValue(double value)
Set best objective function value as minimization.
void startSplitModel(int numberIterations)
Start threads.
Using MS heap implementation.
int whenCuts_
At which depths to do cuts.
const OsiObject * object(int which) const
Get the specified object.
int numberFathoms_
Number of times fast lp entered.
int continuousInfeasibilities_
Number of infeasibilities at continuous.
Stop doing heuristics when the gap between the objective value of the best known solution and the bes...
void setLogLevel(int value)
Set log level.
int getCurrentPassNumber() const
Get current cut pass number in this round of cuts.
bool isInteger(int colIndex) const
Return true if column is integer.
void setWhenCuts(int value)
Set at which depths to do cuts.
void setNumberBeforeTrust(int number)
Set the number of branches before pseudo costs believed in dynamic strong branching.
int numberIntegers_
Number of integers in problem.
Class to deal with symmetry.
int problemType_
Problem type as set by user or found by analysis.
Base class for Cbc event handling.
int strongInfo_[7]
0 - number times strong branching done, 1 - number fixed, 2 - number infeasible Second group of three...
int typePresolve() const
Whether to automatically do presolve before branch and bound (subTrees).
CoinMessageHandler * messageHandler() const
Return handler.
void setHotstartSolution(const double *solution, const int *priorities=NULL)
Pass in target solution and optional priorities.
OsiObject ** objects() const
Get the array of objects.
int addCuts(CbcNode *node, CoinWarmStartBasis *&lastws)
Determine and install the active cuts that need to be added for the current subproblem.
virtual const double * getRightHandSide() const =0
Get a pointer to an array[getNumRows()] of row right-hand sides.
double * currentSolution() const
Solution to the most recent lp relaxation.
void deleteNode(CbcNode *node)
Delete a node and possibly null out currentNode_.
Just a marker, so that a static sized array can store parameters.
This is a first attempt at a message handler.
const CoinPackedMatrix * getMatrixByCol() const
Get pointer to column-wise copy of matrix.
void setMaximumSavedSolutions(int value)
Set maximum number of extra saved solutions.
double sumChangeObjective1_
Sum of Changes to objective by first solve.
void setUseElapsedTime(bool yesNo)
Set time method.
double * continuousSolution() const
Holds solution at continuous (after cuts if branchAndBound called)
int numberCutGenerators() const
Get the number of cut generators.
int getPreferredWay() const
Get the preferred way to branch (default 0)
double getInfinity() const
Get solver's value for infinity.
virtual const double * getColLower() const =0
Get a pointer to an array[getNumCols()] of column lower bounds.
Cut Generator Base Class.
int numberHeuristicSolutions_
Number of heuristic solutions.
int stopNumberIterations_
For threads - stop after this many "iterations".
int numberStoppedSubTrees() const
Returns number of times any subtree stopped on nodes, time etc.
CbcHeuristic * heuristic(int i) const
Get the specified heuristic.
OsiSolverInterface * continuousSolver() const
Returns solver with continuous state.
void gutsOfDestructor2()
Clears out enough to reset CbcModel as if no branch and bound done.
double bestObjective_
Best objective.
const int * whichGenerator() const
Which cut generator generated this cut.
int getMaximumNodes() const
Get the maximum node limit .
const double * savedSolution(int which) const
Return a saved solution (0==best) - NULL if off end.
const double * getCbcRowUpper() const
Get pointer to array[getNumRows()] (for speed) of row upper bounds.
void setBestObjectiveValue(double objectiveValue)
Just update objectiveValue.
void redoWalkBack()
Redo walkback arrays.
int searchStrategy_
Strategy worked out - mainly at root node.
int numberBeforeTrust_
The number of branches before pseudo costs believed in dynamic strong branching.
int fastNodeDepth() const
Get depth for fast nodes.
void setStateOfSearch(int state)
void setNodeComparison(CbcCompareBase *compare)
Stop doing heuristics when the gap between the objective value of the best known solution and the bes...
int chooseBranch(CbcNode *&newNode, int numberPassesLeft, CbcNode *oldNode, OsiCuts &cuts, bool &resolved, CoinWarmStartBasis *lastws, const double *lowerBefore, const double *upperBefore, OsiSolverBranch *&branches)
Encapsulates choosing a variable - anyAction -2, infeasible (-1 round again), 0 done.
void synchronizeModel()
Ensure attached objects point to this model.
virtual int getNumRows() const =0
Get the number of rows.
int resolve(CbcNodeInfo *parent, int whereFrom, double *saveSolution=NULL, double *saveLower=NULL, double *saveUpper=NULL)
Reoptimise an LP relaxation.
void setBranchingMethod(CbcBranchDecision &method)
Set the branching method.
double * analyzeResults_
Arrays with analysis results.
The amount by which to tighten the objective function cutoff when a new solution is discovered...
const double * cbcColSolution_
Pointer to array[getNumCols()] (for speed) of primal solution vector.
virtual CbcBranchDecision * clone() const =0
Clone.
void setProblemType(int number)
Problem type as set by user or found by analysis.
void saveBestSolution(const double *solution, double objectiveValue)
Save a solution to best and move current to saved.
void clearNumberGlobalViolations()
CbcModel * parentModel() const
Get the current parent model.
void setCutoff(double value)
Set cutoff bound on the objective function.
const double * getColSolution() const
Get pointer to array[getNumCols()] of primal solution vector.
int printFrequency_
Print frequency.
double continuousObjective_
Value of objective at continuous (Well actually after initial round of cuts)
CbcModel * subTreeModel(OsiSolverInterface *solver=NULL) const
For retrieving a copy of subtree model with given OsiSolver.
void passInPriorities(const int *priorities, bool ifNotSimpleIntegers)
Pass in branching priorities.
int numberBeforeTrust() const
get the number of branches before pseudo costs believed in dynamic strong branching.
virtual bool isBinary(int colIndex) const
Return true if the variable is binary.
virtual double getInfinity() const =0
Get the solver's value for infinity.
CoinWarmStartBasis bestSolutionBasis_
Warm start object produced by heuristic or strong branching.
int howOftenGlobalScan_
How often to scan global cuts.
OsiRowCut augmented with bookkeeping.
int stateOfSearch() const
State of search 0 - no solution 1 - only heuristic solutions 2 - branched to a solution 3 - no soluti...
int callCbc1(const char *input2, CbcModel &babSolver, int(CbcModel *currentSolver, int whereFrom))
bool keepNamesPreproc
keepNamesPreproc if variables names will be preserved in the pre-processed problem (usefull in callba...
double getCurrentSeconds() const
Current time since start of branchAndbound.
bool tightenVubs(int type, bool allowMultipleBinary=false, double useCutoff=1.0e50)
For variables involved in VUB constraints, see if we can tighten bounds by solving lp's...
int maximumDepthActual_
Maximum depth reached.
void setNumberObjects(int number)
Set the number of objects.
double getCurrentMinimizationObjValue() const
Get current minimization objective function value.
double getContinuousObjective() const
Value of objective at continuous.
int numberRowsAtContinuous_
Number of rows at continuous.
CoinWarmStart * emptyWarmStart_
Pointer to an empty warm start object.
void previousBounds(CbcNode *node, CbcNodeInfo *where, int iColumn, double &lower, double &upper, int force)
Returns bounds just before where - initially original bounds.
void zeroExtra()
Zero extra.
CbcBaseModel * master() const
Thread stuff for master.
CbcModel()
Default Constructor.
int continuousPriority() const
Get anything with priority >= this can be treated as continuous.
CbcBranchDecision * branchingMethod_
Variable selection function.
Optimization direction - stored for speed.
Information required while the node is live.
int numberFixedNow_
Number fixed by analyze so far.
For gathering statistics.
const double * getCbcRowLower() const
Get pointer to array[getNumRows()] (for speed) of row lower bounds.
int * originalColumns() const
Original columns as created by integerPresolve or preprocessing.
void setSolutionCount(int value)
Set number of solutions (so heuristics will be different)
const double * cbcRowActivity_
Pointer to array[getNumRows()] (for speed) of row activity levels.
int getNumRows() const
Get number of rows.
int numberStoppedSubTrees_
Number of times any subtree stopped on nodes, time etc.
double getCutoffIncrement() const
Get the CbcModel::CbcCutoffIncrement desired.
virtual double getObjValue() const =0
Get the objective function value.
int parallelMode() const
Return -2 if deterministic threaded and main thread -1 if deterministic threaded and serial thread 0 ...
int continuousPriority_
Anything with priority >= this can be treated as continuous.
int numberCutGenerators_
Number of cut generators.
int currentPassNumber_
Current cut pass number.
CoinThreadRandom * randomNumberGenerator()
Thread specific random number generator.
int numberObjects_
Total number of objects.
void setObjSense(double s)
Set objective function sense (1 for min (default), -1 for max,)
int currentDepth() const
Current depth.
double dblParam_[CbcLastDblParam]
Array for double parameters.
void CbcMain0(CbcModel &babSolver)
The maximum number of solutions before terminating.
int getExtraNodeCount() const
Get how many Nodes were enumerated in complete fathoming B&B inside CLP.
CbcFeasibilityBase * problemFeasibility_
User feasibility function (see CbcFeasibleBase.hpp)
CbcCompareBase * nodeComparison() const
int maximumStatistics_
Maximum number of statistics.
int maximumSavedSolutions_
Maximum number of saved solutions.
OsiSolverInterface * continuousSolver_
A copy of the solver, taken at the continuous (root) node.
CoinMessages messages_
Cbc messages.
int getNumCols() const
Get number of columns.
CbcRowCuts globalCuts_
Global cuts.
int intParam_[CbcLastIntParam]
Array for integer parameters.
CglStored * storedRowCuts() const
Get stored row cuts for donor/recipient CbcModel.
bool defaultHandler_
Flag to say if handler_ is the default handler.
void setMoreSpecialOptions2(int value)
Set more more special options 0 bit (1) - find switching variables 1 bit (2) - using fake objective u...
const double * getRowUpper() const
Get pointer to array[getNumRows()] of row upper bounds.
void setStrategy(CbcStrategy *strategy)
Set the strategy. assigns.
void incrementIterationCount(int value)
Increment how many iterations it took to solve the problem.
CBC_Message
This deals with Cbc messages (as against Clp messages etc).
Smallest non-zero change on a branch.
int getNumberThreads() const
Get number of threads.
int maximumNumberCuts_
Maximum number of cuts.
void setMaximumCutPassesAtRoot(int value)
Set the maximum number of cut passes at root node (default 20) Minimum drop can also be used for fine...
Sparse Matrix Base Class.
void checkModel()
Check original model before it gets messed up.
int doOneNode(CbcModel *baseModel, CbcNode *&node, CbcNode *&newNode)
Do one node - broken out for clarity? also for parallel (when baseModel!=this) Returns 1 if solution ...
void setObjValue(double value)
Set best objective function value.
The maximum number of seconds before terminating.
CoinMessages & messages()
Return messages.
bool allDynamic() const
Says whether all dynamic integers.
void initialSolve()
Solve the initial LP relaxation.
bool ownObjects_
Now we may not own objects - just point to solver's objects.
int maximumCutPasses_
Maximum number of cut passes.
bool isContinuous(int colIndex) const
Return true if variable is continuous.
const double * getRowActivity() const
Get pointer to array[getNumRows()] of row activity levels.
CbcRowCuts * globalCuts()
Global cuts.
int status() const
Final status of problem Some of these can be found out by is......
CbcRowCuts * globalConflictCuts_
Global conflict cuts.
bool setMaximumNodes(int value)
Set the maximum node limit .
The time at start of model.
virtual const double * getColSolution() const =0
Get a pointer to an array[getNumCols()] of primal variable values.
const double * cbcRowUpper_
Pointer to array[getNumRows()] (for speed) of row upper bounds.
const char * getRowSense() const
Get pointer to array[getNumRows()] of row constraint senses.
void addObjects(int numberObjects, OsiObject **objects)
Add in object information.
int getStopNumberIterations() const
Get number of "iterations" to stop after.
CglStored * storedRowCuts_
Stored row cuts for donor/recipient CbcModel.
Base class for Clp event handling.
void incrementExtra(int nodes, int iterations, int fathoms=1)
OsiSolverInterface * solver() const
Returns solver - has current state.
bool isInitialSolveAbandoned() const
Are there numerical difficulties (for initialSolve) ?
int splitModel(int numberModels, CbcModel **model, int numberNodes)
Split up nodes.
Language
Supported languages.
int numberIterations_
Cumulative number of iterations.
double * continuousSolution_
Holds solution at continuous (after cuts)
void sayEventHappened()
Tell model to stop on event.
Abstract cut modifier base class.
double getObjValue() const
Get best objective function value.
double ** savedSolutions_
Arrays holding other solutions.
bool isLocked() const
From here to end of section - code in CbcThread.cpp until class changed Returns true if locked...
Information required to recreate the subproblem at this node.
void setBestSolution(CBC_Message how, double &objectiveValue, const double *solution, int fixVariables=0)
Record a new incumbent solution and update objectiveValue.
int numberAnalyzeIterations_
Number of analyze iterations to do.
virtual double getObjSense() const =0
Get the objective function sense.
int secondaryStatus_
Secondary status of problem -1 unset (status_ will also be -1) 0 search completed with solution 1 lin...
void setParentModel(CbcModel &parentModel)
Set the parent model.
virtual bool isFreeBinary(int colIndex) const
Return true if the variable is binary and not fixed.
int * hotstartPriorities_
Hotstart priorities.
bool isContinuousUnbounded() const
Was continuous solution unbounded.
double originalContinuousObjective_
Value of objective before root node cuts added.
int getNodeCount() const
Get how many Nodes it took to solve the problem (including those in complete fathoming B&B inside CLP...
void zapIntegerInformation(bool leaveObjects=true)
Zap integer information in problem (may leave object info)
CglPreProcess * preProcess_
preProcess used before branch and bound (optional)
void setPenaltyScaleFactor(double value)
Set scale factor to make penalties match strong.
Information required to recreate the subproblem at this node.
void setSecondaryStatus(int value)
void setMaximumNumberIterations(int value)
Set maximum number of iterations (designed to be used in heuristics)
CbcModel * subTreeModel_
A pointer to model to be used for subtrees.
CoinWarmStartBasis workingBasis_
Work basis for temporary use.
void * appData_
Pointer to user-defined data structure.
void doHeuristicsAtRoot(int deleteHeuristicsAfterwards=0)
Do heuristics at root.
void setContinuousObjective(double value)
void analyzeObjective()
Analyze problem to find a minimum change in the objective function.
int numberPenalties() const
get the number of variables for which to compute penalties in dynamic strong branching.
void setProblemStatus(int value)
bool stoppedOnGap_
Whether stopping on gap.
int numberStrongIterations() const
Get the number of iterations done in strong branching.
CbcAction
Action codes returned by the event handler.
Largest non-zero change on a branch.
int specialOptions() const
Get special options.
const double * getCbcColLower() const
Get pointer to array[getNumCols()] (for speed) of column lower bounds.
int getSolutionCount() const
Get number of solutions.
bool useElapsedTime() const
Get time method.
static bool haveMultiThreadSupport()
Indicates whether Cbc library has been compiled with multithreading support.
int CbcMain1(int argc, const char *argv[], CbcModel &babSolver)
void createContinuousSolver()
Create solver with continuous state.
void setTestSolution(const double *solution)
char integerType(int i) const
Whether or not integer.
CbcTree * tree() const
Tree method e.g. heap (which may be overridden by inheritance)
OsiRowCut * nextRowCut_
A pointer to a row cut which will be added instead of normal branching.
int phase_
Current phase (so heuristics etc etc can find out).
int numberSavedSolutions() const
Number of saved solutions (including best)
CbcModel * heuristicModel_
A pointer to model from CbcHeuristic.
double penaltyScaleFactor() const
Get scale factor to make penalties match strong.
double getCutoff() const
Get the cutoff bound on the objective function - always as minimize.
double getMinimizationObjValue() const
Get best objective function value as minimization.
void synchronizeNumberBeforeTrust(int type=0)
Set numberBeforeTrust in all objects.
const double * getColLower() const
Get pointer to array[getNumCols()] of column lower bounds.
OsiBabSolver * solverCharacteristics_
For advanced applications you may wish to modify the behavior of Cbc e.g.
void setNumberHeuristics(int value)
Set the number of heuristics.
Small non-zero change on a branch to be used as guess.
int numberAnalyzeIterations() const
bool setAllowableGap(double value)
Set the allowable gap between the best known solution and the best possible solution.
void setMIPStart(const std::vector< std::pair< std::string, double > > &mipstart)
void setMaximumCutPasses(int value)
Set the maximum number of cut passes at other nodes (default 10) Minimum drop can also be used for fi...
void setMinimumDrop(double value)
Set the minimum drop to continue cuts.
int * usedInSolution_
Array marked whenever a solution is found if non-zero.
int getIntParam(CbcIntParam key) const
Get an integer parameter.
void passInMessageHandler(CoinMessageHandler *handler)
Pass in Message handler (not deleted at end)
double getInfeasibilityWeight() const
Get the weight per integer infeasibility .
Validate cuts against a known solution.
int presolve_
Presolve for CbcTreeLocal.
CbcThread * masterThread_
Pointer to masterthread.
void addUpdateInformation(const CbcObjectUpdateData &data)
Adds an update information object.
int maximumNumberIterations() const
Get maximum number of iterations (designed to be used in heuristics)
CbcCutGenerator * virginCutGenerator(int i) const
Get the specified cut generator before any changes.
void resetModel()
Clears out enough to reset CbcModel cutoff etc.
void goToDantzig(int numberNodes, ClpDualRowPivot *&savePivotMethod)
Go to dantzig pivot selection if easy problem (clp only)
void addSOSEtcToSolver()
Add SOS info to solver - Overwrites SOS information in solver with information in CbcModel...
const OsiSolverInterface * postProcessedSolver(int solutionType=1)
Returns postProcessed solution in solver(called from event handler) Normally used for integer solutio...
CbcCutGenerator ** virginGenerator_
OsiBranchingInformation usefulInformation() const
Generate an OsiBranchingInformation object.
Class for preProcessing and postProcessing.
void getIntegerInformation(const OsiObject *object, double &originalLower, double &originalUpper)
So we can use osiObject or CbcObject during transition.
void setTemporaryPointer(void *pointer)
Set useful temporary pointer.
bool setIntParam(CbcIntParam key, int value)
Set an integer parameter.
void setMultipleRootTries(int value)
Set multiple root tries.
virtual const double * getObjCoefficients() const =0
Get a pointer to an array[getNumCols()] of objective function coefficients.
void fillPseudoCosts(double *downCosts, double *upCosts, int *priority=NULL, int *numberDown=NULL, int *numberUp=NULL, int *numberDownInfeasible=NULL, int *numberUpInfeasible=NULL) const
Return pseudo costs If not all integers or not pseudo costs - returns all zero Length of arrays are n...
CglTreeProbingInfo * probingInfo() const
Get a pointer to probing info.
int numberExtraIterations() const
Number of extra iterations.
virtual const CoinPackedMatrix * getMatrixByRow() const =0
Get a pointer to a row-wise copy of the matrix.
std::vector< std::pair< std::string, double > > mipStart_
MIPstart values values for integer variables which will be converted to a complete integer initial fe...
int numberOldActiveCuts_
Number of old active cuts.
void AddIntegers()
Add additional integers.
int maximumSavedSolutions() const
Maximum number of extra saved solutions.
bool solveWithCuts(OsiCuts &cuts, int numberTries, CbcNode *node)
Evaluate a subproblem using cutting planes and heuristics.
const OsiBabSolver * solverCharacteristics() const
Get solver characteristics.
CbcStrategy * strategy() const
Get the current strategy.
int getMaximumSolutions() const
Get the maximum number of solutions desired.
void setContinuousInfeasibilities(int value)
int reducedCostFix()
Perform reduced cost fixing.
void saveSolution(const ClpSimplex *lpSolver, std::string fileName)
const double * testSolution_
For testing infeasibilities - will point to currentSolution_ or solver–>getColSolution() ...
bool setMaximumSeconds(double value)
Set the maximum number of seconds desired.
virtual const double * getRowUpper() const =0
Get a pointer to an array[getNumRows()] of row upper bounds.
Interface between Cbc and Cut Generation Library.
void deleteSavedSolution(int which)
Delete a saved solution and move others up.
void setObjectiveValue(CbcNode *thisNode, const CbcNode *parentNode) const
Set objective value in a node.
virtual const double * getReducedCost() const =0
Get a pointer to an array[getNumCols()] of reduced costs.
virtual const double * getRowLower() const =0
Get a pointer to an array[getNumRows()] of row lower bounds.
void setTypePresolve(int value)
void deleteObjects(bool findIntegers=true)
Delete all object information (and just back to integers if true)
double getMaximumSeconds() const
Get the maximum number of seconds desired.
bool setCutoffIncrement(double value)
Set the CbcModel::CbcCutoffIncrement desired.
int numberPenalties_
The number of variables for which to compute penalties in dynamic strong branching.
bool setHeuristicGap(double value)
Set the heuristic gap between the best known solution and the best possible solution.
CbcModel * findCliques(bool makeEquality, int atLeastThisMany, int lessThanThis, int defaultValue=1000)
Identify cliques and construct corresponding objects.
double getHeuristicFractionGap() const
Get the fraction heuristic gap between the best known solution and the best possible solution...
The maximum amount the value of an integer variable can vary from integer and still be considered fea...
Abstract base class for `objects'.
virtual const double * getRowRange() const =0
Get a pointer to an array[getNumRows()] of row ranges.
void addCutGenerator(CglCutGenerator *generator, int howOften=1, const char *name=NULL, bool normal=true, bool atSolution=false, bool infeasible=false, int howOftenInSub=-100, int whatDepth=-1, int whatDepthInSub=-1)
Add one generator - up to user to delete generators.
Stop when the gap between the objective value of the best known solution and the best bound on the ob...
void addHeuristic(CbcHeuristic *generator, const char *name=NULL, int before=-1)
Add one heuristic - up to user to delete.
void assignSolver(OsiSolverInterface *&solver, bool deleteSolver=true)
Assign a solver to the model (model assumes ownership)
OsiSolverInterface * swapSolver(OsiSolverInterface *solver)
Returns current solver - sets new one.
bool waitingForMiniBranchAndBound() const
Says if model is sitting there waiting for mini branch and bound to finish This is because an event h...
double getDblParam(CbcDblParam key) const
Get a double parameter.
int numberExtraIterations_
Number of extra iterations in fast lp.
OsiObject * modifiableObject(int which) const
Get the specified object.
const double * getCbcRowPrice() const
Get pointer to array[getNumRows()] (for speed) of dual prices.
void setPreferredWay(int value)
Set global preferred way to branch -1 down, +1 up, 0 no preference.
int * originalColumns_
Original columns as created by integerPresolve or preprocessing.
CoinThreadRandom randomNumberGenerator_
Thread specific random number generator.
Dual Row Pivot Abstract Base Class.
double getBestPossibleObjValue() const
Get best possible objective function value.
const double * getRowLower() const
Get pointer to array[getNumRows()] of row lower bounds.
void gutsOfDestructor()
Clears out as much as possible (except solver)
const int * strongInfo() const
Return strong info.
int numberThreads_
Parallel 0 - off 1 - testing 2-99 threads other special meanings.
Simple Branch and bound class.
void saveExtraSolution(const double *solution, double objectiveValue)
Save a solution to saved list.
OsiSolverInterface * referenceSolver() const
A copy of the solver, taken at constructor or by saveReferenceSolver.
Abstract base class for warm start information.
void * temporaryPointer() const
Get useful temporary pointer.
void findIntegers(bool startAgain, int type=0)
Identify integer variables and create corresponding objects.
bool resolveAfterTakeOffCuts() const
Whether to force a resolve after takeOffCuts.
int randomSeed_
Random seed.
void setStopNumberIterations(int value)
Set number of "iterations" to stop after.
void setCutModifier(CbcCutModifier *modifier)
Set the cut modifier method.
void setSpecialOptions(int value)
Set special options 0 bit (1) - check if cuts valid (if on debugger list) 1 bit (2) - use current bas...
CbcFeasibilityBase * problemFeasibility() const
void saveModel(OsiSolverInterface *saveSolver, double *checkCutoffForRestart, bool *feasible)
Save copy of the model.
int makeGlobalCut(const OsiRowCut *cut)
Make given cut into a global cut.
const double * getCbcRowActivity() const
Get pointer to array[getNumRows()] (for speed) of row activity levels.
int moreSpecialOptions_
More special options at present bottom 6 bits used for shadow price mode 1024 for experimental hotsta...
int currentNumberCuts_
Number of entries in addedCuts_.
void setNextRowCut(const OsiRowCut &cut)
Copy and set a pointer to a row cut which will be added instead of normal branching.
Class to hold and manipulate an array of massaged messages.
CbcCutGenerator * cutGenerator(int i) const
Get the specified cut generator.
void originalModel(CbcModel *presolvedModel, bool weak)
Put back information into the original model after integer presolve.
int numberGlobalViolations_
Number of times global cuts violated.
void pseudoShadow(int type)
Fill in useful estimates.
bool doCutsNow(int allowForTopOfTree) const
Return true if we want to do cuts If allowForTopOfTree zero then just does on multiples of depth if 1...
int numberHeuristics_
Number of heuristics.
void passInSubTreeModel(CbcModel &model)
For passing in an CbcModel to do a sub Tree (with derived tree handlers).
Class for thread specific random numbers.
bool isInitialSolveProvenDualInfeasible() const
Is dual infeasiblity proven (for initialSolve) ?
virtual ~CbcModel()
Destructor.
A class to encapsulate thread stuff.
double * hotstartSolution_
Hotstart solution.
void mergeModels(int numberModel, CbcModel **model, int numberNodes)
Merge models.
const int * hotstartPriorities() const
Get the hotstart priorities.
void adjustHeuristics()
Adjust heuristics based on model.
double sumChangeObjective() const
Sum of Changes to objective by first solve.
const int * integerVariable() const
virtual void setObjSense(double s)=0
Set the objective function sense.
int maximumWhich_
Maximum number of cuts (for whichGenerator_)
double bestPossibleObjective_
Best possible objective.
void moveInfo(const CbcModel &rhs)
Move status, nodes etc etc across.
int priority(int sequence) const
Returns priority level for an object (or 1000 if no priorities exist)
int getFathomCount() const
Get how many times complete fathoming B&B was done.
virtual const double * getColUpper() const =0
Get a pointer to an array[getNumCols()] of column upper bounds.