46 ClpModel(
bool emptyMessages =
false);
63 bool dropNames =
true,
bool dropIntegers =
true);
82 const double *collb,
const double *colub,
84 const double *rowlb,
const double *rowub,
87 const double *collb,
const double *colub,
89 const double *rowlb,
const double *rowub,
94 void loadProblem(
const int numcols,
const int numrows,
97 const double *collb,
const double *colub,
99 const double *rowlb,
const double *rowub,
108 void loadProblem(
const int numcols,
const int numrows,
110 const double *value,
const int *length,
111 const double *collb,
const double *colub,
113 const double *rowlb,
const double *rowub,
118 const int *column,
const double *element);
125 int readMps(
const char *filename,
126 bool keepNames =
false,
127 bool ignoreErrors =
false);
129 int readGMPL(
const char *filename,
const char *dataName,
130 bool keepNames =
false);
142 void resize(
int newNumberRows,
int newNumberColumns);
144 void deleteRows(
int number,
const int *which);
146 void addRow(
int numberInRow,
const int *columns,
153 const double *elements);
159 const double *elements);
160 #ifndef CLP_NO_VECTOR 171 bool checkDuplicates =
true);
181 bool checkDuplicates =
true);
191 const double *elements,
200 const double *elements);
204 const CoinBigIndex *columnStarts,
const int *columnLengths,
206 const double *elements);
207 #ifndef CLP_NO_VECTOR 219 bool checkDuplicates =
true);
228 bool checkDuplicates =
true);
231 bool keepZero =
false)
280 void setRowName(
int rowIndex, std::string &name);
291 int findNetwork(
char *rotate,
double fractionNeeded = 0.75);
309 int formatType = 0,
int numberAcross = 2,
310 double objSense = 0.0)
const;
573 double lower,
double upper);
584 const int *indexLast,
585 const double *boundList);
602 double lower,
double upper)
614 const int *indexLast,
615 const double *boundList)
622 void setRowLower(
int elementIndex,
double elementValue);
626 void setRowUpper(
int elementIndex,
double elementValue);
630 double lower,
double upper);
639 const int *indexLast,
640 const double *boundList);
643 inline const double *
rowScale()
const 722 inline double *
objective(
const double *solution,
double &offset,
bool refresh =
true)
const 832 bool deleteCurrent =
false)
859 inline double *
ray()
const 866 return (
ray_ != NULL);
1029 inline const std::vector< std::string > *
rowNames()
const 1063 int emptyProblem(
int *infeasNumber = NULL,
double *infeasSum = NULL,
bool printMessage =
true);
1075 void times(
double scalar,
1076 const double *x,
double *y)
const;
1081 const double *x,
double *y)
const;
1185 #define COIN_CBC_USING_CLP 0x01000000 1202 void getRowBound(
int iRow,
double &lower,
double &upper)
const;
1205 const double *collb,
const double *colub,
1207 const double *rowlb,
const double *rowub,
1330 #define ROW_COLUMN_COUNTS_SAME 1 1331 #define MATRIX_SAME 2 1332 #define MATRIX_JUST_ROWS_ADDED 4 1333 #define MATRIX_JUST_COLUMNS_ADDED 8 1334 #define ROW_LOWER_SAME 16 1335 #define ROW_UPPER_SAME 32 1336 #define OBJECTIVE_SAME 64 1337 #define COLUMN_LOWER_SAME 128 1338 #define COLUMN_UPPER_SAME 256 1339 #define BASIS_SAME 512 1340 #define ALL_SAME 65339 1341 #define ALL_SAME_EXCEPT_COLUMN_BOUNDS 65337
CoinThreadRandom * randomNumberGenerator()
Thread specific random number generator.
ClpDataSave & operator=(const ClpDataSave &rhs)
Assignment operator. This copies the data.
~ClpDataSave()
Destructor.
CoinBigIndex getNumElements() const
Number of elements in matrix.
double optimizationDirection_
Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
double primalTolerance() const
Primal tolerance to use.
double * savedColumnScale_
Saved column scale factors.
void setClpScaledMatrix(ClpPackedMatrix *scaledMatrix)
Sets pointer to scaled ClpPackedMatrix.
double objectiveScale_
Scaling of objective.
The maximum amount the primal constraints can be violated and still be considered feasible.
bool getDblParam(ClpDblParam key, double &value) const
void startPermanentArrays()
Start using maximumRows_ and Columns_.
const std::string & columnName(int iColumn) const
unsigned char * statusArray() const
Return address of status (i.e. basis) array (char[numberRows+numberColumns])
The maximum number of iterations Clp can execute in the simplex methods.
double * inverseColumnScale_
Inverse column scale factors for matrix (end of columnScale_)
void copy(const ClpMatrixBase *from, ClpMatrixBase *&to)
Copy contents - resizing if necessary - otherwise re-use memory.
bool setIntParam(ClpIntParam key, int value)
Set an integer parameter.
void gutsOfDelete(int type)
Does most of deletion (0 = all, 1 = most)
double * primalColumnSolution() const
Primal column solution.
double objectiveScale() const
Scaling of objective.
bool isInteger(int index) const
Return true if the index-th variable is an integer variable.
double * rowUpper_
Row upper.
double dblParam_[ClpLastDblParam]
Array of double parameters.
int secondaryStatus_
Secondary status of problem.
CoinMessages coinMessages() const
Return Coin messages.
unsigned char * statusCopy() const
Return copy of status (i.e.
void copyColumnNames(const std::vector< std::string > &columnNames, int first, int last)
Copies in Column names - modifies names first .. last-1.
double * columnScale_
Column scale factors.
bool isProvenPrimalInfeasible() const
Is primal infeasiblity proven?
void setColumnName(int colIndex, std::string &name)
Set name of col.
void setObjectivePointer(ClpObjective *newobjective)
void setContinuous(int index)
Set the index-th variable to be a continuous variable.
double * ray() const
For advanced users - no need to delete - sign not changed.
void getRowBound(int iRow, double &lower, double &upper) const
gets lower and upper bounds on rows
ClpMatrixBase * rowCopy_
Row copy if wanted.
void setRowUpper(int elementIndex, double elementValue)
Set a single row upper bound Use DBL_MAX for infinity.
void setColUpper(int elementIndex, double elementValue)
Set a single column upper bound Use DBL_MAX for infinity.
std::string strParam_[ClpLastStrParam]
Array of string parameters.
bool isIterationLimitReached() const
Iteration limit reached?
ClpIntParam
This is where to put any useful stuff.
void copyInIntegerInformation(const char *information)
Copy in integer informations.
void setMaximumWallSeconds(double value)
void setObjectiveOffset(double value)
void copyRowNames(const std::vector< std::string > &rowNames, int first, int last)
Copies in Row names - modifies names first .. last-1.
void deleteIntegerInformation()
Drop integer informations.
double * mutableColumnScale() const
Abstract base class for Clp Matrices.
int numberColumns() const
const double * getColUpper() const
int maximumRows_
Maximum number of rows in model.
void setMaximumSeconds(double value)
CoinMessages messages_
Messages.
double * objective() const
Objective.
void setObjectiveCoefficient(int elementIndex, double elementValue)
Set an objective function coefficient.
bool setStrParam(ClpStrParam key, const std::string &value)
Set an string parameter.
const char *const * columnNamesAsChar() const
Create column names as char **.
const double * inverseRowScale() const
void addColumns(int number, const double *columnLower, const double *columnUpper, const double *objective, const CoinBigIndex *columnStarts, const int *rows, const double *elements)
Add columns.
bool rayExists() const
just test if infeasibility or unbounded Ray exists
int writeMps(const char *filename, int formatType=0, int numberAcross=2, double objSense=0.0) const
Write the problem in MPS format to the specified file.
double * reducedCost_
Reduced costs.
int findNetwork(char *rotate, double fractionNeeded=0.75)
Find a network subset.
double dualTolerance() const
Dual tolerance to use.
bool getStrParam(ClpStrParam key, std::string &value) const
For a structure to be used by trusted code.
ClpMatrixBase * matrix_
Packed matrix.
CoinMessages coinMessages_
Coin messages.
bool isDualObjectiveLimitReached() const
Is the given dual objective limit reached?
CoinMessages * coinMessagesPointer()
Return pointer to Coin messages.
int solveType() const
Solve type - 1 simplex, 2 simplex interface, 3 Interior.
void setObjectiveScale(double value)
ClpMatrixBase * rowCopy() const
Row Matrix.
double * rowLower() const
Row lower.
const char *const * rowNamesAsChar() const
Create row names as char **.
double * columnLower() const
Column Lower.
bool hitMaximumIterations() const
Returns true if hit maximum iterations (or time)
int numberRows_
Number of rows.
int solveType_
Solve type - 1 simplex, 2 simplex interface, 3 Interior.
CoinMessageHandler * pushMessageHandler(CoinMessageHandler *handler, bool &oldDefault)
Pass in Message handler (not deleted at end) and return current.
void setDefaultMessageHandler()
Overrides message handler with a default one.
void setPrimalObjectiveLimit(double value)
Maximum time in seconds - after, this action is as max iterations.
int numberIterations_
Number of iterations.
double optimizationDirection() const
Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
const double * getColSolution() const
double * columnUpper() const
Column Upper.
void setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList)
Set the bounds on a number of rows simultaneously
void addRow(int numberInRow, const int *columns, const double *elements, double rowLower=-COIN_DBL_MAX, double rowUpper=COIN_DBL_MAX)
Add one row.
CoinPackedMatrix * matrix() const
Matrix (if not ClpPackedmatrix be careful about memory leak.
double * rowObjective_
Row Objective (? sign) - may be NULL.
ClpObjective * objectiveAsObject() const
Objective methods.
bool permanentArrays() const
If we are using maximumRows_ and Columns_.
ClpEventHandler * eventHandler() const
Event handler.
ClpPackedMatrix * clpScaledMatrix() const
Scaled ClpPackedMatrix.
void setColSolution(const double *input)
Objective Abstract Base Class.
void gutsOfScaling()
Does much of scaling.
int getIterationCount() const
int maximumInternalRows_
Maximum number of rows (internal arrays) in model.
int maximumInternalColumns_
Maximum number of columns (internal arrays) in model.
void setInteger(int index)
Set the index-th variable to be an integer variable.
void setWhatsChanged(int value)
double * unboundedRay() const
virtual CoinPackedMatrix * getPackedMatrix() const =0
Return a complete CoinPackedMatrix.
void replaceMatrix(CoinPackedMatrix *newmatrix, bool deleteCurrent=false)
Replace Clp Matrix (current is not deleted unless told to and new is used) So up to user to delete cu...
void stopPermanentArrays()
Stop using maximumRows_ and Columns_.
double * swapRowScale(double *newScale)
bool inCbcBranchAndBound() const
CoinMessages * messagesPointer()
Return pointer to messages.
CoinThreadRandom randomNumberGenerator_
Thread specific random number generator.
Set Dual objective limit.
int secondaryStatus() const
Secondary status of problem - may get extended 0 - none 1 - primal infeasible because dual limit reac...
void setRowName(int rowIndex, std::string &name)
Set name of row.
void setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList)
Set the bounds on a number of columns simultaneously
void newLanguage(CoinMessages::Language language)
Set language.
const double * getRowObjCoefficients() const
const std::string & problemName() const
unsigned int whatsChanged_
double maximumSeconds() const
Maximum time in seconds (from when set called)
void onStopped()
On stopped - sets secondary status.
void setRhsScale(double value)
int readMps(const char *filename, bool keepNames=false, bool ignoreErrors=false)
Read an mps file from the given filename.
double rawObjectiveValue() const
Objective value - always minimize.
void createEmptyMatrix()
Create empty ClpPackedMatrix.
#define COIN_CBC_USING_CLP
void setColumnBounds(int elementIndex, double lower, double upper)
Set a single column lower and upper bound.
double rhsScale() const
Scaling of rhs and bounds.
double * inverseRowScale_
Inverse row scale factors for matrix (end of rowScale_)
CoinMessageHandler * messageHandler() const
Return handler.
char * integerType_
Integer information.
The maximum amount the dual constraints can be violated and still be considered feasible.
void setDualObjectiveLimit(double value)
int scalingFlag() const
Gets scalingFlag.
double getSmallElementValue() const
Small element value - elements less than this set to zero, default is 1.0e-20.
void setNumberIterations(int numberIterationsNew)
std::vector< std::string > rowNames_
Row names.
char * integerInformation() const
Integer information.
void setObjective(ClpObjective *objective)
void setRowBounds(int elementIndex, double lower, double upper)
Set a single row lower and upper bound.
void popMessageHandler(CoinMessageHandler *oldHandler, bool oldDefault)
back to previous message handler
Just a marker, so that we can allocate a static sized array to store parameters.
void generateCpp(FILE *fp)
Create C++ lines to get to current state.
void addColumn(int numberInColumn, const int *rows, const double *elements, double columnLower=0.0, double columnUpper=COIN_DBL_MAX, double objective=0.0)
Add one column.
ClpPackedMatrix * scaledMatrix_
Scaled packed matrix.
double * mutableRowScale() const
void scaling(int mode=1)
Sets or unsets scaling, 0 -off, 1 equilibrium, 2 geometric, 3 auto, 4 auto-but-as-initialSolve-in-bab...
const double * getReducedCost() const
void setOptimizationDirection(double value)
int lengthNames_
length of names (0 means no names)
ClpMatrixBase * clpMatrix() const
Clp Matrix.
void gutsOfCopy(const ClpModel &rhs, int trueCopy=1)
Does most of copying If trueCopy 0 then just points to arrays If -1 leaves as much as possible.
bool getIntParam(ClpIntParam key, int &value) const
void loadQuadraticObjective(const int numberColumns, const CoinBigIndex *start, const int *column, const double *element)
Load up quadratic objective.
const double * getRowLower() const
void chgObjCoefficients(const double *objIn)
Change objective coefficients.
const double * rowScale() const
Scaling.
double * columnUpper_
Column Upper.
CoinPackedMatrix baseMatrix_
Base packed matrix.
void times(double scalar, const double *x, double *y) const
Return y + A * x * scalar in y.
double * mutableInverseColumnScale() const
void deleteQuadraticObjective()
Get rid of quadratic objective.
void setSolveType(int type)
CoinMessages messages() const
Return messages.
void setRowLower(int elementIndex, double elementValue)
Set a single row lower bound Use -DBL_MAX for -infinity.
void setSpecialOptions(unsigned int value)
void setMaximumIterations(int value)
bool statusExists() const
See if status (i.e. basis) array exists (partly for OsiClp)
int lengthNames() const
length of names (0 means no names0
double * ray_
Infeasible/unbounded ray.
double zeroSimplexTolerance_
double * dualColumnSolution() const
Reduced costs.
double objectiveOffset() const
Objective offset.
void transposeTimes(double scalar, const double *x, double *y) const
Return y + x * scalar * A in y.
int numberColumns_
Number of columns.
Objective function constant.
void * getUserPointer() const
int scalingFlag_
Scale flag, 0 none, 1 equilibrium, 2 geometric, 3, auto, 4 dynamic, 5 geometric on rows.
This is a tiny class where data can be saved round calls.
void setObjCoeff(int elementIndex, double elementValue)
Set an objective function coefficient.
double * dualRowSolution() const
Dual row solution.
const double * getRowActivity() const
double objectiveValue() const
Objective value.
std::string getColumnName(int iColumn) const
Return name or Cnnnnnnn.
ClpTrustedData * getTrustedUserPointer() const
bool defaultHandler_
Flag to say if default handler (so delete)
double getObjValue() const
void setNumberThreads(int value)
void setLengthNames(int value)
length of names (0 means no names0
double * rowScale_
Row scale factors for matrix.
void deleteRows(int number, const int *which)
Deletes rows.
void chgRowLower(const double *rowLower)
Change row lower bounds.
bool isAbandoned() const
Are there a numerical difficulties?
void setNewRowCopy(ClpMatrixBase *newCopy)
Set new row matrix.
const std::string & rowName(int iRow) const
int emptyProblem(int *infeasNumber=NULL, double *infeasSum=NULL, bool printMessage=true)
Solve a problem with no elements - return status and dual and primal infeasibilites.
virtual CoinBigIndex getNumElements() const =0
Number of entries in the packed matrix.
void setDualTolerance(double value)
const double * getColLower() const
void setSmallElementValue(double value)
void chgRowUpper(const double *rowUpper)
Change row upper bounds.
ClpDataSave()
Default constructor.
void deleteNamesAsChar(const char *const *names, int number) const
Delete char * version of names.
double getObjSense() const
const double * internalRay() const
Access internal ray storage. Users should call infeasibilityRay() or unboundedRay() instead.
double * rowUpper() const
Row upper.
void setObjectiveValue(double value)
unsigned int specialOptions_
double dualObjectiveLimit() const
Dual objective limit.
ClpModel & operator=(const ClpModel &rhs)
Assignment operator. This copies the data.
void replaceMatrix(ClpMatrixBase *matrix, bool deleteCurrent=false)
Replace Clp Matrix (current is not deleted unless told to and new is used) So up to user to delete cu...
int whatsChanged() const
What has changed in model (only for masochistic users)
ClpEventHandler * eventHandler_
Event handler.
void setLanguage(CoinMessages::Language language)
bool defaultHandler() const
Return true if default handler.
void setProblemStatus(int problemStatusNew)
Set problem status.
bool isProvenOptimal() const
Is optimality proven?
const double * getRowPrice() const
CoinBigIndex cleanMatrix(double threshold=1.0e-20)
Really clean up matrix (if ClpPackedMatrix).
void resize(int newNumberRows, int newNumberColumns)
Resizes rim part of model.
void loadProblem(const ClpMatrixBase &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub, const double *rowObjective=NULL)
Loads a problem (the constraints on the rows are given by lower and upper bounds).
CoinPackedMatrix baseRowCopy_
Base row copy.
void deleteRay()
just delete ray if exists
void setPrimalTolerance(double value)
int numberThreads_
Number of threads (not very operational)
Base class for Clp event handling.
double * mutableInverseRowScale() const
void setColLower(int elementIndex, double elementValue)
Set a single column lower bound Use -DBL_MAX for -infinity.
void setRowObjective(const double *rowObjective)
This just loads up a row objective.
void modifyCoefficient(int row, int column, double newElement, bool keepZero=false)
Modify one element of a matrix.
CoinThreadRandom & mutableRandomNumberGenerator()
Thread specific random number generator.
Just a marker, so that we can allocate a static sized array to store parameters.
unsigned int specialOptions() const
For advanced options 1 - Don't keep changing infeasibility weight 2 - Keep nonLinearCost round solves...
double infeasibilityCost_
void copyNames(const std::vector< std::string > &rowNames, const std::vector< std::string > &columnNames)
Copies in names.
double smallElement_
Small element value.
void passInEventHandler(const ClpEventHandler *eventHandler)
Pass in Event handler (cloned and deleted at end)
int numberIterations() const
Number of iterations.
void setColumnSetBounds(const int *indexFirst, const int *indexLast, const double *boundList)
Set the bounds on a number of columns simultaneously The default implementation just invokes setColL...
int numberRows() const
Number of rows.
void copyinStatus(const unsigned char *statusArray)
Copy in status (basis) vector.
CoinMessageHandler * handler_
Message handler.
unsigned char * status_
Status (i.e.
const double * getObjCoefficients() const
double rhsScale_
Scaling of rhs and bounds.
bool setDblParam(ClpDblParam key, double value)
Set an double parameter.
void setLogLevel(int value)
Amount of print out: 0 - none 1 - just final 2 - just factorizations 3 - as 2 plus a bit more 4 - ver...
int problemStatus() const
void deleteRowsAndColumns(int numberRows, const int *whichRows, int numberColumns, const int *whichColumns)
Deletes rows AND columns (keeps old sizes)
void setRandomSeed(int value)
Set seed for thread specific random number generator.
double * rowActivity_
Row activities.
void deleteColumns(int number, const int *which)
Deletes columns.
const std::vector< std::string > * columnNames() const
Column names.
double * primalRowSolution() const
Primal row solution.
const double * inverseColumnScale() const
double * columnActivity_
Column activities.
ClpObjective * objective_
Objective.
double zeroFactorizationTolerance_
std::vector< std::string > columnNames_
Column names.
int problemStatus_
Status of problem.
ClpModel(bool emptyMessages=false)
Default constructor.
void addRows(int number, const double *rowLower, const double *rowUpper, const CoinBigIndex *rowStarts, const int *columns, const double *elements)
Add rows.
double presolveTolerance() const
Presolve tolerance to use.
double * rowLower_
Row lower.
double * rowObjective() const
Row Objective.
void setColumnUpper(int elementIndex, double elementValue)
Set a single column upper bound Use DBL_MAX for infinity.
void setSecondaryStatus(int newstatus)
void chgColumnUpper(const double *columnUpper)
Change column upper bounds.
void setColBounds(int elementIndex, double lower, double upper)
Set a single column lower and upper bound.
double primalObjectiveLimit() const
Primal objective limit.
int numberThreads() const
Number of threads (not really being used)
const double * columnScale() const
void setRowScale(double *scale)
const double COIN_DBL_MAX
void setColumnScale(double *scale)
int status() const
Status of problem: -1 - unknown e.g.
double * objective(const double *solution, double &offset, bool refresh=true) const
void dropNames()
Drops names - makes lengthnames 0 and names empty.
bool isProvenDualInfeasible() const
Is dual infeasiblity proven?
int getNumCols() const
Number of columns.
ClpPackedMatrix * swapScaledMatrix(ClpPackedMatrix *scaledMatrix)
Swaps pointer to scaled ClpPackedMatrix.
double objectiveValue_
Objective value.
void gutsOfLoadModel(int numberRows, int numberColumns, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub, const double *rowObjective=NULL)
puts in format I like - 4 array matrix - may make row copy
void returnModel(ClpModel &otherModel)
Return model - nulls all arrays so can be deleted safely also updates any scalars.
int maximumIterations() const
Maximum number of iterations.
Tolerance to use in presolve.
void setTrustedUserPointer(ClpTrustedData *pointer)
Trusted user pointer.
int readGMPL(const char *filename, const char *dataName, bool keepNames=false)
Read GMPL files from the given filenames.
void borrowModel(ClpModel &otherModel)
Borrow model.
int maximumColumns_
Maximum number of columns in model.
std::string getRowName(int iRow) const
Return name or Rnnnnnnn.
Just a marker, so that we can allocate a static sized array to store parameters.
virtual double * gradient(const ClpSimplex *model, const double *solution, double &offset, bool refresh, int includeLinear=2)=0
Returns gradient.
void * userPointer_
User pointer for whatever reason.
void passInMessageHandler(CoinMessageHandler *handler)
Pass in Message handler (not deleted at end)
void setUserPointer(void *pointer)
User pointer for whatever reason.
void chgColumnLower(const double *columnLower)
Change column lower bounds.
double * columnLower_
Column Lower.
void unscale()
If we constructed a "really" scaled model then this reverses the operation.
void setLogLevel(int value)
virtual void modifyCoefficient(int row, int column, double newElement, bool keepZero=false)
Modify one element of packed matrix.
ClpTrustedData * trustedUserPointer_
Trusted user pointer e.g. for heuristics.
int intParam_[ClpLastIntParam]
Array of integer parameters.
double * infeasibilityRay(bool fullRay=false) const
Infeasibility/unbounded ray (NULL returned if none/wrong) Up to user to use delete [] on these arrays...
bool isPrimalObjectiveLimitReached() const
Is the given primal objective limit reached?
const double * getRowUpper() const
double * savedRowScale_
Saved row scale factors for matrix.
CoinModel * createCoinModel() const
This creates a coinModel object.
void setColumnLower(int elementIndex, double elementValue)
Set a single column lower bound Use -DBL_MAX for -infinity.
const std::vector< std::string > * rowNames() const
Row names.
unsigned int specialOptions_
For advanced options See get and set for meaning.