← Documentation
ADS-IDAC Engine 5.0.0
graph.hpp
Go to the documentation of this file.
1#pragma once
10#include "bncore/graph/node.hpp"
11#include <memory>
12#include <stdexcept>
13#include <unordered_map>
14#include <vector>
15
16namespace bncore {
17
28class Graph {
29public:
30 Graph() = default;
31
37 NodeId add_variable(const std::string &name,
38 const std::vector<std::string> &states);
39
52 void split_state(NodeId id, std::size_t state_idx,
53 const std::string &new_state1,
54 const std::string &new_state2);
55
64 void add_edge(NodeId parent, NodeId child);
65
70 void add_edge(const std::string &parent_name, const std::string &child_name);
71
95 void set_cpt(NodeId id, const std::vector<double> &cpt);
96
103 void set_cpt(const std::string &name, const std::vector<double> &cpt);
104
110 [[nodiscard]] const VariableMetadata &get_variable(NodeId id) const;
111
117 [[nodiscard]] const VariableMetadata &
118 get_variable(const std::string &name) const;
119
123 [[nodiscard]] const std::vector<NodeId> &get_parents(NodeId id) const;
124
128 [[nodiscard]] const std::vector<NodeId> &get_children(NodeId id) const;
129
131 [[nodiscard]] std::size_t num_variables() const;
132
133private:
134 std::vector<VariableMetadata> variables_;
135 std::unordered_map<std::string, NodeId> name_to_id_;
136
137 // Adjacency lists
138 std::vector<std::vector<NodeId>> parents_;
139 std::vector<std::vector<NodeId>> children_;
140};
141
142} // namespace bncore
Directed graphical model over discrete variables.
Definition: graph.hpp:28
void add_edge(NodeId parent, NodeId child)
Adds a directed edge from parent to child.
Definition: graph.cpp:36
const std::vector< NodeId > & get_parents(NodeId id) const
Parents of a variable, in the order their edges were added.
Definition: graph.cpp:105
std::unordered_map< std::string, NodeId > name_to_id_
Definition: graph.hpp:135
std::vector< VariableMetadata > variables_
indexed by NodeId
Definition: graph.hpp:134
std::vector< std::vector< NodeId > > parents_
parents_[child], in edge insertion order
Definition: graph.hpp:138
void set_cpt(NodeId id, const std::vector< double > &cpt)
Stores the conditional probability table of a variable.
Definition: graph.cpp:49
std::vector< std::vector< NodeId > > children_
children_[parent], in edge insertion order
Definition: graph.hpp:139
std::size_t num_variables() const
Number of variables added so far.
Definition: graph.cpp:117
const std::vector< NodeId > & get_children(NodeId id) const
Children of a variable, in the order their edges were added.
Definition: graph.cpp:111
const VariableMetadata & get_variable(NodeId id) const
Metadata of a variable.
Definition: graph.cpp:92
Graph()=default
NodeId add_variable(const std::string &name, const std::vector< std::string > &states)
Adds a variable.
Definition: graph.cpp:5
void split_state(NodeId id, std::size_t state_idx, const std::string &new_state1, const std::string &new_state2)
Replaces one state of a variable by two states.
Definition: graph.cpp:22
std::uint32_t NodeId
Handle of a variable within one Graph.
Definition: node.hpp:20
Basic BNCore types: the NodeId variable handle and the VariableMetadata record that Graph stores for ...
Everything a Graph stores about one discrete variable.
Definition: node.hpp:23