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
11
namespace
idol::BranchingRules {
12
template
<
class
BranchingRuleT>
class
Diver;
13
}
14
15
template
<
class
BranchingRuleT>
16
class
idol::BranchingRules::Diver
:
public
BranchingRuleT {
17
public
:
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
25
template
<
class
BranchingRuleT>
26
idol::BranchingRules::Diver<BranchingRuleT>::Diver
(
const
idol::Optimizers::BranchAndBound<NodeInfoT>
&t_parent,
27
std::list<Var> t_branching_candidates)
28
: BranchingRuleT(t_parent, std::move(t_branching_candidates)) {}
29
30
template
<
class
BranchingRuleT>
31
std::list<typename BranchingRuleT::NodeInfoT *>
32
idol::BranchingRules::Diver<BranchingRuleT>::create_child_nodes
(
const
idol::Node<NodeInfoT>
&t_node) {
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
idol::BranchingRules::Diver
Definition
Diver.h:16
idol::Node
Definition
Node.h:16
idol::Optimizers::BranchAndBound
Definition
Optimizers_BranchAndBound.h:30
lib
include
idol
mixed-integer
optimizers
branch-and-bound
branching-rules
impls
Diver.h
Generated by
1.9.8