idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
Gurobi.h
1//
2// Created by henri on 23/03/23.
3//
4
5#ifndef IDOL_GUROBI_H
6#define IDOL_GUROBI_H
7
8#include "idol/general/optimizers/OptimizerFactory.h"
9#include <list>
10#include <memory>
11#include "idol/mixed-integer/optimizers/callbacks/CallbackFactory.h"
12#include "idol/general/utils/Map.h"
13#include "idol/mixed-integer/modeling/objects/Env.h"
14
15#ifdef IDOL_USE_GUROBI
16#include <gurobi_c++.h>
17#else
18enum GRB_IntParam {};
19enum GRB_DoubleParam {};
20#endif
21
22namespace idol {
23 class Callback;
24 class Gurobi;
25}
26
28 std::optional<bool> m_continuous_relaxation;
29 std::optional<bool> m_lazy_cuts;
30 std::optional<unsigned int> m_max_n_solution_in_pool;
31 std::list<std::unique_ptr<CallbackFactory>> m_callbacks;
32
33 Map<GRB_IntParam, int> m_int_params;
34 Map<GRB_DoubleParam, double> m_double_params;
35public:
36 Gurobi() = default;
37
38 Gurobi(const Gurobi& t_src);
39 Gurobi(Gurobi&&) noexcept = default;
40
41 Gurobi& operator=(const Gurobi&) = delete;
42 Gurobi& operator=(Gurobi&&) noexcept = default;
43
44 Optimizer *operator()(const Model &t_model) const override;
45
46 static Gurobi ContinuousRelaxation();
47
48 Gurobi& add_callback(const CallbackFactory& t_cb);
49
50 Gurobi& with_lazy_cut(bool t_value);
51
52 Gurobi& with_max_n_solution_in_pool(unsigned int t_value);
53
54 Gurobi& with_continuous_relaxation_only(bool t_value);
55
56 Gurobi& with_external_param(GRB_IntParam t_param, int t_value);
57
58 Gurobi& with_external_param(GRB_DoubleParam t_param, double t_value);
59
60 static Model read_from_file(Env& t_env, const std::string& t_filename);
61
62 [[nodiscard]] Gurobi *clone() const override;
63};
64
65#endif //IDOL_GUROBI_H
Optimizer * operator()(const Model &t_model) const override
Gurobi * clone() const override