idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
OsiIdolSolverInterface.h
1//
2// Created by henri on 05.02.24.
3//
4
5#ifndef IDOL_OSIIDOLSOLVERINTERFACE_H
6#define IDOL_OSIIDOLSOLVERINTERFACE_H
7
8#ifdef IDOL_USE_OSI
9
10#include <OsiSolverInterface.hpp>
11#include "idol/mixed-integer/modeling/models/Model.h"
12
13class OsiIdolSolverInterface : public OsiSolverInterface {
14 idol::Model& m_model;
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;
18
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;
33
34 void relax();
35 void unrelax();
36public:
37 OsiIdolSolverInterface(idol::Model& t_model);
38
39 OsiIdolSolverInterface(const OsiIdolSolverInterface& t_src);
40
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;
99 void
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;
103 void
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,
112 int decimals = 9,
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;
117protected:
118 void applyRowCut(const OsiRowCut &rc) override;
119 void applyColCut(const OsiColCut &cc) override;
120};
121
122#endif
123
124#endif //IDOL_OSIIDOLSOLVERINTERFACE_H