aGrUM 3.1.1
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
const DiscreteVariablevariable (std::string_view 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<GUM_Numeric 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 63 of file decisionTensor.h.

Constructor & Destructor Documentation

◆ DecisionTensor() [1/4]

template<GUM_Numeric GUM_SCALAR>
gum::DecisionTensor< GUM_SCALAR >::DecisionTensor ( )
explicit

Definition at line 48 of file decisionTensor_tpl.h.

48 {
50 probPot.fillWith(GUM_SCALAR(1));
51 utilPot.fillWith(GUM_SCALAR(0));
52 }
<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=(), and operator==().

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

◆ ~DecisionTensor()

template<GUM_Numeric GUM_SCALAR>
gum::DecisionTensor< GUM_SCALAR >::~DecisionTensor ( )

Definition at line 55 of file decisionTensor_tpl.h.

References DecisionTensor().

Here is the call graph for this function:

◆ DecisionTensor() [2/4]

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

Definition at line 60 of file decisionTensor_tpl.h.

References DecisionTensor(), probPot, and utilPot.

Here is the call graph for this function:

◆ DecisionTensor() [3/4]

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

Definition at line 67 of file decisionTensor_tpl.h.

References DecisionTensor(), probPot, and utilPot.

Here is the call graph for this function:

◆ DecisionTensor() [4/4]

template<GUM_Numeric GUM_SCALAR>
gum::DecisionTensor< GUM_SCALAR >::DecisionTensor ( DecisionTensor< GUM_SCALAR > && dp)

Definition at line 73 of file decisionTensor_tpl.h.

References DecisionTensor(), probPot, and utilPot.

Here is the call graph for this function:

Member Function Documentation

◆ clear()

template<GUM_Numeric GUM_SCALAR>
void gum::DecisionTensor< GUM_SCALAR >::clear ( )

Definition at line 80 of file decisionTensor_tpl.h.

80 {
82 p.fillWith(GUM_SCALAR(1));
83 probPot = p;
84 p.fillWith(GUM_SCALAR(0));
85 utilPot = p;
86 }

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

Here is the call graph for this function:

◆ combination()

template<GUM_Numeric GUM_SCALAR>
DecisionTensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::combination ( const DecisionTensor< GUM_SCALAR > & dp1,
const DecisionTensor< GUM_SCALAR > & dp2 )
static

Definition at line 176 of file decisionTensor_tpl.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<GUM_Numeric GUM_SCALAR>
Tensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::divideEvenZero ( const Tensor< GUM_SCALAR > & p1,
const Tensor< GUM_SCALAR > & p2 )
static

Definition at line 164 of file decisionTensor_tpl.h.

165 {
168 for (I.setFirst(); !I.end(); I.inc()) {
169 if (p2[I] != 0) res.set(I, res[I] / p2[I]);
170 }
171 return res;
172 }

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<GUM_Numeric GUM_SCALAR>
void gum::DecisionTensor< GUM_SCALAR >::insertProba ( const gum::Tensor< GUM_SCALAR > & proba)

Definition at line 128 of file decisionTensor_tpl.h.

128 {
129 probPot *= proba;
130 }

References probPot.

◆ insertUtility()

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

Definition at line 133 of file decisionTensor_tpl.h.

133 {
134 utilPot += util;
135 }

References utilPot.

◆ marginalization() [1/2]

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

Definition at line 183 of file decisionTensor_tpl.h.

184 {
185 const auto pr = dp.probPot.sumIn(onto);
186 return DecisionTensor(pr, divideEvenZero((dp.probPot * dp.utilPot).sumIn(onto), pr));
187 }
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<GUM_Numeric GUM_SCALAR>
DecisionTensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::marginalization ( const DecisionTensor< GUM_SCALAR > & dp,
const std::vector< std::string > & ontonames )
static

Definition at line 191 of file decisionTensor_tpl.h.

192 {
194 for (const auto& varname: ontonames) {
195 onto.insert(dp.variable(varname));
196 }
197 return marginalization(dp, onto);
198 }
static DecisionTensor< GUM_SCALAR > marginalization(const DecisionTensor< GUM_SCALAR > &dp, const gum::VariableSet &onto)
const DiscreteVariable * variable(std::string_view name) const

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

Here is the call graph for this function:

◆ meanVar()

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

Definition at line 201 of file decisionTensor_tpl.h.

201 {
202 const auto tmp = probPot * utilPot;
203 const GUM_SCALAR s = probPot.sum();
204 const double m = tmp.sum() / s;
205 const double m2 = (tmp * utilPot).sum() / s;
206 double var = m2 - m * m;
207 if (var < 0.0) var = 0.0; // var is a small number<0 due to computation errors
209 }

References probPot, and utilPot.

◆ operator*()

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

Definition at line 139 of file decisionTensor_tpl.h.

139 {
141 }
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<GUM_Numeric GUM_SCALAR>
DecisionTensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::operator*= ( const DecisionTensor< GUM_SCALAR > & dp1)

Definition at line 145 of file decisionTensor_tpl.h.

145 {
147 return *this;
148 }

References DecisionTensor(), and combination().

Here is the call graph for this function:

◆ operator=() [1/2]

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

Definition at line 90 of file decisionTensor_tpl.h.

90 {
92 if (&src == this) return *this;
95 return *this;
96 }

References DecisionTensor(), probPot, and utilPot.

Here is the call graph for this function:

◆ operator=() [2/2]

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

Definition at line 100 of file decisionTensor_tpl.h.

100 {
102 if (&src == this) return *this;
105 return *this;
106 }

References DecisionTensor(), probPot, and utilPot.

Here is the call graph for this function:

◆ operator==()

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

Definition at line 109 of file decisionTensor_tpl.h.

109 {
110 // @see Evaluating Influence Diagrams using LIMIDS (2000) - section 3.3
111 return ((p.probPot == this->probPot)
112 && (p.probPot * p.utilPot == this->probPot * this->utilPot));
113 }

References DecisionTensor(), probPot, and utilPot.

Here is the call graph for this function:

◆ operator^() [1/2]

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

Definition at line 152 of file decisionTensor_tpl.h.

152 {
154 }

References marginalization().

Here is the call graph for this function:

◆ operator^() [2/2]

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

Definition at line 158 of file decisionTensor_tpl.h.

References marginalization().

Here is the call graph for this function:

◆ toString()

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

Definition at line 212 of file decisionTensor_tpl.h.

212 {
213 return "prob : " + probPot.toString() + " util:" + utilPot.toString();
214 }

References probPot, and utilPot.

Referenced by gum::operator<<().

Here is the caller graph for this function:

◆ variable()

template<GUM_Numeric GUM_SCALAR>
const DiscreteVariable * gum::DecisionTensor< GUM_SCALAR >::variable ( std::string_view name) const

Definition at line 116 of file decisionTensor_tpl.h.

116 {
117 for (const auto& v: probPot.variablesSequence()) {
118 if (v->name() == name) return v;
119 }
120 for (const auto& v: utilPot.variablesSequence()) {
121 if (v->name() == name) return v;
122 }
123
124 GUM_ERROR(NotFound, "'" << name << "' can not be found in DecisionTensor.")
125 }
#define GUM_ERROR(type, msg)
Definition exceptions.h:76

References GUM_ERROR, probPot, and utilPot.

Referenced by marginalization().

Here is the caller graph for this function:

Member Data Documentation

◆ probPot

template<GUM_Numeric GUM_SCALAR>
Tensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::probPot

◆ utilPot

template<GUM_Numeric GUM_SCALAR>
Tensor< GUM_SCALAR > gum::DecisionTensor< GUM_SCALAR >::utilPot

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