idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
SubProblem.h
1//
2// Created by henri on 31.10.23.
3//
4
5#ifndef IDOL_SUBPROBLEM_H
6#define IDOL_SUBPROBLEM_H
7
8#include <list>
9#include <memory>
10#include <optional>
11#include "idol/general/optimizers/OptimizerFactory.h"
12#include "idol/general/utils/IteratorForward.h"
13
14namespace idol::DantzigWolfe {
15 class SubProblem;
16}
17
19 std::optional<double> m_lower_multiplicity;
20 std::optional<double> m_upper_multiplicity;
21
22 std::list<std::unique_ptr<OptimizerFactory>> m_phase_optimizers;
23
24 std::optional<unsigned int> m_max_column_per_pricing;
25 std::optional<std::pair<unsigned int, double>> m_column_pool_clean_up_parameters; // threshold, ratio
26public:
27 SubProblem() = default;
28
29 SubProblem(const SubProblem& t_src);
30 SubProblem(SubProblem&& t_src) = default;
31
32 SubProblem& operator=(const SubProblem&) = delete;
33 SubProblem& operator=(SubProblem&&) = default;
34
35 SubProblem& with_multiplicities(double t_lower, double t_upper);
36
37 SubProblem& with_lower_multiplicity(double t_lower);
38
39 SubProblem& with_upper_multiplicity(double t_upper);
40
41 SubProblem& add_optimizer(const OptimizerFactory &t_optimizer);
42
43 SubProblem& with_max_column_per_pricing(unsigned int t_n_columns);
44
45 SubProblem& with_column_pool_clean_up(unsigned int t_threshold, double t_ratio);
46
47 unsigned int max_column_per_pricing() const { return m_max_column_per_pricing.has_value() ? m_max_column_per_pricing.value() : 1; }
48
49 double lower_multiplicity() const;
50
51 double upper_multiplicity() const;
52
53 unsigned int column_pool_clean_up_threshold() const;
54
55 double column_pool_clean_up_ratio() const;
56
57 using PhaseId = std::list<std::unique_ptr<OptimizerFactory>>::const_iterator;
58
59 auto phases() const { return ConstIteratorForward(m_phase_optimizers); }
60};
61
62#endif //IDOL_SUBPROBLEM_H