idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
PenaltyMethod.h
1//
2// Created by henri on 19.09.24.
3//
4
5#ifndef IDOL_PENALTYMETHOD_H
6#define IDOL_PENALTYMETHOD_H
7
8#include "idol/general/optimizers/OptimizerFactory.h"
9#include "idol/mixed-integer/modeling/annotations/Annotation.h"
10#include "idol/general/utils/Map.h"
11#include "SubProblem.h"
12#include "Formulation.h"
13#include "PenaltyUpdates.h"
14#include "Optimizers_PADM.h"
15#include <optional>
16
17namespace idol {
18 class PenaltyMethod;
19}
20
22public:
23 explicit PenaltyMethod(Annotation<double> t_penalized_constraints);
24
25 PenaltyMethod(const PenaltyMethod& t_src);
26 PenaltyMethod(PenaltyMethod&&) = default;
27
28 PenaltyMethod& operator=(const PenaltyMethod&) = delete;
29 PenaltyMethod& operator=(PenaltyMethod&&) = default;
30
31 PenaltyMethod& with_optimizer(const OptimizerFactory& t_optimizer_factory);
32
33 PenaltyMethod& with_rescaling_threshold(double t_threshold);
34
35 PenaltyMethod& with_penalty_update(const PenaltyUpdate& t_penalty_update);
36
37 PenaltyMethod& with_feasible_solution_status(SolutionStatus t_status);
38
39 Optimizers::PADM *operator()(const Model &t_model) const override;
40
41 PenaltyMethod& operator+=(const OptimizerFactory& t_optimizer_factory);
42
43 [[nodiscard]] PenaltyMethod *clone() const override;
44private:
45 Annotation<unsigned int> m_decomposition;
46 Annotation<double> m_initial_penalty_parameters;
47 std::unique_ptr<OptimizerFactory> m_optimizer;
48 std::optional<double> m_rescaling_threshold;
49 std::unique_ptr<PenaltyUpdate> m_penalty_update;
50 std::optional<SolutionStatus> m_feasible_solution_status;
51 std::optional<double> m_initial_penalty_parameter;
52};
53
54idol::PenaltyMethod operator+(const idol::PenaltyMethod& t_penalty_method, const idol::OptimizerFactory& t_optimizer_factory);
55
56#endif //IDOL_PENALTYMETHOD_H
Optimizers::PADM * operator()(const Model &t_model) const override
PenaltyMethod * clone() const override