← Documentation
ADS-IDAC Engine 5.0.0
engine.hpp
Go to the documentation of this file.
1#pragma once
15#include <cstdint>
16#include <future>
17#include <memory>
18#include <thread>
19#include <unordered_map>
20#include <vector>
21#include "bncore/graph/node.hpp"
22
23namespace bncore {
24
42public:
48 BatchExecutionEngine(const JunctionTree &jt, std::size_t num_threads,
49 std::size_t chunk_size);
50
64 void evaluate(const int *evidence_data, std::size_t batch_size,
65 std::size_t num_vars, double *output_data,
66 std::size_t query_var);
67
104 void evaluate_multi(const int *evidence_data, std::size_t batch_size,
105 std::size_t num_vars, const std::size_t *query_vars,
106 std::size_t num_queries,
107 const std::size_t *output_offsets,
108 double *output_data);
109
110 // MAP / MPE query:
111 // output_states layout is [batch_size x num_model_vars] (row-major).
112 // num_vars is the evidence matrix width.
133 void evaluate_map(const int *evidence_data, std::size_t batch_size,
134 std::size_t num_vars, int *output_states);
135
147 void set_soft_evidence(bncore::NodeId var, const double *likelihoods,
148 std::size_t n_states);
161 const double *likelihoods_matrix,
162 std::size_t total_n_states); // size is batch_size * n_states
164 void clear_soft_evidence();
165
173
175 const JunctionTree &junction_tree() const { return jt_; }
176
177private:
181 std::size_t current_batch_start,
182 std::size_t current_chunk_size) const;
183
185 std::size_t num_threads_;
186 std::size_t chunk_size_;
187 std::unique_ptr<BatchWorkspace> single_workspace_cache_;
189
190 std::unordered_map<bncore::NodeId, std::vector<double>> soft_evidence_scalar_;
191 // mapping NodeId -> matrix [row_major, batch_size * n_states]
192 std::unordered_map<bncore::NodeId, std::vector<double>> soft_evidence_matrix_;
193};
194
195} // namespace bncore
Runs junction tree inference for a batch of evidence rows.
Definition: engine.hpp:41
void apply_soft_evidence_to_workspace(BatchWorkspace &workspace, std::size_t current_batch_start, std::size_t current_chunk_size) const
Definition: engine.cpp:262
const JunctionTree & jt_
Definition: engine.hpp:184
void evaluate_multi(const int *evidence_data, std::size_t batch_size, std::size_t num_vars, const std::size_t *query_vars, std::size_t num_queries, const std::size_t *output_offsets, double *output_data)
Posterior marginals of several variables for every batch row, from one sum-product calibration per ch...
Definition: engine.cpp:36
void evaluate_map(const int *evidence_data, std::size_t batch_size, std::size_t num_vars, int *output_states)
Most probable state of every variable for every batch row, from max-product propagation.
Definition: engine.cpp:147
std::unique_ptr< BatchWorkspace > single_workspace_cache_
reused when a batch is a single chunk
Definition: engine.hpp:187
std::size_t single_workspace_batch_size_
batch size the cache was built for
Definition: engine.hpp:188
void invalidate_workspace_cache()
Discards the workspace kept for single-chunk evaluations.
Definition: engine.cpp:242
void clear_soft_evidence()
Removes all stored soft evidence, scalar and matrix.
Definition: engine.cpp:257
const JunctionTree & junction_tree() const
The junction tree given at construction.
Definition: engine.hpp:175
std::unordered_map< bncore::NodeId, std::vector< double > > soft_evidence_scalar_
Definition: engine.hpp:190
void set_soft_evidence_matrix(bncore::NodeId var, const double *likelihoods_matrix, std::size_t total_n_states)
Sets a separate likelihood vector per batch row for a variable.
Definition: engine.cpp:252
std::unordered_map< bncore::NodeId, std::vector< double > > soft_evidence_matrix_
Definition: engine.hpp:192
BatchExecutionEngine(const JunctionTree &jt, std::size_t num_threads, std::size_t chunk_size)
Definition: engine.cpp:13
void set_soft_evidence(bncore::NodeId var, const double *likelihoods, std::size_t n_states)
Sets one likelihood vector for a variable, used for every batch row.
Definition: engine.cpp:247
void evaluate(const int *evidence_data, std::size_t batch_size, std::size_t num_vars, double *output_data, std::size_t query_var)
Posterior marginal of one variable for every batch row.
Definition: engine.cpp:24
Message passing state for one junction tree and one batch size.
Definition: workspace.hpp:110
Cliques and separators compiled from one Graph.
Junction tree data structure of BNCore: Clique, Separator and the JunctionTree container.
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 ...
bncore::BatchWorkspace, the message passing state of junction tree inference, and the precomputed ind...