idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
UniformlyRandom.h
1//
2// Created by henri on 17.10.23.
3//
4
5#ifndef IDOL_IMPL_UNIFORMLYRANDOM_H
6#define IDOL_IMPL_UNIFORMLYRANDOM_H
7
8#include <random>
9#include "VariableBranching.h"
10
11namespace idol::BranchingRules {
12 template<class NodeInfoT> class UniformlyRandom;
13}
14
15template<class NodeInfoT>
17 unsigned int m_seed;
18protected:
19 std::list<std::pair<Var, double>> scoring_function(const std::list<Var> &t_var, const Node<NodeInfoT> &t_node) override;
20public:
22 std::list<Var> t_branching_candidates,
23 unsigned int t_seed);
24};
25
26template<class NodeInfoT>
29 std::list<Var> t_branching_candidates,
30 unsigned int t_seed
31 )
32 : VariableBranching<NodeInfoT>(t_parent, std::move(t_branching_candidates)),
33 m_seed(t_seed) {}
34
35template<class NodeInfoT>
36std::list<std::pair<idol::Var, double>>
37idol::BranchingRules::UniformlyRandom<NodeInfoT>::scoring_function(const std::list<idol::Var> &t_variables,
38 const Node<NodeInfoT> &t_node) {
39
40 std::mt19937 engine(m_seed);
41 std::uniform_real_distribution<double> distribution(0, 1);
42
43 std::list<std::pair<Var, double>> result;
44
45 for (const auto& var : t_variables) {
46 result.emplace_back(var, distribution(engine));
47 }
48
49 return result;
50}
51
52#endif //IDOL_IMPL_UNIFORMLYRANDOM_H