5#ifndef IDOL_OPTIMIZERS_MOSEK_H
6#define IDOL_OPTIMIZERS_MOSEK_H
10#include "idol/general/optimizers/OptimizerWithLazyUpdates.h"
11#include "MosekCallbackI.h"
20 static const MosekKiller s_mosek_killer;
23 mosek::fusion::Variable::t variable;
24 mosek::fusion::Constraint::t lower_bound;
25 mosek::fusion::Constraint::t upper_bound;
29 mosek::fusion::Constraint::t constraint;
32 namespace Optimizers {
37class idol::Optimizers::Mosek :
public OptimizerWithLazyUpdates<MosekVar, MosekCtr, MosekCtr, bool> {
38 bool m_continuous_relaxation;
40 mosek::fusion::Model::t m_model;
41 SolutionStatus m_solution_status = Loaded;
42 SolutionReason m_solution_reason = NotSpecified;
44 std::unique_ptr<MosekCallbackI> m_mosek_callback;
46 void set_var_attr(MosekVar& t_mosek_var,
int t_type,
double t_lb,
double t_ub,
double t_obj);
47 void set_var_lb(MosekVar& t_mosek_var,
double t_bound);
48 void set_var_ub(MosekVar& t_mosek_var,
double t_bound);
49 [[nodiscard]] mosek::fusion::Expression::t to_mosek_expression(
const LinExpr<Var>& t_expr)
const;
50 [[nodiscard]] mosek::fusion::Expression::t to_mosek_expression(
const AffExpr<Var>& t_expr)
const;
52 void hook_build()
override;
53 void hook_optimize()
override;
54 void hook_write(
const std::string &t_name)
override;
55 MosekVar hook_add(
const Var &t_var,
bool t_add_column)
override;
56 MosekCtr hook_add(
const Ctr &t_ctr)
override;
57 MosekCtr hook_add(
const QCtr &t_ctr)
override;
58 bool hook_add(
const SOSCtr &t_ctr)
override;
59 void hook_update_objective_sense()
override;
60 void hook_update_matrix(
const Ctr &t_ctr,
const Var &t_var,
double t_constant)
override;
61 void hook_update()
override;
62 void hook_update(
const Var &t_var)
override;
63 void hook_update(
const Ctr &t_ctr)
override;
64 void hook_update_objective()
override;
65 void hook_update_rhs()
override;
66 void hook_remove(
const Var &t_var)
override;
67 void hook_remove(
const Ctr &t_ctr)
override;
68 void hook_remove(
const QCtr &t_ctr)
override;
69 void hook_remove(
const SOSCtr &t_ctr)
override;
71 [[nodiscard]] SolutionStatus get_status()
const override;
72 [[nodiscard]] SolutionReason get_reason()
const override;
73 [[nodiscard]]
double get_best_obj()
const override;
74 [[nodiscard]]
double get_best_bound()
const override;
75 [[nodiscard]]
double get_var_primal(
const Var &t_var)
const override;
76 [[nodiscard]]
double get_var_reduced_cost(
const Var &t_var)
const override;
77 [[nodiscard]]
double get_var_ray(
const Var &t_var)
const override;
78 [[nodiscard]]
double get_ctr_dual(
const Ctr &t_ctr)
const override;
79 [[nodiscard]]
double get_ctr_farkas(
const Ctr &t_ctr)
const override;
80 [[nodiscard]]
double get_relative_gap()
const override;
81 [[nodiscard]]
double get_absolute_gap()
const override;
82 [[nodiscard]]
unsigned int get_n_solutions()
const override;
83 [[nodiscard]]
unsigned int get_solution_index()
const override;
84 void set_solution_index(
unsigned int t_index)
override;
86 explicit Mosek(
const Model& t_model,
bool t_continuous_relaxation);
90 [[nodiscard]] std::string name()
const override {
return "Mosek"; }
92 void set_param_time_limit(
double t_time_limit)
override;
94 void set_param_threads(
unsigned int t_thread_limit)
override;
96 void set_param_best_obj_stop(
double t_best_obj_stop)
override;
98 void set_param_best_bound_stop(
double t_best_bound_stop)
override;
100 void set_param_presolve(
bool t_value)
override;
102 void set_param_infeasible_or_unbounded_info(
bool t_value)
override;
104 void set_parameter(
const std::string& t_param,
double t_value);
106 void set_parameter(
const std::string& t_param,
int t_value);
108 void set_parameter(
const std::string& t_param,
const std::string& t_value);
110 void set_param_logs(
bool t_value)
override;
112 void add_callback(Callback* t_ptr_to_callback);