13#ifndef UNO_ENGINE_MODEL_H
14#define UNO_ENGINE_MODEL_H
19#include "linear_algebra/SparseVector.hpp"
20#include "model/Model.hpp"
21#include "symbolic/CollectionAdapter.hpp"
29Level Logger::level = INFO;
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;
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()
62 [[nodiscard]]
const Collection<size_t>& get_upper_bounded_variables()
64 [[nodiscard]]
const SparseVector<size_t>& get_slacks()
const override;
65 [[nodiscard]]
const Collection<size_t>& get_single_lower_bounded_variables()
67 [[nodiscard]]
const Collection<size_t>& get_single_upper_bounded_variables()
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;
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()
80 [[nodiscard]]
const Collection<size_t>& get_inequality_constraints()
82 [[nodiscard]]
const std::vector<size_t>& get_linear_constraints()
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;
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;
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_{};
113 CollectionAdapter<std::vector<size_t>&> singleLbVarColl_;
114 std::vector<size_t> singleUbVar_{};
116 CollectionAdapter<std::vector<size_t>&> singleUbVarColl_;
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);
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;
Definition: Environment.h:28
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