15 #ifndef OsiSpxSolverInterface_H
16 #define OsiSpxSolverInterface_H
20 #include "CoinWarmStartBasis.hpp"
107 {
return (dynamic_cast<CoinWarmStart *>(
new CoinWarmStartBasis())) ; }
112 virtual bool setWarmStart(
const CoinWarmStart* warmstart);
207 virtual bool isBinary(
int columnNumber)
const;
214 virtual bool isInteger(
int columnNumber)
const;
272 virtual std::vector<double*>
getDualRays(
int maxNumRays,
273 bool fullRay=
false)
const;
285 virtual std::vector<double*>
getPrimalRays(
int maxNumRays)
const;
304 virtual void setObjCoeff(
int elementIndex,
double elementValue );
308 virtual void setColLower(
int elementIndex,
double elementValue );
312 virtual void setColUpper(
int elementIndex,
double elementValue );
318 double lower,
double upper );
320 #if 0 // we are using the default implementation of OsiSolverInterface
330 const int* indexLast,
331 const double* boundList);
336 virtual void setRowLower(
int elementIndex,
double elementValue );
340 virtual void setRowUpper(
int elementIndex,
double elementValue );
346 double lower,
double upper );
349 virtual void setRowType(
int index,
char sense,
double rightHandSide,
352 #if 0 // we are using the default implementation of OsiSolverInterface
361 const int* indexLast,
362 const double* boundList);
374 const int* indexLast,
375 const char* senseList,
376 const double* rhsList,
377 const double* rangeList);
388 #if 0 // we are using the default implementation of OsiSolverInterface
394 virtual void setInteger(
const int* indices,
int len);
432 virtual void addCol(
const CoinPackedVectorBase& vec,
433 const double collb,
const double colub,
436 #if 0 // we are using the default implementation of OsiSolverInterface
438 virtual void addCols(
const int numcols,
439 const CoinPackedVectorBase *
const * cols,
440 const double* collb,
const double* colub,
445 virtual void deleteCols(
const int num,
const int * colIndices);
448 virtual void addRow(
const CoinPackedVectorBase& vec,
449 const double rowlb,
const double rowub);
451 virtual void addRow(
const CoinPackedVectorBase& vec,
452 const char rowsen,
const double rowrhs,
453 const double rowrng);
455 #if 0 // we are using the default implementation of OsiSolverInterface
457 virtual void addRows(
const int numrows,
458 const CoinPackedVectorBase *
const * rows,
459 const double* rowlb,
const double* rowub);
461 virtual void addRows(
const int numrows,
462 const CoinPackedVectorBase *
const * rows,
463 const char* rowsen,
const double* rowrhs,
464 const double* rowrng);
468 virtual void deleteRows(
const int num,
const int * rowIndices);
470 #if 0 // we are using the default implementation of OsiSolverInterface
494 double effectivenessLb = 0.0);
514 virtual void loadProblem(
const CoinPackedMatrix& matrix,
515 const double* collb,
const double* colub,
517 const double* rowlb,
const double* rowub);
527 double*& collb,
double*& colub,
double*& obj,
528 double*& rowlb,
double*& rowub);
542 virtual void loadProblem(
const CoinPackedMatrix& matrix,
543 const double* collb,
const double* colub,
545 const char* rowsen,
const double* rowrhs,
546 const double* rowrng);
556 double*& collb,
double*& colub,
double*& obj,
557 char*& rowsen,
double*& rowrhs,
562 virtual void loadProblem(
const int numcols,
const int numrows,
563 const int* start,
const int* index,
565 const double* collb,
const double* colub,
567 const double* rowlb,
const double* rowub);
571 virtual void loadProblem(
const int numcols,
const int numrows,
572 const int* start,
const int* index,
574 const double* collb,
const double* colub,
576 const char* rowsen,
const double* rowrhs,
577 const double* rowrng);
580 virtual int readMps(
const char *filename,
581 const char *extension =
"mps");
587 virtual void writeMps(
const char *filename,
588 const char *extension =
"mps",
589 double objSense=0.0)
const;
696 mutable soplex::DVector *
obj_;
virtual void setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList)
Set the type of a set of rows.
virtual const double * getRowRange() const
Get pointer to array[getNumRows()] of row ranges.
SoPlex Solver Interface Instantiation of OsiSpxSolverInterface for SoPlex.
virtual void applyRowCut(const OsiRowCut &rc)
Apply a row cut. Return true if cut was applied.
char * rowsense_
Pointer to dense vector of row sense indicators.
column information: objective values, lower and upper bounds, variable types
virtual void setColLower(int elementIndex, double elementValue)
Set a single column lower bound Use -COIN_DBL_MAX for -infinity.
virtual OsiSolverInterface * clone(bool copyData=true) const
Clone.
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 bool isAbandoned() const
Are there a numerical difficulties?
virtual bool isIntegerNonBinary(int colIndex) const
Return true if the variable is general integer.
virtual bool isContinuous(int colNumber) const
Return true if column is continuous.
virtual void unmarkHotStart()
Delete the snapshot.
CoinPackedMatrix * matrixByRow_
Pointer to row-wise copy of problem matrix coefficients.
virtual const double * getColSolution() const
Get pointer to array[getNumCols()] of primal solution vector.
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.
virtual void setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList)
Set the upper and lower bounds of a set of columns.
virtual double getInfinity() const
Get solver's value for infinity.
soplex::DVector * rowsol_
Pointer to dual solution vector.
double * rowrange_
Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) ...
Collections of row cuts and column cuts.
virtual double getObjValue() const
Get objective function value.
virtual const double * getObjCoefficients() const
Get pointer to array[getNumCols()] of objective function coefficients.
virtual int readMps(const char *filename, const char *extension="mps")
Read an mps file from the given filename.
virtual void markHotStart()
Create a hotstart point of the optimization process.
virtual void setRowType(int index, char sense, double rightHandSide, double range)
Set the type of a single row
virtual void setRowLower(int elementIndex, double elementValue)
Set a single row lower bound Use -COIN_DBL_MAX for -infinity.
CoinPackedMatrix * matrixByCol_
Pointer to row-wise copy of problem matrix coefficients.
virtual bool isProvenDualInfeasible() const
Is dual infeasiblity proven?
virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub)
Add a row (constraint) to the problem.
free only cached row and LP solution information
void freeCachedMatrix()
free cached matrices
virtual bool isInteger(int colIndex) const
Return true if the variable is integer.
virtual const double * getReducedCost() const
Get a pointer to array[getNumCols()] of reduced costs.
virtual bool isProvenOptimal() const
Is optimality proven?
problem matrix: matrix ordered by column and by row
virtual const CoinPackedMatrix * getMatrixByRow() const
Get pointer to row-wise copy of matrix.
Abstract Base Class for describing an interface to a solver.
virtual const CoinPackedMatrix * getMatrixByCol() const
Get pointer to column-wise copy of matrix.
virtual bool setWarmStart(const CoinWarmStart *warmstart)
Set warmstarting information.
virtual bool isTimeLimitReached() const
Time limit reached?
void freeAllMemory()
free all allocated memory
void * hotStartCStat_
Hotstart information.
virtual int getIterationCount() const
Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver...
OsiSpxSolverInterface()
Default Constructor.
virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const
Get vector of indices of primal variables which are integer variables but have fractional values in t...
virtual void deleteCols(const int num, const int *colIndices)
Remove a set of columns (primal variables) from the problem.
virtual const double * getRowUpper() const
Get pointer to array[getNumRows()] of row upper bounds.
virtual const double * getRightHandSide() const
Get pointer to array[getNumRows()] of rows right-hand sides.
virtual bool isIterationLimitReached() const
Iteration limit reached?
discard all cached data (default)
virtual void setColUpper(int elementIndex, double elementValue)
Set a single column upper bound Use COIN_DBL_MAX for infinity.
virtual void setColSolution(const double *colsol)
Set the primal solution column values.
void freeCachedColRim()
free cached column rim vectors
virtual CoinWarmStart * getWarmStart() const
Get warmstarting information.
std::vector< int > OsiVectorInt
Vector of int.
virtual void setContinuous(int index)
Set the index-th variable to be a continuous variable.
virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub)
Add a set of rows (constraints) to the problem.
virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj)
Add a column (primal variable) to the problem.
virtual const double * getRowLower() const
Get pointer to array[getNumRows()] of row lower bounds.
virtual int getNumRows() const
Get number of rows.
int hotStartMaxIteration_
soplex::DVector * obj_
Pointer to objective Vector.
virtual void branchAndBound()
Invoke solver's built-in enumeration algorithm.
virtual int getNumCols() const
Get number of columns.
bool setIntParam(OsiIntParam key, int value)
Set an integer parameter.
virtual void addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj)
Add a set of columns (primal variables) to the problem.
soplex::DVector * colsol_
Pointer to primal solution vector.
virtual bool isBinary(int colIndex) const
Return true if the variable is binary.
row information: right hand sides, ranges and senses, lower and upper bounds for row ...
void setTimeLimit(double value)
virtual void initialSolve()
Solve initial LP relaxation.
keep all cached data (similar to getMutableLpPtr())
void freeCachedRowRim()
free cached row rim vectors
void freeCachedData(int keepCached=KEEPCACHED_NONE)
free all cached data (except specified entries, see getLpPtr())
double getTimeLimit() const
free only cached LP solution information
bool getStrParam(OsiStrParam key, std::string &value) const
Get a string parameter.
virtual void setObjSense(double s)
Set objective function sense (1 for min (default), -1 for max,)
void freeCachedResults()
free cached result vectors
virtual ApplyCutsReturnCode applyCuts(const OsiCuts &cs, double effectivenessLb=0.0)
Apply a collection of cuts.
virtual void solveFromHotStart()
Optimize starting from the hotstart.
virtual void resolve()
Resolve an LP relaxation after problem modification.
free only cached matrix and LP solution information
virtual void setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList)
Set the bounds on a set of rows.
virtual void setInteger(int index)
Set the index-th variable to be an integer variable.
double * rhs_
Pointer to dense vector of row right-hand side values.
soplex::DIdxSet * spxintvars_
indices of integer variables
virtual bool isDualObjectiveLimitReached() const
Is the given dual objective limit reached?
virtual int getNumElements() const
Get number of nonzero elements.
soplex::DVector * rowact_
Pointer to row activity (slack) vector.
virtual bool isFreeBinary(int colIndex) const
Return true if the variable is binary and not fixed.
virtual ~OsiSpxSolverInterface()
Destructor.
virtual void setObjCoeff(int elementIndex, double elementValue)
Set an objective function coefficient.
free only cached column and LP solution information
virtual void setRowUpper(int elementIndex, double elementValue)
Set a single row upper bound Use COIN_DBL_MAX for infinity.
virtual void setRowPrice(const double *rowprice)
Set dual solution vector.
virtual std::vector< double * > getPrimalRays(int maxNumRays) const
Get as many primal rays as the solver can provide.
virtual void setRowBounds(int elementIndex, double lower, double upper)
Set a single row lower and upper bound The default implementation just invokes setRowUower and setRo...
virtual void applyColCut(const OsiColCut &cc)
Apply a column cut (bound adjustment).
virtual void deleteRows(const int num, const int *rowIndices)
Delete a set of rows (constraints) from the problem.
virtual const double * getColUpper() const
Get pointer to array[getNumCols()] of column upper bounds.
CoinWarmStart * getEmptyWarmStart() const
Get empty warm start object.
soplex::DVector * redcost_
Pointer to reduced cost vector.
virtual void setColBounds(int elementIndex, double lower, double upper)
Set a single column lower and upper bound The default implementation just invokes setColLower and se...
soplex::SoPlex * soplex_
SoPlex solver object.
virtual bool isProvenPrimalInfeasible() const
Is primal infeasiblity proven?
virtual const char * getRowSense() const
Get pointer to array[getNumRows()] of row constraint senses.
void OsiSpxSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir)
A function that tests the methods in the OsiSpxSolverInterface class.
virtual const double * getRowActivity() const
Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vecto...
bool getDblParam(OsiDblParam key, double &value) const
Get a double parameter.
virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay=false) const
Get as many dual rays as the solver can provide.
Internal class for obtaining status from the applyCuts method.
LP solution: primal and dual solution, reduced costs, row activities.
friend void OsiSpxSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir)
A function that tests the methods in the OsiSpxSolverInterface class.
virtual const double * getColLower() const
Get pointer to array[getNumCols()] of column lower bounds.
bool setDblParam(OsiDblParam key, double value)
Set a double parameter.
only discard cached LP solution
virtual double getObjSense() const
Get objective function sense (1 for min (default), -1 for max)
virtual const double * getRowPrice() const
Get pointer to array[getNumRows()] of dual prices.
bool getIntParam(OsiIntParam key, int &value) const
Get an integer parameter.
OsiSpxSolverInterface & operator=(const OsiSpxSolverInterface &rhs)
Assignment operator.
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...