1 /* Copyright (C) 2009 Charles Vaske [cvaske at soe dot ucsc dot edu]
2 University of California Santa Cruz
4 This file is part of libDAI.
6 libDAI is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 libDAI is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with libDAI; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23 /// \brief Defines classes Evidence and Observation
24 /// \todo Describe tabular data file format
27 #ifndef __defined_libdai_evidence_h
28 #define __defined_libdai_evidence_h
32 #include <dai/daialg.h>
38 /// Stores observed values of a subset of variables
41 /// Used to store the state of some variables
42 std::map
<Var
, size_t> _obs
;
45 /// Default constructor
46 Observation() : _obs() {}
48 /// Get all observations
49 const std::map
<Var
, size_t>& observations() const { return _obs
; }
51 /// Add an observation
52 void addObservation( Var node
, size_t setting
);
54 /// Clamp variables in the graphical model to their observed values
55 void applyEvidence( InfAlg
& alg
) const;
59 /// Stores multiple joint observations of sets of variables.
60 /** The Evidence class stores multiple samples, where each sample is the joint
61 * observation of the states of some variables.
65 /// Each sample is the joint observation of the states of some variables
66 std::vector
<Observation
> _samples
;
69 /// Default constructor
70 Evidence() : _samples() {}
72 /// Read in tabular data from a stream.
73 /** Each line contains one sample, and the first line is a header line with names.
75 void addEvidenceTabFile( std::istream
& is
, std::map
<std::string
, Var
> &varMap
);
77 /// Read in tabular data from a stream.
78 /** Each line contains one sample, and the first line is a header line with
79 * variable labels which should correspond with a subset of the variables in fg.
81 void addEvidenceTabFile( std::istream
& is
, FactorGraph
& fg
);
83 /// Returns number of stored samples
84 size_t nrSamples() const { return _samples
.size(); }
86 /// @name Iterator interface
88 /// Iterator over the elements
89 typedef std::vector
<Observation
>::iterator iterator
;
90 /// Constant iterator over the elements
91 typedef std::vector
<Observation
>::const_iterator const_iterator
;
93 /// Returns iterator that points to the first element
94 iterator
begin() { return _samples
.begin(); }
95 /// Returns constant iterator that points to the first element
96 const_iterator
begin() const { return _samples
.begin(); }
97 /// Returns iterator that points beyond the last element
98 iterator
end() { return _samples
.end(); }
99 /// Returns constant iterator that points beyond the last element
100 const_iterator
end() const { return _samples
.end(); }
105 } // end of namespace dai