167 void addRow(
int numberInRow,
const int * columns,
171 void addColumn(
int numberInColumn,
const int * rows,
172 const double * elements,
175 const char * name=NULL,
bool isInteger=
false);
177 inline void addCol(
int numberInColumn,
const int * rows,
178 const double * elements,
181 const char * name=NULL,
bool isInteger=
false)
194 int getRow(
int whichRow,
int *
column,
double * element);
207 void setElement(
int i,
int j,
const char * value) ;
413 int writeMps(
const char *filename,
int compression = 0,
414 int formatType = 0,
int numberAcross = 2,
bool keepStrings=
false) ;
433 {
return packedMatrix_;}
439 {
return columnType_;}
447 {
return numberElements_;}
471 double *
pointer (
int i,
int j)
const;
531 inline const char *
rowName(
int whichRow)
const
653 {
return -1.23456787654321e-97;}
656 const double * associated);
663 const double * associated);
668 const double * associated);
672 double * &
objective,
int * & integerType,
673 double * & associated);
682 {
return associated_;}
691 {
return columnLower_;}
694 {
return columnUpper_;}
697 {
return objective_;}
700 {
return integerType_;}
706 {
return &columnName_;}
758 const double* collb,
const double* colub,
760 const double* rowlb,
const double* rowub) ;
778 const double* collb,
const double* colub,
780 const char* rowsen,
const double* rowrhs,
781 const double* rowrng) ;
795 void loadBlock (
const int numcols,
const int numrows,
798 const double* collb,
const double* colub,
800 const double* rowlb,
const double* rowub) ;
814 void loadBlock (
const int numcols,
const int numrows,
817 const double* collb,
const double* colub,
819 const char* rowsen,
const double* rowrhs,
820 const double* rowrng) ;
829 CoinModel(
int firstRows,
int firstColumns,
int firstElements,
bool noNames=
false);
832 CoinModel(
const char *fileName,
int allowStrings=0);
836 CoinModel(
int nonLinear,
const char * fileName,
const void * info);
865 void resize(
int maximumRows,
int maximumColumns,
int maximumElements);
867 void fillRows(
int which,
bool forceCreation,
bool fromAddRow=
false);
869 void fillColumns(
int which,
bool forceCreation,
bool fromAddColumn=
false);
876 void createList(
int type)
const;
878 int addString(
const char *
string);
882 double getDoubleFromString(
CoinYacc & info,
const char *
string);
884 void freeStringMemory(
CoinYacc & info);
894 int & numberBad)
const;
913 int * buildRow,
double * buildElement,
int reConstruct=-1)
const;
928 void gdb(
int nonLinear,
const char * fileName,
const void * info);
930 int decodeBit(
char * phrase,
char * & nextPhrase,
double & coefficient,
bool ifFirst)
const;
932 void badType()
const;
942 int maximumElements_;
944 int numberQuadraticElements_;
946 int maximumQuadraticElements_;
964 double * columnLower_;
966 double * columnUpper_;
1002 double * sortElements_;
1010 int sizeAssociated_;
1012 double * associated_;
1024 double * referenceSOS_;
const char * isIntegerAsString(int whichColumn) const
Gets if integer (if column does not exist then false)
void zapColumnNames()
Reset column names.
const char * columnLowerAsString(int whichColumn) const
Gets columnLower (if column does not exist then 0.0)
double columnUpper(int whichColumn) const
Gets columnUpper (if column does not exist then COIN_DBL_MAX)
void setRowBounds(int whichRow, double rowLower, double rowUpper)
Sets rowLower and rowUpper (if row does not exist then all rows up to this are defined with default v...
void setColumnObjective(int whichColumn, double columnObjective)
Sets columnObjective (if column does not exist then all columns up to this are defined with default v...
void setColIsInteger(int whichColumn, bool columnIsInteger)
Sets integer (if column does not exist then all columns up to this are defined with default values an...
double * associatedArray() const
Returns associated array.
void setPriorities(int size, const int *priorities)
Sets priority array.
int packCols()
Packs down all columns i.e.
CoinMessageHandler * handler_
Message handler (Passed in)
double unsetValue() const
returns unset value
const CoinModelHash * rowNames() const
Return row names array.
const int * priorities() const
priorities (given for all columns (-1 if not integer)
void createPlusMinusOne(CoinBigIndex *startPositive, CoinBigIndex *startNegative, int *indices, const double *associated)
Creates +-1 matrix given startPositive and startNegative counts for +-1 matrix.
double optimizationDirection() const
Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
CoinModelLink firstInQuadraticColumn(int whichColumn) const
Returns first element in given quadratic column - index is -1 if none.
const char * columnObjectiveAsString(int whichColumn) const
Gets columnObjective (if column does not exist then 0.0)
double optimizationDirection_
Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
const int * originalColumns() const
Return pointers to original columns (for decomposition)
double * rowUpperArray() const
Return rowUpper array.
void setColObjective(int whichColumn, double columnObjective)
Sets columnObjective (if column does not exist then all columns up to this are defined with default v...
void setRowLower(int whichRow, double rowLower)
Sets rowLower (if row does not exist then all rows up to this are defined with default values and no ...
const CoinModelHash * stringArray() const
Return string array.
int type() const
Returns type.
bool stringsExist() const
Says if strings exist.
const char * getColumnObjectiveAsString(int whichColumn) const
Gets columnObjective (if column does not exist then 0.0)
int row(const char *rowName) const
Row index from row name (-1 if no names or no match)
CoinModelLink previous(CoinModelLink ¤t) const
Returns previous element in current row or column - index is -1 if none.
void deleteCol(int whichColumn)
Deletes all entries in column and bounds.
const char * getColumnName(int whichColumn) const
Gets name (if column does not exist then NULL)
void setColumnBlock(const std::string &name)
Set column block name.
int getRow(int whichRow, int *column, double *element)
Gets sorted row - user must provide enough space (easiest is allocate number of columns).
CoinPackedMatrix * quadraticRow(int rowNumber, double *linear, int &numberBad) const
Gets correct form for a quadratic row - user to delete If row is not quadratic then returns which oth...
void setColLower(int numberColumns, const double *columnLower)
Sets columnLower array.
void operator()(int i, int j, double value)
Sets value for row i and column j.
virtual CoinBigIndex numberElements() const =0
Return number of elements.
This is for various structures/classes needed by CoinModel.
CoinModel * reorder(const char *mark) const
If possible return a model where if all variables marked nonzero are fixed the problem will be linear...
const char * columnUpperAsString(int whichColumn) const
Gets columnUpper (if column does not exist then COIN_DBL_MAX)
void setColumnIsInteger(int whichColumn, bool columnIsInteger)
Sets integer state (if column does not exist then all columns up to this are defined with default val...
int expandKnapsack(int knapsackRow, int &numberOutput, double *buildObj, CoinBigIndex *buildStart, int *buildRow, double *buildElement, int reConstruct=-1) const
Expands out all possible combinations for a knapsack If buildObj NULL then just computes space needed...
This is a simple minded model which is stored in a format which makes it easier to construct and modi...
double rowLower(int whichRow) const
const char * getColumnIsIntegerAsString(int whichColumn) const
Gets if integer (if column does not exist then false)
void passInMatrix(const CoinPackedMatrix &matrix)
Pass in CoinPackedMatrix (and switch off element updates)
const char * getProblemName() const
Return the problem name.
int pack()
Packs down all rows and columns.
double optimizationDirection() const
Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
Base class for message handling.
bool columnIsInteger(int whichColumn) const
Gets if integer (if column does not exist then false)
int createPackedMatrix(CoinPackedMatrix &matrix, const double *associated)
Creates a packed matrix - return number of errors.
int createArrays(double *&rowLower, double *&rowUpper, double *&columnLower, double *&columnUpper, double *&objective, int *&integerType, double *&associated)
Creates copies of various arrays - return number of errors.
void setIsInteger(int whichColumn, bool columnIsInteger)
Sets integer state (if column does not exist then all columns up to this are defined with default val...
void * moreInfo() const
Return pointer to more information.
int convertMatrix()
Convert elements to CoinPackedMatrix (and switch off element updates).
double getElement(int i, int j) const
Returns value for row i and column j.
void setQuadraticElement(int i, int j, double value)
Sets quadratic value for column i and j.
void addColumn(int numberInColumn, const int *rows, const double *elements, double columnLower=0.0, double columnUpper=COIN_DBL_MAX, double objectiveValue=0.0, const char *name=NULL, bool isInteger=false)
add a column - numberInColumn may be zero */
CoinModel()
Default constructor.
void deleteColumn(int whichColumn)
Deletes all entries in column and bounds and objective.
int whatIsSet() const
Returns which parts of model are set 1 - matrix 2 - rhs 4 - row names 8 - column bounds and/or object...
void setOptimizationDirection(double value)
Set direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
const char * getRowUpperAsString(int whichRow) const
Gets rowUpper (if row does not exist then +COIN_DBL_MAX)
void setRowName(int whichRow, const char *rowName)
Sets name (if row does not exist then all rows up to this are defined with default values and no elem...
int numberColumns() const
Return number of columns.
void setColName(int whichColumn, const char *columnName)
Sets name (if column does not exist then all columns up to this are defined with default values and n...
const char * rowLowerAsString(int whichRow) const
double getRowUpper(int whichRow) const
Gets rowUpper (if row does not exist then +COIN_DBL_MAX)
virtual ~CoinModel()
Destructor.
This is a first attempt at a message handler.
int packColumns()
Packs down all columns i.e.
virtual CoinBaseModel * clone() const
Clone.
double getQuadraticElement(int i, int j) const
Returns quadratic value for columns i and j.
void setContinuous(int whichColumn)
Sets continuous (if column does not exist then all columns up to this are defined with default values...
double * columnLowerArray() const
Return columnLower array.
void setColumnLower(int whichColumn, double columnLower)
Sets columnLower (if column does not exist then all columns up to this are defined with default value...
double objective(int whichColumn) const
Gets columnObjective (if column does not exist then 0.0)
const char * columnName(int whichColumn) const
Gets name (if column does not exist then NULL)
void deleteThisElement(int row, int column, int position)
Takes element out of matrix when position known.
CoinModelLink firstInColumn(int whichColumn) const
Returns first element in given column - index is -1 if none.
bool isInteger(int whichColumn) const
Gets if integer (if column does not exist then false)
const char * getColumnUpperAsString(int whichColumn) const
Gets columnUpper (if column does not exist then COIN_DBL_MAX)
double columnLower(int whichColumn) const
Gets columnLower (if column does not exist then 0.0)
double getColLower(int whichColumn) const
Gets columnLower (if column does not exist then 0.0)
void setMessageHandler(CoinMessageHandler *handler)
Pass in message handler.
const CoinPackedMatrix * packedMatrix() const
Return a pointer to CoinPackedMatrix (or NULL)
void deleteRow(int whichRow)
Deletes all entries in row and bounds.
const char * getElementAsString(int i, int j) const
Returns value for row i and column j as string.
void setColumnName(int whichColumn, const char *columnName)
Sets name (if column does not exist then all columns up to this are defined with default values and n...
CoinBaseModel()
Default Constructor.
double getColumnObjective(int whichColumn) const
Gets columnObjective (if column does not exist then 0.0)
const char * columnIsIntegerAsString(int whichColumn) const
Gets if integer (if column does not exist then false)
void setIsInteger(int whichColumn, const char *columnIsInteger)
Sets integer (if column does not exist then all columns up to this are defined with default values an...
double * columnUpperArray() const
Return columnUpper array.
CoinModel & operator=(const CoinModel &)
=
int deleteElement(int row, int column)
Takes element out of matrix - returning position (<0 if not there);.
double rowUpper(int whichRow) const
Gets rowUpper (if row does not exist then COIN_DBL_MAX)
std::string rowBlockName_
Rowblock name.
int differentModel(CoinModel &other, bool ignoreNames)
Check two models against each other.
void setMoreInfo(void *info)
Set pointer to more information.
void setColUpper(int whichColumn, double columnUpper)
Sets columnUpper (if column does not exist then all columns up to this are defined with default value...
void setColumnBounds(int whichColumn, double columnLower, double columnUpper)
Sets columnLower and columnUpper (if column does not exist then all columns up to this are defined wi...
CoinModelLink lastInColumn(int whichColumn) const
Returns last element in given column - index is -1 if none.
int numberColumns_
Current number of columns.
void setOriginalIndices(const int *row, const int *column)
For decomposition set original row and column indices.
Sparse Matrix Base Class.
int logLevel() const
Get print level 0 - off, 1 - errors, 2 - more.
int column(const char *columnName) const
Column index from column name (-1 if no names or no match)
int associateElement(const char *stringValue, double value)
Associates a string with a value. Returns string id (or -1 if does not exist)
CoinModelLink lastInRow(int whichRow) const
Returns last element in given row - index is -1 if none.
void setCutMarker(int size, const int *marker)
Sets cut marker array.
double getColUpper(int whichColumn) const
Gets columnUpper (if column does not exist then COIN_DBL_MAX)
const char * rowName(int whichRow) const
Gets name (if row does not exist then NULL)
CoinMessages messages_
Messages.
void setRowUpper(int whichRow, double rowUpper)
Sets rowUpper (if row does not exist then all rows up to this are defined with default values and no ...
virtual CoinBaseModel * clone() const =0
Clone.
bool getColIsInteger(int whichColumn) const
Gets if integer (if column does not exist then false)
int numberItems() const
Number of items i.e. rows if just row names.
void setProblemName(const char *name)
Set problem name.
void validateLinks() const
Checks that links are consistent.
double getRowLower(int whichRow) const
Gets rowLower (if row does not exist then -COIN_DBL_MAX)
int numberRows_
Current number of rows.
const char * objectiveAsString(int whichColumn) const
Gets columnObjective (if column does not exist then 0.0)
const std::string & getRowBlock() const
Return the row block name.
int writeMps(const char *filename, int compression=0, int formatType=0, int numberAcross=2, bool keepStrings=false)
Write the problem in MPS format to a file with the given filename.
void zapRowNames()
Reset row names.
const char * getColumnLowerAsString(int whichColumn) const
Gets columnLower (if column does not exist then 0.0)
double getColObjective(int whichColumn) const
Gets columnObjective (if column does not exist then 0.0)
void setColumnUpper(int whichColumn, double columnUpper)
Sets columnUpper (if column does not exist then all columns up to this are defined with default value...
void setObjective(int whichColumn, const char *columnObjective)
Sets columnObjective (if column does not exist then all columns up to this are defined with default v...
int getColumn(int whichColumn, int *column, double *element)
Gets sorted column - user must provide enough space (easiest is allocate number of rows)...
double objectiveOffset_
Objective offset to be passed on.
int position(int i, int j) const
Returns position in elements for row i column j.
int * integerTypeArray() const
Return integerType array.
int computeAssociated(double *associated)
Fills in all associated - returning number of errors.
const char * getRowName(int whichRow) const
Gets name (if row does not exist then NULL)
const char * getColName(int whichColumn) const
Gets name (if column does not exist then NULL)
double objectiveOffset() const
Returns the (constant) objective offset This is the RHS entry for the objective row.
const CoinModelHash * columnNames() const
Return column names array.
void setRowBlock(const std::string &name)
Set row block name.
void setElement(int i, int j, double value)
Sets value for row i and column j.
double getColumnUpper(int whichColumn) const
Gets columnUpper (if column does not exist then COIN_DBL_MAX)
std::string columnBlockName_
Columnblock name.
void setOptimizationDirection(double value)
Set direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
double columnObjective(int whichColumn) const
Gets columnObjective (if column does not exist then 0.0)
const std::string & getColumnBlock() const
Return the column block name.
int numberRows() const
Return number of rows.
double getDoubleFromString(CoinYacc &info, const char *string, const char *x, double xValue)
faster version
CoinBigIndex numberElements() const
Return number of elements.
const double COIN_DBL_MAX
void addCol(int numberInColumn, const int *rows, const double *elements, double columnLower=0.0, double columnUpper=COIN_DBL_MAX, double objectiveValue=0.0, const char *name=NULL, bool isInteger=false)
add a column - numberInColumn may be zero */
void setLogLevel(int value)
Set print level 0 - off, 1 - errors, 2 - more.
double * rowLowerArray() const
Return rowLower array.
CoinBaseModel & operator=(const CoinBaseModel &rhs)
Assignment operator.
int countPlusMinusOne(CoinBigIndex *startPositive, CoinBigIndex *startNegative, const double *associated)
Fills in startPositive and startNegative with counts for +-1 matrix.
double getColumnLower(int whichColumn) const
Gets columnLower (if column does not exist then 0.0)
const char * getRowLowerAsString(int whichRow) const
Gets rowLower (if row does not exist then -COIN_DBL_MAX)
void setColLower(int whichColumn, double columnLower)
Sets columnLower (if column does not exist then all columns up to this are defined with default value...
void loadBlock(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub)
Load in a problem by copying the arguments.
virtual ~CoinBaseModel()
Destructor.
bool getColumnIsInteger(int whichColumn) const
Gets if integer (if column does not exist then false)
CoinModelLink lastInQuadraticColumn(int whichColumn) const
Returns last element in given quadratic column - index is -1 if none.
int logLevel_
Print level.
void setColUpper(int numberColumns, const double *columnUpper)
Sets columnUpper array.
double * objectiveArray() const
Return objective array.
CoinModelLink firstInRow(int whichRow) const
Returns first element in given row - index is -1 if none.
void setInteger(int whichColumn)
Sets integer (if column does not exist then all columns up to this are defined with default values an...
void replaceQuadraticRow(int rowNumber, const double *linear, const CoinPackedMatrix *quadraticPart)
Replaces a quadratic row.
const int * originalRows() const
Return pointers to original rows (for decomposition)
CoinModelLink next(CoinModelLink ¤t) const
Returns next element in current row or column - index is -1 if none.
void setColBounds(int whichColumn, double columnLower, double columnUpper)
Sets columnLower and columnUpper (if column does not exist then all columns up to this are defined wi...
std::string problemName_
Problem name.
void addRow(int numberInRow, const int *columns, const double *elements, double rowLower=-COIN_DBL_MAX, double rowUpper=COIN_DBL_MAX, const char *name=NULL)
add a row - numberInRow may be zero
double * pointer(int i, int j) const
Returns pointer to element for row i column j.
Class to hold and manipulate an array of massaged messages.
double getFunctionValueFromString(const char *string, const char *x, double xValue)
Just function of single variable x.
void setObjective(int whichColumn, double columnObjective)
Sets columnObjective (if column does not exist then all columns up to this are defined with default v...
const char * rowUpperAsString(int whichRow) const
Gets rowUpper (if row does not exist then COIN_DBL_MAX)
const int * cutMarker() const
Returns array of 0 or nonzero if can be a cut (or returns NULL)
int packRows()
Packs down all rows i.e.
void setObjectiveOffset(double value)
Set objective offset.
const CoinModelTriple * elements() const
Return elements as triples.