idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
Diver.h
1//
2// Created by henri on 17.10.23.
3//
4
5#ifndef IDOL_IMPL_DIVER_H
6#define IDOL_IMPL_DIVER_H
7
8#include <cmath>
9#include "VariableBranching.h"
10
11namespace idol::BranchingRules {
12 template<class BranchingRuleT> class Diver;
13}
14
15template<class BranchingRuleT>
16class idol::BranchingRules::Diver : public BranchingRuleT {
17public:
18 using NodeInfoT = typename BranchingRuleT::NodeInfoT;
19
20 explicit Diver(const Optimizers::BranchAndBound<NodeInfoT>& t_parent, std::list<Var> t_branching_candidates);
21
22 std::list<NodeInfoT *> create_child_nodes(const Node<NodeInfoT> &t_node) override;
23};
24
25template<class BranchingRuleT>
27 std::list<Var> t_branching_candidates)
28 : BranchingRuleT(t_parent, std::move(t_branching_candidates)) {}
29
30template<class BranchingRuleT>
31std::list<typename BranchingRuleT::NodeInfoT *>
33
34 auto children = BranchingRuleT::create_child_nodes(t_node);
35
36 auto it = children.begin();
37 const auto end = children.end();
38
39 auto first = *it;
40
41 for (++it ; it != end ; ++it) {
42 delete *it;
43 }
44
45 return { first };
46}
47
48#endif //IDOL_IMPL_DIVER_H