idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
Wentges.h
1//
2// Created by henri on 31.10.23.
3//
4
5#ifndef IDOL_WENTGES_H
6#define IDOL_WENTGES_H
7
8#include <optional>
9#include "DualPriceSmoothingStabilization.h"
10
11namespace idol::DantzigWolfe {
12 class Wentges;
13}
14
16 double m_initial_factor;
17public:
18 explicit Wentges(double t_initial_factor) : m_initial_factor(t_initial_factor) {}
19
21 double m_factor;
22 std::optional<DualPoint> m_stability_center;
23 public:
24 explicit Strategy(double t_initial_factor) : m_factor(t_initial_factor) {}
25
26 void initialize() override {
27 m_stability_center.reset();
28 }
29
30 void update_stability_center(const DualPoint &t_master_dual) override {
31 m_stability_center = t_master_dual;
32 }
33
34 DualPoint compute_smoothed_dual_solution(const DualPoint &t_master_dual) override {
35
36 if (!m_stability_center.has_value() || m_factor <= 1e-4) {
37 m_stability_center = t_master_dual;
38 return t_master_dual;
39 }
40
41 auto result = m_factor * m_stability_center.value() + (1. - m_factor) * t_master_dual;
42
43 m_stability_center = t_master_dual;
44
45 return result;
46 }
47
48 };
49
50 DualPriceSmoothingStabilization::Strategy *operator()() const override {
51 return new Strategy(m_initial_factor);
52 }
53
54 DualPriceSmoothingStabilization *clone() const override {
55 return new Wentges(*this);
56 }
57};
58
59#endif //IDOL_WENTGES_H