aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
gum::DecisionTensor< GUM_SCALAR > Class Template Reference

<agrum/ID/inference/decisionTensor.h> More...

#include <decisionTensor.h>

Public Member Functions

 DecisionTensor ()
 ~DecisionTensor ()
 DecisionTensor (const Tensor< GUM_SCALAR > &prob, const Tensor< GUM_SCALAR > &util)
 DecisionTensor (const DecisionTensor< GUM_SCALAR > &dp)
void clear ()
DecisionTensor< GUM_SCALAR > & operator= (const DecisionTensor< GUM_SCALAR > &src)
 DecisionTensor (DecisionTensor< GUM_SCALAR > &&dp)
DecisionTensor< GUM_SCALAR > & operator= (DecisionTensor< GUM_SCALAR > &&src)
bool operator== (const DecisionTensor< GUM_SCALAR > &p) const
bool operator!= (const DecisionTensor< GUM_SCALAR > &p) const
const DiscreteVariablevariable (const std::string &name) const
void insertProba (const gum::Tensor< GUM_SCALAR > &proba)
void insertUtility (const gum::Tensor< GUM_SCALAR > &util)
DecisionTensor< GUM_SCALAR > operator* (const DecisionTensor< GUM_SCALAR > &dp1) const
DecisionTensor< GUM_SCALAR > operator*= (const DecisionTensor< GUM_SCALAR > &dp1)
DecisionTensor< GUM_SCALAR > operator^ (const gum::VariableSet &onto) const
DecisionTensor< GUM_SCALAR > operator^ (const std::vector< std::string > &ontonames) const
std::pair< GUM_SCALAR, GUM_SCALAR > meanVar ()
virtual std::string toString () const

Static Public Member Functions

static Tensor< GUM_SCALAR > divideEvenZero (const Tensor< GUM_SCALAR > &p1, const Tensor< GUM_SCALAR > &p2)
static DecisionTensor< GUM_SCALAR > combination (const DecisionTensor< GUM_SCALAR > &dp1, const DecisionTensor< GUM_SCALAR > &dp2)
static DecisionTensor< GUM_SCALAR > marginalization (const DecisionTensor< GUM_SCALAR > &dp, const gum::VariableSet &onto)
static DecisionTensor< GUM_SCALAR > marginalization (const DecisionTensor< GUM_SCALAR > &dp, const std::vector< std::string > &ontonames)

Public Attributes

Tensor< GUM_SCALAR > probPot
Tensor< GUM_SCALAR > utilPot

Detailed Description

template<typename GUM_SCALAR>
class gum::DecisionTensor< GUM_SCALAR >

<agrum/ID/inference/decisionTensor.h>

Tensor for optimization in LIMIDS (such as Single Policy Update)

Definition at line 61 of file decisionTensor.h.

Constructor & Destructor Documentation

◆ DecisionTensor() [1/4]

template<typename GUM_SCALAR>
gum::DecisionTensor< GUM_SCALAR >::DecisionTensor ( )
inlineexplicit

Definition at line 66 of file decisionTensor.h.

66 {
68 probPot.fillWith(GUM_SCALAR(1));
69 utilPot.fillWith(GUM_SCALAR(0));
70 }
<agrum/ID/inference/decisionTensor.h>
Tensor< GUM_SCALAR > utilPot
Tensor< GUM_SCALAR > probPot

References DecisionTensor(), probPot, and utilPot.

Referenced by DecisionTensor(), DecisionTensor(), DecisionTensor(), DecisionTensor(), ~DecisionTensor(), combination(), marginalization(), marginalization(), operator!=(), operator*(), operator*=(), operator=(), operator=(), operator==(), operator^(), and operator^().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~DecisionTensor()

template<typename GUM_SCALAR>
gum::DecisionTensor< GUM_SCALAR >::~DecisionTensor ( )
inline

Definition at line 72 of file decisionTensor.h.

72 {
74 ;
75 }

References DecisionTensor().

Here is the call graph for this function:

◆ DecisionTensor() [2/4]

template<typename GUM_SCALAR>
gum::DecisionTensor< GUM_SCALAR >::DecisionTensor ( const Tensor< GUM_SCALAR > & prob,
const Tensor< GUM_SCALAR > & util )
inline

Definition at line 77 of file decisionTensor.h.

References DecisionTensor(), probPot, and utilPot.

Here is the call graph for this function:

◆ DecisionTensor() [3/4]

template<typename GUM_SCALAR>
gum::DecisionTensor< GUM_SCALAR >::DecisionTensor ( const DecisionTensor< GUM_SCALAR > & dp)
inline

