5#ifndef IDOL_OSIIDOLSOLVERINTERFACE_H 
    6#define IDOL_OSIIDOLSOLVERINTERFACE_H 
   10#include <OsiSolverInterface.hpp> 
   11#include "idol/mixed-integer/modeling/models/Model.h" 
   13class OsiIdolSolverInterface : 
public OsiSolverInterface {
 
   15    std::list<idol::Var> m_relaxed_variables;
 
   16    std::vector<int> m_variable_indices_in_mibs;
 
   17    std::vector<int> m_constraint_indices_in_mibs;
 
   19    mutable double* m_col_lower = 
nullptr;
 
   20    mutable double* m_col_upper = 
nullptr;
 
   21    mutable double* m_col_obj = 
nullptr;
 
   22    mutable char* m_row_sense = 
nullptr;
 
   23    mutable double* m_row_rhs = 
nullptr;
 
   24    mutable double* m_row_range = 
nullptr;
 
   25    mutable double *m_row_lower = 
nullptr;
 
   26    mutable double *m_row_upper = 
nullptr;
 
   27    mutable CoinPackedMatrix *m_matrix_by_row = 
nullptr;
 
   28    mutable CoinPackedMatrix *m_matrix_by_col = 
nullptr;
 
   29    mutable double *m_col_solution = 
nullptr;
 
   30    mutable double *m_row_price = 
nullptr;
 
   31    mutable double* m_reduced_cost = 
nullptr;
 
   32    mutable double* m_row_activity = 
nullptr;
 
   39    OsiIdolSolverInterface(
const OsiIdolSolverInterface& t_src);
 
   41    void initialSolve() 
override;
 
   42    void resolve() 
override;
 
   43    void branchAndBound() 
override;
 
   44    bool isAbandoned() 
const override;
 
   45    bool isProvenOptimal() 
const override;
 
   46    bool isProvenPrimalInfeasible() 
const override;
 
   47    bool isProvenDualInfeasible() 
const override;
 
   48    bool isIterationLimitReached() 
const override;
 
   49    CoinWarmStart *getEmptyWarmStart() 
const override;
 
   50    CoinWarmStart *getWarmStart() 
const override;
 
   51    bool setWarmStart(
const CoinWarmStart *warmstart) 
override;
 
   52    int getNumCols() 
const override;
 
   53    int getNumRows() 
const override;
 
   54    CoinBigIndex getNumElements() 
const override;
 
   55    const double *getColLower() 
const override;
 
   56    const double *getColUpper() 
const override;
 
   57    const char *getRowSense() 
const override;
 
   58    const double *getRightHandSide() 
const override;
 
   59    const double *getRowRange() 
const override;
 
   60    const double *getRowLower() 
const override;
 
   61    const double *getRowUpper() 
const override;
 
   62    const double *getObjCoefficients() 
const override;
 
   63    double getObjSense() 
const override;
 
   64    bool isContinuous(
int colIndex) 
const override;
 
   65    const CoinPackedMatrix *getMatrixByRow() 
const override;
 
   66    const CoinPackedMatrix *getMatrixByCol() 
const override;
 
   67    double getInfinity() 
const override;
 
   68    const double *getColSolution() 
const override;
 
   69    const double *getRowPrice() 
const override;
 
   70    const double *getReducedCost() 
const override;
 
   71    const double *getRowActivity() 
const override;
 
   72    double getObjValue() 
const override;
 
   73    int getIterationCount() 
const override;
 
   74    std::vector<double *> getDualRays(
int maxNumRays, 
bool fullRay) 
const override;
 
   75    std::vector<double *> getPrimalRays(
int maxNumRays) 
const override;
 
   76    void setObjCoeff(
int elementIndex, 
double elementValue) 
override;
 
   77    void setObjSense(
double s) 
override;
 
   78    void setColLower(
int elementIndex, 
double elementValue) 
override;
 
   79    void setColUpper(
int elementIndex, 
double elementValue) 
override;
 
   80    void setRowLower(
int elementIndex, 
double elementValue) 
override;
 
   81    void setRowUpper(
int elementIndex, 
double elementValue) 
override;
 
   82    void setRowType(
int index, 
char sense, 
double rightHandSide, 
double range) 
override;
 
   83    void setColSolution(
const double *colsol) 
override;
 
   84    void setRowPrice(
const double *rowprice) 
override;
 
   85    void setContinuous(
int index) 
override;
 
   86    void setInteger(
int index) 
override;
 
   87    void addCol(
const CoinPackedVectorBase &vec, 
const double collb, 
const double colub, 
const double obj) 
override;
 
   88    void deleteCols(
const int num, 
const int *colIndices) 
override;
 
   89    void addRow(
const CoinPackedVectorBase &vec, 
const double rowlb, 
const double rowub) 
override;
 
   90    void addRow(
const CoinPackedVectorBase &vec, 
const char rowsen, 
const double rowrhs, 
const double rowrng) 
override;
 
   91    void loadProblem(
const CoinPackedMatrix &matrix, 
const double *collb, 
const double *colub, 
const double *obj,
 
   92                     const double *rowlb, 
const double *rowub) 
override;
 
   93    void assignProblem(CoinPackedMatrix *&matrix, 
double *&collb, 
double *&colub, 
double *&obj, 
double *&rowlb,
 
   94                       double *&rowub) 
override;
 
   95    void loadProblem(
const CoinPackedMatrix &matrix, 
const double *collb, 
const double *colub, 
const double *obj,
 
   96                     const char *rowsen, 
const double *rowrhs, 
const double *rowrng) 
override;
 
   97    void assignProblem(CoinPackedMatrix *&matrix, 
double *&collb, 
double *&colub, 
double *&obj, 
char *&rowsen,
 
   98                       double *&rowrhs, 
double *&rowrng) 
override;
 
  100    loadProblem(
const int numcols, 
const int numrows, 
const CoinBigIndex *start, 
const int *index, 
const double *value,
 
  101                const double *collb, 
const double *colub, 
const double *obj, 
const double *rowlb,
 
  102                const double *rowub) 
override;
 
  104    loadProblem(
const int numcols, 
const int numrows, 
const CoinBigIndex *start, 
const int *index, 
const double *value,
 
  105                const double *collb, 
const double *colub, 
const double *obj, 
const char *rowsen, 
const double *rowrhs,
 
  106                const double *rowrng) 
override;
 
  107    void writeMps(
const char *filename, 
const char *extension, 
double objSense) 
const override;
 
  108    void writeLp(
const char *filename,
 
  109                 const char *extension = 
"lp",
 
  110                 double epsilon = 1e-5,
 
  111                 int numberAcross = 10,
 
  113                 double objSense = 0.0,
 
  114                 bool useRowNames = 
true) 
const override;
 
  115    OsiSolverInterface *clone(
bool copyData = 
true) 
const override;
 
  116    void deleteRows(
const int num, 
const int *rowIndices) 
override;
 
  118    void applyRowCut(
const OsiRowCut &rc) 
override;
 
  119    void applyColCut(
const OsiColCut &cc) 
override;