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 {
14 idol::Model* m_model =
nullptr;
15 const bool m_model_has_to_be_destroy;
16 std::list<std::pair<idol::Var, idol::VarType>> m_relaxed_variables;
17 std::vector<int> m_variable_indices_in_mibs;
18 std::vector<int> m_constraint_indices_in_mibs;
20 std::unique_ptr<idol::OptimizerFactory> m_optimizer;
22 mutable double* m_col_lower =
nullptr;
23 mutable double* m_col_upper =
nullptr;
24 mutable double* m_col_obj =
nullptr;
25 mutable char* m_row_sense =
nullptr;
26 mutable double* m_row_rhs =
nullptr;
27 mutable double* m_row_range =
nullptr;
28 mutable double *m_row_lower =
nullptr;
29 mutable double *m_row_upper =
nullptr;
30 mutable CoinPackedMatrix *m_matrix_by_row =
nullptr;
31 mutable CoinPackedMatrix *m_matrix_by_col =
nullptr;
32 mutable double *m_col_solution =
nullptr;
33 mutable double *m_row_price =
nullptr;
34 mutable double* m_reduced_cost =
nullptr;
35 mutable double* m_row_activity =
nullptr;
40 OsiIdolSolverInterface(idol::Env& t_env,
const idol::OptimizerFactory& t_optimizer);
41 OsiIdolSolverInterface(idol::Model& t_model);
43 ~OsiIdolSolverInterface()
override;
47 void set_optimizer_if_not_exists();
49 void initialSolve()
override;
50 void resolve()
override;
51 void branchAndBound()
override;
52 bool isAbandoned()
const override;
53 bool isProvenOptimal()
const override;
54 bool isProvenPrimalInfeasible()
const override;
55 bool isProvenDualInfeasible()
const override;
56 bool isIterationLimitReached()
const override;
57 CoinWarmStart *getEmptyWarmStart()
const override;
58 CoinWarmStart *getWarmStart()
const override;
59 bool setWarmStart(
const CoinWarmStart *warmstart)
override;
60 int getNumCols()
const override;
61 int getNumRows()
const override;
62 CoinBigIndex getNumElements()
const override;
63 const double *getColLower()
const override;
64 const double *getColUpper()
const override;
65 const char *getRowSense()
const override;
66 const double *getRightHandSide()
const override;
67 const double *getRowRange()
const override;
68 const double *getRowLower()
const override;
69 const double *getRowUpper()
const override;
70 const double *getObjCoefficients()
const override;
71 double getObjSense()
const override;
72 bool isContinuous(
int colIndex)
const override;
73 const CoinPackedMatrix *getMatrixByRow()
const override;
74 const CoinPackedMatrix *getMatrixByCol()
const override;
75 double getInfinity()
const override;
76 const double *getColSolution()
const override;
77 const double *getRowPrice()
const override;
78 const double *getReducedCost()
const override;
79 const double *getRowActivity()
const override;
80 double getObjValue()
const override;
81 int getIterationCount()
const override;
82 std::vector<double *> getDualRays(
int maxNumRays,
bool fullRay)
const override;
83 std::vector<double *> getPrimalRays(
int maxNumRays)
const override;
84 void setObjCoeff(
int elementIndex,
double elementValue)
override;
85 void setObjSense(
double s)
override;
86 void setColLower(
int elementIndex,
double elementValue)
override;
87 void setColUpper(
int elementIndex,
double elementValue)
override;
88 void setRowLower(
int elementIndex,
double elementValue)
override;
89 void setRowUpper(
int elementIndex,
double elementValue)
override;
90 void setRowType(
int index,
char sense,
double rightHandSide,
double range)
override;
91 void setColSolution(
const double *colsol)
override;
92 void setRowPrice(
const double *rowprice)
override;
93 void setContinuous(
int index)
override;
94 void setInteger(
int index)
override;
95 void addCol(
const CoinPackedVectorBase &vec,
const double collb,
const double colub,
const double obj)
override;
96 void deleteCols(
const int num,
const int *colIndices)
override;
97 void addRow(
const CoinPackedVectorBase &vec,
const double rowlb,
const double rowub)
override;
98 void addRow(
const CoinPackedVectorBase &vec,
const char rowsen,
const double rowrhs,
const double rowrng)
override;
99 void loadProblem(
const CoinPackedMatrix &matrix,
const double *collb,
const double *colub,
const double *obj,
100 const double *rowlb,
const double *rowub)
override;
101 void assignProblem(CoinPackedMatrix *&matrix,
double *&collb,
double *&colub,
double *&obj,
double *&rowlb,
102 double *&rowub)
override;
103 void loadProblem(
const CoinPackedMatrix &matrix,
const double *collb,
const double *colub,
const double *obj,
104 const char *rowsen,
const double *rowrhs,
const double *rowrng)
override;
105 void assignProblem(CoinPackedMatrix *&matrix,
double *&collb,
double *&colub,
double *&obj,
char *&rowsen,
106 double *&rowrhs,
double *&rowrng)
override;
108 loadProblem(
const int numcols,
const int numrows,
const CoinBigIndex *start,
const int *index,
const double *value,
109 const double *collb,
const double *colub,
const double *obj,
const double *rowlb,
110 const double *rowub)
override;
112 loadProblem(
const int numcols,
const int numrows,
const CoinBigIndex *start,
const int *index,
const double *value,
113 const double *collb,
const double *colub,
const double *obj,
const char *rowsen,
const double *rowrhs,
114 const double *rowrng)
override;
115 void writeMps(
const char *filename,
const char *extension,
double objSense)
const override;
116 void writeLp(
const char *filename,
117 const char *extension =
"lp",
118 double epsilon = 1e-5,
119 int numberAcross = 10,
121 double objSense = 0.0,
122 bool useRowNames =
true)
const override;
123 OsiSolverInterface *clone(
bool copyData =
true)
const override;
124 void deleteRows(
const int num,
const int *rowIndices)
override;
126 void applyRowCut(
const OsiRowCut &rc)
override;
127 void applyColCut(
const OsiColCut &cc)
override;