Definition at line 82 of file decisionTensor.h.

References DecisionTensor(), probPot, and utilPot.

Here is the call graph for this function:

◆ DecisionTensor() [4/4]

template<typename GUM_SCALAR>
gum::DecisionTensor< GUM_SCALAR >::DecisionTensor ( DecisionTensor< GUM_SCALAR > && dp)
inline

Definition at line 103 of file decisionTensor.h.

References DecisionTensor(), probPot, and utilPot.

Here is the call graph for this function:

Member Function Documentation

◆ clear()

template<typename GUM_SCALAR>
void gum::DecisionTensor< GUM_SCALAR >::clear ( )
inline

Definition at line 87 of file decisionTensor.h.

87 {
89 p.fillWith(GUM_SCALAR(1));
90 probPot = p;
91 p.fillWith(GUM_SCALAR(0));
92 utilPot = p;
93 }

References gum::Tensor< GUM_SCALAR >::fillWith(), probPot, and utilPot.

Here is the call graph for this function:

◆ combination()

template<typename GUM_SCALAR>
DecisionTensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::combination ( const DecisionTensor< GUM_SCALAR > & dp1,
const DecisionTensor< GUM_SCALAR > & dp2 )
inlinestatic

Definition at line 167 of file decisionTensor.h.

References DecisionTensor(), probPot, and utilPot.

Referenced by operator*(), and operator*=().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ divideEvenZero()

template<typename GUM_SCALAR>
Tensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::divideEvenZero ( const Tensor< GUM_SCALAR > & p1,
const Tensor< GUM_SCALAR > & p2 )
inlinestatic

Definition at line 157 of file decisionTensor.h.

158 {
161 for (I.setFirst(); !I.end(); I.inc()) {
162 if (p2[I] != 0) res.set(I, res[I] / p2[I]);
163 }
164 return res;
165 }

References gum::Instantiation::end(), gum::Instantiation::inc(), and gum::Instantiation::setFirst().

Referenced by marginalization().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ insertProba()

template<typename GUM_SCALAR>
void gum::DecisionTensor< GUM_SCALAR >::insertProba ( const gum::Tensor< GUM_SCALAR > & proba)
inline

Definition at line 136 of file decisionTensor.h.

136{ probPot *= proba; }

References probPot.

◆ insertUtility()

template<typename GUM_SCALAR>
void gum::DecisionTensor< GUM_SCALAR >::insertUtility ( const gum::Tensor< GUM_SCALAR > & util)
inline

Definition at line 138 of file decisionTensor.h.

138{ utilPot += util; }

References utilPot.

◆ marginalization() [1/2]

template<typename GUM_SCALAR>
DecisionTensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::marginalization ( const DecisionTensor< GUM_SCALAR > & dp,
const gum::VariableSet & onto )
inlinestatic

Definition at line 172 of file decisionTensor.h.

173 {
174 const auto pr = dp.probPot.sumIn(onto);
175 return DecisionTensor(pr, divideEvenZero((dp.probPot * dp.utilPot).sumIn(onto), pr));
176 }
static Tensor< GUM_SCALAR > divideEvenZero(const Tensor< GUM_SCALAR > &p1, const Tensor< GUM_SCALAR > &p2)

References DecisionTensor(), divideEvenZero(), probPot, and utilPot.

Referenced by marginalization(), operator^(), and operator^().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ marginalization() [2/2]

template<typename GUM_SCALAR>
DecisionTensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::marginalization ( const DecisionTensor< GUM_SCALAR > & dp,
const std::vector< std::string > & ontonames )
inlinestatic

Definition at line 179 of file decisionTensor.h.

180 {
182 for (const auto& varname: ontonames) {
183 onto.insert(dp.variable(varname));
184 }
185 return marginalization(dp, onto);
186 }
static DecisionTensor< GUM_SCALAR > marginalization(const DecisionTensor< GUM_SCALAR > &dp, const gum::VariableSet &onto)
const DiscreteVariable * variable(const std::string &name) const

References DecisionTensor(), gum::Set< Key >::insert(), marginalization(), and variable().

Here is the call graph for this function:

◆ meanVar()

template<typename GUM_SCALAR>
std::pair< GUM_SCALAR, GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::meanVar ( )
inline

Definition at line 188 of file decisionTensor.h.

188 {
189 const auto tmp = probPot * utilPot;
190 const GUM_SCALAR s = probPot.sum();
191 const double m = tmp.sum() / s;
192 const double m2 = (tmp * utilPot).sum() / s;
193 double var = m2 - m * m;
194 if (var < 0.0) var = 0.0; // var is a small number<0 due to computation errors
196 }

