7 #ifndef OsiClpSolverInterface_H
8 #define OsiClpSolverInterface_H
16 #include "CoinPackedMatrix.hpp"
17 #include "OsiSolverInterface.hpp"
18 #include "CoinWarmStartBasis.hpp"
21 #include "CoinIndexedVector.hpp"
22 #include "CoinFinite.hpp"
25 class OsiClpUserSolver;
136 const double * c)
const ;
139 virtual void getBInvARow(
int row,
double* z,
double * slack=NULL)
const;
145 virtual void getBInvARow(
int row, CoinIndexedVector * z, CoinIndexedVector * slack=NULL,
146 bool keepScaled=
false)
const;
149 virtual void getBInvRow(
int row,
double* z)
const;
152 virtual void getBInvACol(
int col,
double* vec)
const ;
155 virtual void getBInvACol(
int col, CoinIndexedVector * vec)
const ;
161 virtual void getBInvACol(CoinIndexedVector * vec)
const ;
164 virtual void getBInvCol(
int col,
double* vec)
const ;
170 virtual void getBasics(
int* index)
const;
194 virtual int pivot(
int colIn,
int colOut,
int outStatus);
208 int& colOut,
int& outStatus,
209 double& t, CoinPackedVector* dx);
218 int colOut,
int outStatus,
219 double& t, CoinPackedVector* dx);
244 bool setStrParam(OsiStrParam key,
const std::string & value);
246 bool getIntParam(OsiIntParam key,
int& value)
const;
248 bool getDblParam(OsiDblParam key,
double& value)
const;
250 bool getStrParam(OsiStrParam key, std::string& value)
const;
252 virtual bool setHintParam(OsiHintParam key,
bool yesNo=
true,
253 OsiHintStrength strength=OsiHintTry,
254 void * otherInformation=NULL);
299 virtual bool setWarmStart(
const CoinWarmStart* warmstart);
338 void setStuff(
double tolerance,
double increment);
368 if ( matrix != NULL ) retVal=matrix->getNumElements();
374 unsigned maxLen = static_cast<unsigned>(std::string::npos))
const;
379 unsigned maxLen = static_cast<unsigned>(std::string::npos))
const;
440 virtual bool isBinary(
int colIndex)
const;
446 virtual bool isInteger(
int colIndex)
const;
458 virtual const char *
getColType(
bool refresh=
false)
const;
522 virtual std::vector<double*>
getDualRays(
int maxNumRays,
523 bool fullRay =
false)
const;
535 virtual std::vector<double*>
getPrimalRays(
int maxNumRays)
const;
548 virtual void setObjCoeff(
int elementIndex,
double elementValue );
552 virtual void setColLower(
int elementIndex,
double elementValue );
556 virtual void setColUpper(
int elementIndex,
double elementValue );
560 double lower,
double upper );
571 const int* indexLast,
572 const double* boundList);
576 virtual void setRowLower(
int elementIndex,
double elementValue );
580 virtual void setRowUpper(
int elementIndex,
double elementValue ) ;
584 double lower,
double upper ) ;
587 virtual void setRowType(
int index,
char sense,
double rightHandSide,
599 const int* indexLast,
600 const double* boundList);
613 const int* indexLast,
614 const char* senseList,
615 const double* rhsList,
616 const double* rangeList);
638 virtual void setRowName(
int rowIndex, std::string name) ;
643 virtual void setColName(
int colIndex, std::string name) ;
659 virtual void setInteger(
const int* indices,
int len);
715 virtual void addCol(
const CoinPackedVectorBase& vec,
716 const double collb,
const double colub,
720 virtual void addCol(
const CoinPackedVectorBase& vec,
721 const double collb,
const double colub,
722 const double obj, std::string name) ;
724 virtual void addCol(
int numberElements,
const int * rows,
const double * elements,
725 const double collb,
const double colub,
729 virtual void addCol(
int numberElements,
730 const int* rows,
const double* elements,
731 const double collb,
const double colub,
732 const double obj, std::string name) ;
734 virtual void addCols(
const int numcols,
735 const CoinPackedVectorBase *
const * cols,
736 const double* collb,
const double* colub,
739 virtual void addCols(
const int numcols,
740 const int * columnStarts,
const int * rows,
const double * elements,
741 const double* collb,
const double* colub,
744 virtual void deleteCols(
const int num,
const int * colIndices);
747 virtual void addRow(
const CoinPackedVectorBase& vec,
748 const double rowlb,
const double rowub);
755 virtual void addRow(
const CoinPackedVectorBase& vec,
756 const double rowlb,
const double rowub,
758 virtual void addRow(
const CoinPackedVectorBase& vec,
759 const char rowsen,
const double rowrhs,
760 const double rowrng);
762 virtual void addRow(
int numberElements,
const int * columns,
const double * element,
763 const double rowlb,
const double rowub) ;
766 virtual void addRow(
const CoinPackedVectorBase& vec,
767 const char rowsen,
const double rowrhs,
768 const double rowrng, std::string name) ;
770 virtual void addRows(
const int numrows,
771 const CoinPackedVectorBase *
const * rows,
772 const double* rowlb,
const double* rowub);
774 virtual void addRows(
const int numrows,
775 const CoinPackedVectorBase *
const * rows,
776 const char* rowsen,
const double* rowrhs,
777 const double* rowrng);
780 virtual void addRows(
const int numrows,
781 const int * rowStarts,
const int * columns,
const double * element,
782 const double* rowlb,
const double* rowub);
789 virtual void deleteRows(
const int num,
const int * rowIndices);
802 virtual void applyRowCuts(
int numberCuts,
const OsiRowCut * cuts);
807 virtual void applyRowCuts(
int numberCuts,
const OsiRowCut ** cuts);
830 virtual ApplyCutsReturnCode
applyCuts(
const OsiCuts & cs,
831 double effectivenessLb = 0.0);
853 virtual void loadProblem(
const CoinPackedMatrix& matrix,
854 const double* collb,
const double* colub,
856 const double* rowlb,
const double* rowub);
866 double*& collb,
double*& colub,
double*& obj,
867 double*& rowlb,
double*& rowub);
881 virtual void loadProblem(
const CoinPackedMatrix& matrix,
882 const double* collb,
const double* colub,
884 const char* rowsen,
const double* rowrhs,
885 const double* rowrng);
895 double*& collb,
double*& colub,
double*& obj,
896 char*& rowsen,
double*& rowrhs,
902 const double* collb,
const double* colub,
904 const double* rowlb,
const double* rowub) ;
908 virtual void loadProblem(
const int numcols,
const int numrows,
909 const CoinBigIndex * start,
const int* index,
911 const double* collb,
const double* colub,
913 const double* rowlb,
const double* rowub);
917 virtual void loadProblem(
const int numcols,
const int numrows,
918 const CoinBigIndex * start,
const int* index,
920 const double* collb,
const double* colub,
922 const char* rowsen,
const double* rowrhs,
923 const double* rowrng);
925 virtual int loadFromCoinModel ( CoinModel & modelObject,
bool keepSolution=
false);
927 using OsiSolverInterface::readMps ;
930 virtual int readMps(
const char *filename,
931 const char *extension =
"mps") ;
934 int readMps(
const char *filename,
bool keepNames,
bool allowErrors);
936 virtual int readMps (
const char *filename,
const char*extension,
937 int & numberSets, CoinSet ** & sets);
943 virtual void writeMps(
const char *filename,
944 const char *extension =
"mps",
945 double objSense=0.0)
const;
955 const char ** rowNames,
const char ** columnNames,
956 int formatType=0,
int numberAcross=2,
957 double objSense=0.0)
const ;
959 virtual int readLp(
const char *filename,
const double epsilon = 1e-5);
965 virtual void writeLp(
const char *filename,
966 const char *extension =
"lp",
967 double epsilon = 1e-5,
968 int numberAcross = 10,
970 double objSense = 0.0,
971 bool useRowNames =
true)
const;
977 double epsilon = 1e-5,
978 int numberAcross = 10,
980 double objSense = 0.0,
981 bool useRowNames =
true)
const;
989 virtual void replaceMatrix(
const CoinPackedMatrix & matrix) ;
1004 void newLanguage(CoinMessages::Language language);
1080 virtual CoinBigIndex
getSizeL()
const;
1082 virtual CoinBigIndex
getSizeU()
const;
1151 virtual void reset();
1210 const int * indices,
const double * elements);
1214 void setBasis(
const CoinWarmStartBasis & basis);
1219 CoinWarmStartDiff *
getBasisDiff(
const unsigned char * statusArray)
const ;
1221 CoinWarmStartBasis *
getBasis(
const unsigned char * statusArray)
const ;
1234 const int * start,
const int * indices,
const double * weights=NULL);
1268 mutable CoinWarmStartBasis*
ws_;
1413 virtual bool check()
const ;
virtual int pivot(int colIn, int colOut, int outStatus)
Perform a pivot by substituting a colIn for colOut in the basis.
void setStuff(double tolerance, double increment)
Sets integer tolerance and increment.
This is a very simple class to guide algorithms.
virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay=false) const
Get as many dual rays as the solver can provide.
char * integerInformation_
Pointer to integer information.
virtual void getBInvACol(int col, double *vec) const
Get a column of the tableau.
unsigned int specialOptions_
Special options 0x80000000 off 0 simple stuff for branch and bound 1 try and keep work regions as muc...
virtual void writeMps(const char *filename, const char *extension="mps", double objSense=0.0) const
Write the problem into an mps file of the given filename.
int numberSOS_
Number of SOS sets.
int phase_
phase 0 initial 1 trying continuing with back in and maybe different perturb 2 trying continuing with...
virtual void branchAndBound()
Invoke solver's built-in enumeration algorithm.
virtual const double * getReducedCost() const
Get a pointer to array[getNumCols()] of reduced costs.
virtual const double * getRowActivity() const
Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vecto...
virtual void initialSolve()
Solve initial LP relaxation.
virtual void markHotStart()
Create a hotstart point of the optimization process.
double smallestElementInCut_
Smallest allowed element in cut.
void redoScaleFactors(int numberRows, const CoinBigIndex *starts, const int *indices, const double *elements)
Extend scale factors.
virtual std::string getRowName(int rowIndex, unsigned maxLen=static_cast< unsigned >(std::string::npos)) const
Return name of row if one exists or Rnnnnnnn maxLen is currently ignored and only there to match the ...
void lexSolve()
Sort of lexicographic resolve.
virtual bool isBinary(int colIndex) const
Return true if variable is binary.
void freeCachedResults0() const
Deletes all mutable stuff for row ranges etc.
int lastAlgorithm_
Last algorithm used.
double * linearObjective_
Linear objective.
void setLargestAway(double value)
Set largest amount continuous away from bound.
double * objective() const
Objective.
virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub)
Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by l...
bool isOptionalInteger(int colIndex) const
Return true if column is integer but does not have to be declared as such.
virtual bool isContinuous(int colNumber) const
Return true if column is continuous.
virtual void passInMessageHandler(CoinMessageHandler *handler)
Pass in a message handler.
Abstract base class for Clp Matrices.
void setWhereFrom(int value)
Set where from.
double * rowActivity_
also save row and column information for hot starts only used in hotstarts so can be casual ...
virtual void getBInvRow(int row, double *z) const
Get a row of the basis inverse.
virtual void disableFactorization() const
Undo any setting changes made by enableFactorization.
virtual void applyRowCuts(int numberCuts, const OsiRowCut *cuts)
Apply a collection of row cuts which are all effective.
double * columnLower() const
Column Lower.
virtual int primalPivotResult(int colIn, int sign, int &colOut, int &outStatus, double &t, CoinPackedVector *dx)
Obtain a result of the primal pivot Outputs: colOut – leaving column, outStatus – its status...
friend void OsiClpSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir)
A function that tests the methods in the OsiClpSolverInterface class.
virtual int readLp(const char *filename, const double epsilon=1e-5)
Read file in LP format (with names)
virtual bool isIntegerNonBinary(int colIndex) const
Return true if variable is general integer.
virtual CoinWarmStart * getWarmStart() const
Get warmstarting information.
virtual void enableSimplexInterface(bool doingPrimal)
Enables simplex mode 2 (individual pivot control)
double * rowUpper() const
Row upper.
virtual ~OsiClpSolverInterface()
Destructor.
void setSpecialOptionsMutable(unsigned int value) const
Set special options in underlying clp solver.
void newLanguage(CoinMessages::Language language)
Set language.
ClpSimplex * continuousModel_
Continuous model.
double optimizationDirection() const
Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
void setSpecialOptions(unsigned int value)
virtual const double * getRowUpper() const
Get pointer to array[getNumRows()] of row upper bounds.
ClpSimplex * modelPtr_
Clp model represented by this class instance.
virtual bool isProvenOptimal() const
Is optimality proven?
virtual double getObjSense() const
Get objective function sense (1 for min (default), -1 for max)
bool setDblParam(OsiDblParam key, double value)
void copyEnabledSuff(OsiClpSolverInterface &rhs)
Copy across enabled stuff from one solver to another.
Base class for Clp disaster handling.
virtual void synchronizeModel()
Synchronize model (really if no cuts in tree)
virtual void setObjSense(double s)
Set objective function sense (1 for min (default), -1 for max,)
ClpSimplex * smallModel_
Alternate model (hot starts) - but also could be permanent and used for crunch.
virtual void applyColCut(const OsiColCut &cc)
Apply a column cut (adjust one or more bounds).
ClpSimplex * swapModelPtr(ClpSimplex *newModel)
Set pointer to Clp model and return old.
virtual void getBasics(int *index) const
Get basic indices (order of indices corresponds to the order of elements in a vector retured by getBI...
virtual int getNumElements() const
Get number of nonzero elements.
CoinDoubleArrayWithLength columnScale_
Column scale factors (has inverse at end)
virtual int typeOfDisaster()
Type of disaster 0 can fix, 1 abort.
void setPhase(int value)
Set phase.
This just implements CoinFactorization when an ClpMatrixBase object is passed.
int lastNumberRows_
Number of rows when last "scaled".
virtual void setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList)
Set the type of a number of rows simultaneously The default implementation just invokes setRowType()...
void setSmallestElementInCut(double value)
Set smallest allowed element in cut.
void setLogLevel(int value)
Set log level (will also set underlying solver's log level)
virtual void setColBounds(int elementIndex, double lower, double upper)
Set a single column lower and upper bound.
ClpSimplex * baseModel_
Copy of model when option 131072 set.
virtual void disableSimplexInterface()
Undo setting changes made by enableSimplexInterface.
void generateCpp(FILE *fp)
Create C++ lines to get to current state.
ClpSimplex * getModelPtr() const
Get pointer to Clp model.
virtual void solveFromHotStart()
Optimize starting from the hotstart.
virtual void getReducedGradient(double *columnReducedCosts, double *duals, const double *c) const
Get the reduced gradient for the cost vector c.
int phase() const
Get phase.
virtual const double * getColLower() const
Get pointer to array[getNumCols()] of column lower bounds.
virtual int writeMpsNative(const char *filename, const char **rowNames, const char **columnNames, int formatType=0, int numberAcross=2, double objSense=0.0) const
Write the problem into an mps file of the given filename, names may be null.
int whereFrom() const
Get where from.
int numberColumns() const
virtual int canDoSimplexInterface() const
Simplex API capability.
OsiClpDisasterHandler * disasterHandler_
Possible disaster handler.
void crossover(int options, int basis)
Solve when primal column and dual row solutions are near-optimal options - 0 no presolve (use primal ...
virtual const CoinPackedMatrix * getMatrixByCol() const
Get pointer to column-wise copy of matrix.
ClpFactorization * factorization_
factorization for hot starts
virtual double getObjValue() const
Get objective function value.
virtual CoinBigIndex getSizeU() const
Return number of entries in U part of current factorization.
ClpLinearObjective * fakeObjective() const
Get fake objective.
OsiClpSolverInterface()
Default Constructor.
virtual void restoreBaseModel(int numberRows)
Strip off rows to get to this number of rows.
virtual int dualPivotResult(int &colIn, int &sign, int colOut, int outStatus, double &t, CoinPackedVector *dx)
Obtain a result of the dual pivot (similar to the previous method) Differences: entering variable and...
virtual int findIntegersAndSOS(bool justCount)
Identify integer variables and SOS and create corresponding objects.
virtual void setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList)
Set the bounds on a number of rows simultaneously The default implementation just invokes setRowLowe...
unsigned int specialOptions() const
Get special options.
const double * downRange() const
char * spareArrays_
Arrays for hot starts.
void setBasis()
Just puts current basis_ into ClpSimplex model.
virtual bool check() const
Checks if disaster.
virtual void deleteRows(const int num, const int *rowIndices)
int numberSOS() const
Number of SOS sets.
virtual void setObjective(const double *array)
Set the objective coefficients for all columns array [getNumCols()] is an array of values for the obj...
double smallestChangeInCut_
Smallest change in cut.
int cleanupScaling_
Scaling option When scaling is on it is possible that the scaled problem is feasible but the unscaled...
virtual const double * getRowLower() const
Get pointer to array[getNumRows()] of row lower bounds.
bool setStrParam(OsiStrParam key, const std::string &value)
virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj)
double * rhs_
Pointer to dense vector of row right-hand side values.
double * columnUpper() const
Column Upper.
virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub)
virtual void writeLp(const char *filename, const char *extension="lp", double epsilon=1e-5, int numberAcross=10, int decimals=5, double objSense=0.0, bool useRowNames=true) const
Write the problem into an Lp file of the given filename.
void setCleanupScaling(int value)
Set Scaling option When scaling is on it is possible that the scaled problem is feasible but the unsc...
virtual void setColUpper(int elementIndex, double elementValue)
Set a single column upper bound Use DBL_MAX for infinity.
bool notOwned_
To say if destructor should delete underlying model.
This solves LPs using the simplex method.
void setOptimizationDirection(double value)
ClpDataSave saveData_
To save data in OsiSimplex stuff.
void setSolveOptions(const ClpSolve &options)
Pass in initial solve options.
void gutsOfDestructor()
The real work of a copy constructor (used by copy and assignment)
CoinWarmStartBasis getBasis(ClpSimplex *model) const
Warm start.
const CoinWarmStartBasis * getConstPointerToWarmStart() const
Get warmstarting information.
virtual void setColName(int colIndex, std::string name)
Set name of column.
virtual void setRowUpper(int elementIndex, double elementValue)
Set a single row upper bound Use DBL_MAX for infinity.
virtual void setRowType(int index, char sense, double rightHandSide, double range)
Set the type of a single row
void passInRanges(int *array)
Pass in range array.
virtual const CoinPackedMatrix * getMatrixByRow() const
Get pointer to row-wise copy of matrix.
virtual void intoSimplex()
Into simplex.
OsiClpDisasterHandler(OsiClpSolverInterface *model=NULL)
Default constructor.
void crunch()
Crunch down problem a bit.
int * whichRange_
Pointer to variables for which we want range information The number is in [0] memory is not owned by ...
double * rowLower() const
Row lower.
virtual const double * getRowRange() const
Get pointer to array[getNumRows()] of row ranges.
CoinSet * setInfo_
SOS set info.
void modifyCoefficient(int row, int column, double newElement, bool keepZero=false)
virtual void setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList)
Set the bounds on a number of columns simultaneously The default implementation just invokes setColL...
virtual ~OsiClpDisasterHandler()
Destructor.
virtual void replaceMatrix(const CoinPackedMatrix &matrix)
And if it does matter (not used at present)
virtual const double * getRowPrice() const
Get pointer to array[getNumRows()] of dual prices.
virtual void setRowName(int rowIndex, std::string name)
Set name of row.
void setFakeObjective(ClpLinearObjective *fakeObjective)
Set fake objective (and take ownership)
const double * upRange() const
If doing fast hot start then ranges are computed.
int itlimOrig_
The original iteration limit before hotstarts started.
This is a tiny class where data can be saved round calls.
void setLastAlgorithm(int value)
Set last algorithm used , 1 = primal, 2 = dual other unknown.
void stopFastDual()
Stop fast dual.
virtual void setContinuous(int index)
Set the index-th variable to be a continuous variable.
virtual bool setHintParam(OsiHintParam key, bool yesNo=true, OsiHintStrength strength=OsiHintTry, void *otherInformation=NULL)
OsiClpSolverInterface & operator=(const OsiClpSolverInterface &rhs)
Assignment operator.
virtual ClpDisasterHandler * clone() const
Clone.
virtual bool isIterationLimitReached() const
Iteration limit reached?
virtual int setBasisStatus(const int *cstat, const int *rstat)
Set the status of structural/artificial variables and factorize, update solution etc.
bool inTrouble_
Are we in trouble.
virtual void reset()
Resets as if default constructor.
CoinPackedMatrix * matrixByRow_
Pointer to row-wise copy of problem matrix coefficients.
void freeCachedResults() const
Deletes all mutable stuff.
virtual bool isDualObjectiveLimitReached() const
Is the given dual objective limit reached?
virtual bool isAbandoned() const
Are there a numerical difficulties?
ClpNodeStuff stuff_
Stuff for fast dual.
virtual void enableFactorization() const
Enables simplex mode 1 (tableau access)
double * rowrange_
Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) ...
virtual void applyRowCut(const OsiRowCut &rc)
Apply a row cut (append to constraint matrix).
CoinWarmStartDiff * getBasisDiff(const unsigned char *statusArray) const
Warm start difference from basis_ to statusArray.
virtual void setRowPrice(const double *rowprice)
Set dual solution vector.
virtual CoinBigIndex getSizeL() const
Return number of entries in L part of current factorization.
CoinPackedMatrix * matrixByRowAtContinuous_
Pointer to row-wise copy of continuous problem matrix coefficients.
virtual bool isInteger(int colIndex) const
Return true if column is integer.
virtual int getNumRows() const
Get number of rows.
virtual void setRowBounds(int elementIndex, double lower, double upper)
Set a single row lower and upper bound.
bool fakeMinInSimplex_
Faking min to get proper dual solution signs in simplex API.
static const double OsiClpInfinity
ClpLinearObjective * fakeObjective_
Fake objective.
double largestAway() const
Get largest amount continuous away from bound.
virtual bool isProvenPrimalInfeasible() const
Is primal infeasiblity proven?
virtual int readMps(const char *filename, const char *extension="mps")
Read an mps file from the given filename (defaults to Osi reader) - returns number of errors (see Osi...
virtual void addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj)
CoinWarmStartBasis * getPointerToWarmStart()
Get warmstarting information.
virtual ApplyCutsReturnCode applyCuts(const OsiCuts &cs, double effectivenessLb=0.0)
Apply a collection of cuts.
virtual const double * getColSolution() const
Get pointer to array[getNumCols()] of primal solution vector.
ClpSolve solveOptions_
Options for initialSolve.
void OsiClpSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir)
A function that tests the methods in the OsiClpSolverInterface class.
virtual bool isFreeBinary(int colIndex) const
Return true if variable is binary and not fixed at either bound.
virtual void setColLower(int elementIndex, double elementValue)
Set a single column lower bound Use -DBL_MAX for -infinity.
void setOsiModel(OsiClpSolverInterface *model)
set model.
int numberRows() const
Number of rows.
void copyEnabledStuff(ClpSimplex &rhs)
Copy across enabled stuff from one solver to another.
virtual void resolveGub(int needed)
Resolve an LP relaxation after problem modification (try GUB)
virtual double getInfinity() const
Get solver's value for infinity.
void modifyCoefficient(int row, int column, double newElement, bool keepZero=false)
Modify one element of a matrix.
double largestAway_
Largest amount continuous away from bound.
virtual std::string getColName(int colIndex, unsigned maxLen=static_cast< unsigned >(std::string::npos)) const
Return name of column if one exists or Cnnnnnnn maxLen is currently ignored and only there to match t...
virtual void replaceMatrixOptional(const CoinPackedMatrix &matrix)
I (JJF) am getting annoyed because I can't just replace a matrix.
virtual CoinPackedMatrix * getMutableMatrixByCol() const
Get pointer to mutable column-wise copy of matrix.
int lastAlgorithm() const
Last algorithm used , 1 = primal, 2 = dual other unknown.
CoinWarmStartBasis basis_
Warmstart information to be used in resolves.
void setupForRepeatedUse(int senseOfAdventure=0, int printOut=0)
Set up solver for repeated use by Osi interface.
virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub)
Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper...
virtual void setRowLower(int elementIndex, double elementValue)
Set a single row lower bound Use -DBL_MAX for -infinity.
void setSOSData(int numberSOS, const char *type, const int *start, const int *indices, const double *weights=NULL)
Pass in sos stuff from AMPl.
int whereFrom_
Where from 0 dual (resolve) 1 crunch 2 primal (resolve) 4 dual (initialSolve) 6 primal (initialSolve)...
virtual void getBInvCol(int col, double *vec) const
Get a column of the basis inverse.
virtual void resolve()
Resolve an LP relaxation after problem modification.
virtual void setInteger(int index)
Set the index-th variable to be an integer variable.
virtual void getBasisStatus(int *cstat, int *rstat) const
The following two methods may be replaced by the methods of OsiSolverInterface using OsiWarmStartBasi...
void extractSenseRhsRange() const
A method that fills up the rowsense_, rhs_ and rowrange_ arrays.
bool getStrParam(OsiStrParam key, std::string &value) const
virtual void unmarkHotStart()
Delete the snapshot.
void setSmallestChangeInCut(double value)
Set smallest change in cut.
void passInDisasterHandler(OsiClpDisasterHandler *handler)
Pass in disaster handler.
virtual int tightenBounds(int lightweight=0)
Tighten bounds - lightweight or very lightweight 0 - normal, 1 lightweight but just integers...
CoinWarmStartBasis * ws_
A pointer to the warmstart information to be used in the hotstarts.
virtual void setColSolution(const double *colsol)
Set the primal solution column values.
const CoinSet * setInfo() const
SOS set info.
void setLanguage(CoinMessages::Language language)
virtual int getIterationCount() const
Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver...
virtual void deleteCols(const int num, const int *colIndices)
const OsiClpDisasterHandler * disasterHandler() const
Get disaster handler.
void deleteScaleFactors()
Delete all scale factor stuff and reset option.
OsiClpDisasterHandler & operator=(const OsiClpDisasterHandler &)
OsiClpSolverInterface * osiModel() const
Get model.
void computeLargestAway()
Compute largest amount any at continuous away from bound.
virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub)
virtual bool isPrimalObjectiveLimitReached() const
Is the given primal objective limit reached?
virtual const double * getColUpper() const
Get pointer to array[getNumCols()] of column upper bounds.
bool getIntParam(OsiIntParam key, int &value) const
virtual OsiSolverInterface * clone(bool copyData=true) const
Clone.
virtual void getBInvARow(int row, double *z, double *slack=NULL) const
Get a row of the tableau (slack part in slack if not NULL)
int numberIterations() const
Number of iterations.
virtual int getNumCols() const
Get number of columns.
bool setIntParam(OsiIntParam key, int value)
bool getDblParam(OsiDblParam key, double &value) const
CoinDoubleArrayWithLength rowScale_
Row scale factors (has inverse at end)
virtual std::vector< double * > getPrimalRays(int maxNumRays) const
Get as many primal rays as the solver can provide.
#define OsiSolverInterface
virtual void saveInfo()
saves information for next attempt
virtual const double * getRightHandSide() const
Get pointer to array[getNumRows()] of rows right-hand sides.
virtual bool basisIsAvailable() const
Returns true if a basis is available AND problem is optimal.
void freeCachedResults1() const
Deletes all mutable stuff for matrix etc.
int cleanupScaling() const
Get scaling action option.
virtual CoinWarmStart * getEmptyWarmStart() const
Get an empty warm start object.
virtual const char * getColType(bool refresh=false) const
Return array of column length 0 - continuous 1 - binary (may get fixed later) 2 - general integer (ma...
void setOptionalInteger(int index)
Set the index-th variable to be an optional integer variable.
virtual void setObjCoeff(int elementIndex, double elementValue)
Set an objective function coefficient.
bool inTrouble() const
are we in trouble
CoinPackedMatrix * matrix() const
Matrix (if not ClpPackedmatrix be careful about memory leak.
virtual bool isProvenDualInfeasible() const
Is dual infeasiblity proven?
double smallestElementInCut() const
Get smallest allowed element in cut.
double smallestChangeInCut() const
Get smallest change in cut.
virtual const double * getObjCoefficients() const
Get pointer to array[getNumCols()] of objective function coefficients.
char * rowsense_
Pointer to dense vector of row sense indicators.
OsiClpSolverInterface * osiModel_
Pointer to model.
virtual const char * getRowSense() const
Get pointer to array[getNumRows()] of row constraint senses.
virtual int loadFromCoinModel(CoinModel &modelObject, bool keepSolution=false)
This loads a model from a coinModel object - returns number of errors.
virtual bool setWarmStart(const CoinWarmStart *warmstart)
Set warmstarting information.
int startFastDual(int options)
Start faster dual - returns negative if problems 1 if infeasible, Options to pass to solver 1 - creat...
void releaseClp()
Releases so won't error.
virtual void saveBaseModel()
If solver wants it can save a copy of "base" (continuous) model here.