00001
00002
00003 #ifndef OsiSimplexInterface_H
00004 #define OsiSimplexInterface_H
00005
00006 #include <string>
00007 #include <vector>
00008
00009 #include "CoinMessageHandler.hpp"
00010 #include "CoinPackedVectorBase.hpp"
00011
00012 #include "OsiSolverParameters.hpp"
00013
00014 class CoinPackedMatrix;
00015 class CoinWarmStart;
00016
00017
00018
00026 class OsiSimplexInterface {
00027 friend void OsiSimplexInterfaceCommonUnitTest(
00028 const OsiSolverInterface* emptySi,
00029 const std::string & mpsDir);
00030
00031 public:
00033
00034
00040 virtual void enableSimplexInterface(bool doingPrimal) {};
00041
00043 virtual void disableSimplexInterface() {};
00044
00046 virtual bool basisIsAvailable() = 0;
00047
00057 virtual void getBasisStatus(int* cstat, int* rstat) = 0;
00058
00061 virtual int setBasisStatus(const int* cstat, const int* rstat) = 0;
00062
00067 virtual int pivot(int colIn, int colOut, int outStatus) = 0;
00068
00079 virtual int primalPivotResult(int colIn, int sign,
00080 int& colOut, int& outStatus,
00081 double& t, CoinPackedVector* dx) = 0;
00082
00089 virtual int dualPivotResult(int& colIn, int& sign,
00090 int colOut, int outStatus,
00091 double& t, CoinPackedVector* dx) = 0;
00092
00094 virtual void getReducedGradient(double* columnReducedCosts,
00095 double * duals,
00096 const double * c) = 0;
00097
00100 virtual void setObjectiveAndRefresh(double* c) = 0;
00101
00103 virtual void getBInvARow(int row, double* z) = 0;
00104
00106 virtual void getBInvRow(int row, double* z) = 0;
00107
00109 virtual void getBInvACol(int col, double* vec) = 0;
00110
00112 virtual void getBInvCol(int col, double* vec) = 0;
00113
00118 virtual void getBasics(int* index) = 0;
00120
00121
00123
00124
00125 OsiSimplexInterface();
00126
00128 OsiSimplexInterface(const OsiSimplexInterface & rhs);
00129
00131 OsiSimplexInterface & operator=(const OsiSimplexInterface& rhs);
00132
00134 virtual ~OsiSimplexInterface();
00136
00137
00138
00139 private:
00141
00142
00143 };
00144
00145
00151 void
00152 OsiSimplexInterfaceCommonUnitTest(
00153 const OsiSolverInterface* emptySi,
00154 const std::string & mpsDir);
00155
00156 #endif