References probPot, and utilPot.

◆ operator!=()

template<typename GUM_SCALAR>
bool gum::DecisionTensor< GUM_SCALAR >::operator!= ( const DecisionTensor< GUM_SCALAR > & p) const
inline

Definition at line 123 of file decisionTensor.h.

123{ return !operator==(p); }
bool operator==(const DecisionTensor< GUM_SCALAR > &p) const

References DecisionTensor(), and operator==().

Here is the call graph for this function:

◆ operator*()

template<typename GUM_SCALAR>
DecisionTensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::operator* ( const DecisionTensor< GUM_SCALAR > & dp1) const
inline

Definition at line 140 of file decisionTensor.h.

140 {
142 }
static DecisionTensor< GUM_SCALAR > combination(const DecisionTensor< GUM_SCALAR > &dp1, const DecisionTensor< GUM_SCALAR > &dp2)

References DecisionTensor(), and combination().

Here is the call graph for this function:

◆ operator*=()

template<typename GUM_SCALAR>
DecisionTensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::operator*= ( const DecisionTensor< GUM_SCALAR > & dp1)
inline

Definition at line 144 of file decisionTensor.h.

144 {
146 return *this;
147 }

References DecisionTensor(), and combination().

Here is the call graph for this function:

◆ operator=() [1/2]

template<typename GUM_SCALAR>
DecisionTensor< GUM_SCALAR > & gum::DecisionTensor< GUM_SCALAR >::operator= ( const DecisionTensor< GUM_SCALAR > & src)
inline

Definition at line 95 of file decisionTensor.h.

95 {
97 if (&src == this) return *this;
100 return *this;
101 }

References DecisionTensor(), probPot, and utilPot.

Here is the call graph for this function:

◆ operator=() [2/2]

template<typename GUM_SCALAR>
DecisionTensor< GUM_SCALAR > & gum::DecisionTensor< GUM_SCALAR >::operator= ( DecisionTensor< GUM_SCALAR > && src)
inline

Definition at line 109 of file decisionTensor.h.

109 {
111 if (&src == this) return *this;
114 return *this;
115 }

References DecisionTensor(), probPot, and utilPot.

Here is the call graph for this function:

◆ operator==()

template<typename GUM_SCALAR>
bool gum::DecisionTensor< GUM_SCALAR >::operator== ( const DecisionTensor< GUM_SCALAR > & p) const
inline

Definition at line 117 of file decisionTensor.h.

117 {
118 // @see Evaluating Influence Diagrams using LIMIDS (2000) - section 3.3
119 return ((p.probPot == this->probPot)
120 && (p.probPot * p.utilPot == this->probPot * this->utilPot));
121 }

References DecisionTensor(), probPot, and utilPot.

Referenced by operator!=().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator^() [1/2]

template<typename GUM_SCALAR>
DecisionTensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::operator^ ( const gum::VariableSet & onto) const
inline

Definition at line 149 of file decisionTensor.h.

149 {
151 }

References DecisionTensor(), and marginalization().

Here is the call graph for this function:

◆ operator^() [2/2]

template<typename GUM_SCALAR>
DecisionTensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::operator^ ( const std::vector< std::string > & ontonames) const
inline

Definition at line 153 of file decisionTensor.h.

References DecisionTensor(), and marginalization().

Here is the call graph for this function:

◆ toString()

template<typename GUM_SCALAR>
virtual std::string gum::DecisionTensor< GUM_SCALAR >::toString ( ) const
inlinevirtual

Definition at line 198 of file decisionTensor.h.

198 {
199 return "prob : " + probPot.toString() + " util:" + utilPot.toString();
200 }

References probPot, and utilPot.

Referenced by gum::operator<<().

Here is the caller graph for this function:

◆ variable()

template<typename GUM_SCALAR>
const DiscreteVariable * gum::DecisionTensor< GUM_SCALAR >::variable ( const std::string & name) const
inline

Definition at line 125 of file decisionTensor.h.

125 {
126 for (const auto& v: probPot.variablesSequence()) {
127 if (v->name() == name) return v;
128 }
129 for (const auto& v: utilPot.variablesSequence()) {
130 if (v->name() == name) return v;
131 }
132
133 GUM_ERROR(NotFound, "'" << name << "' can not be found in DecisionTensor.")
134 }
#define GUM_ERROR(type, msg)
Definition exceptions.h:72

References GUM_ERROR, probPot, and utilPot.

Referenced by marginalization().

Here is the caller graph for this function:

Member Data Documentation

◆ probPot

◆ utilPot


The documentation for this class was generated from the following file: