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;