Minotaur 0.4.1
Docs for developers
UnoModel.h
Go to the documentation of this file.
1//
2// Minotaur -- It's only 1/2 bull
3//
4// (C)opyright 2008 - 2025 The Minotaur Team.
5//
6
13#ifndef UNO_ENGINE_MODEL_H
14#define UNO_ENGINE_MODEL_H
15
16
17#include <vector>
18
19#include "linear_algebra/SparseVector.hpp"
20#include "model/Model.hpp"
21#include "symbolic/CollectionAdapter.hpp"
22extern "C"
23{
24#include "asl_pfgh.h"
25#include "getstub.h"
26}
27namespace uno
28{
29Level Logger::level = INFO;
30class UnoModel : public Model
31{
32public:
34 Minotaur::UnoSolPtr sol, const Options& options);
35 ~UnoModel() override;
36
37 [[nodiscard]] double evaluate_objective(
38 const Vector<double>& x) const override;
39 void evaluate_objective_gradient(
40 const Vector<double>& x, SparseVector<double>& gradient) const override;
41 void evaluate_constraints(const Vector<double>& x,
42 std::vector<double>& constraints) const override;
43 void evaluate_constraint_gradient(
44 const Vector<double>& x, size_t constraint_index,
45 SparseVector<double>& gradient) const override;
46 void evaluate_constraint_jacobian(
47 const Vector<double>& x,
48 RectangularMatrix<double>& constraint_jacobian) const override;
49 void evaluate_lagrangian_hessian(
50 const Vector<double>& x, double objective_multiplier,
51 const Vector<double>& multipliers,
52 SymmetricMatrix<size_t, double>& hessian) const override;
53
54 [[nodiscard]] double variable_lower_bound(
55 size_t variable_index) const override;
56 [[nodiscard]] double variable_upper_bound(
57 size_t variable_index) const override;
58 [[nodiscard]] BoundType get_variable_bound_type(
59 size_t variable_index) const override;
60 [[nodiscard]] const Collection<size_t>& get_lower_bounded_variables()
61 const override;
62 [[nodiscard]] const Collection<size_t>& get_upper_bounded_variables()
63 const override;
64 [[nodiscard]] const SparseVector<size_t>& get_slacks() const override;
65 [[nodiscard]] const Collection<size_t>& get_single_lower_bounded_variables()
66 const override;
67 [[nodiscard]] const Collection<size_t>& get_single_upper_bounded_variables()
68 const override;
69
70 [[nodiscard]] double constraint_lower_bound(
71 size_t constraint_index) const override;
72 [[nodiscard]] double constraint_upper_bound(
73 size_t constraint_index) const override;
74 [[nodiscard]] FunctionType get_constraint_type(
75 size_t constraint_index) const override;
76 [[nodiscard]] BoundType get_constraint_bound_type(
77 size_t constraint_index) const override;
78 [[nodiscard]] const Collection<size_t>& get_equality_constraints()
79 const override;
80 [[nodiscard]] const Collection<size_t>& get_inequality_constraints()
81 const override;
82 [[nodiscard]] const std::vector<size_t>& get_linear_constraints()
83 const override;
84
85 void initial_primal_point(Vector<double>& x) const override;
86 void initial_dual_point(Vector<double>& multipliers) const override;
87 void postprocess_solution(
88 Iterate& iterate, TerminationStatus termination_status) const override;
89
90 [[nodiscard]] size_t number_objective_gradient_nonzeros() const override;
91 [[nodiscard]] size_t number_jacobian_nonzeros() const override;
92 [[nodiscard]] size_t number_hessian_nonzeros() const override;
93
94private:
97 double* primals_;
98 double* duals_;
99 double unoTol_;
100 double obj_sense_;
101 SparseVector<size_t> slacks_{};
102 std::vector<double> varLb_, varUb_, consLb_, consUb_;
103 std::vector<size_t> eqCons_{};
104 CollectionAdapter<std::vector<size_t>&> eqConsColl_;
105 std::vector<size_t> ineqCons_{};
106 CollectionAdapter<std::vector<size_t>&> ineqConsColl_;
107 std::vector<size_t> lbVars_;
108 CollectionAdapter<std::vector<size_t>&> lbVarColl_;
109 std::vector<size_t> ubVars_;
110 CollectionAdapter<std::vector<size_t>&> ubVarColl_;
111 std::vector<size_t> singleLbVar_{}; // indices of the single lower-bounded
112 // variables
113 CollectionAdapter<std::vector<size_t>&> singleLbVarColl_;
114 std::vector<size_t> singleUbVar_{}; // indices of the single upper-bounded
115 // variables
116 CollectionAdapter<std::vector<size_t>&> singleUbVarColl_;
117 void genCons_();
118 void genVars_();
119 std::vector<size_t> linCons_;
120 std::vector<BoundType> varStat_;
121 std::vector<FunctionType> consType_;
122 std::vector<BoundType> consStat_;
123 static void getBndType_(const std::vector<double>& lowBnds_,
124 const std::vector<double>& uppBnds_,
125 std::vector<BoundType>& status);
126
127 // UnoModel(const std::string& file_name);
128 // [[nodiscard]] size_t compute_hessian_number_nonzeros(double
129 // objective_multiplier, const Vector<double>& multipliers) const;
130 [[nodiscard]] double getHessEntry_(const Vector<double>& x,
131 const Vector<double>& multipliers,
132 size_t row, size_t col,
133 double objective_multiplier) const;
134 double* pullXToBnds_(const Vector<double>& x, size_t n) const;
135 bool evalWithinBnds_ = false;
136};
137
138} // namespace uno
139#endif // UNO_UnoFunInterface_H
Definition: Environment.h:28
Definition: Problem.h:74
Definition: UnoEngine.h:67
Definition: UnoModel.h:31
BoundType
Different types of variable-bounds.
Definition: Types.h:131
FunctionType
Different types of functions in Minotaur.
Definition: Types.h:65

Minotaur source code documented by Doxygen 1.9.4 on Fri Apr 25 2025