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

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

#include <decisionPotential.h>

Public Attributes

Potential< GUM_SCALAR > probPot
 
Potential< GUM_SCALAR > utilPot
 

Public Member Functions

 DecisionPotential ()
 
 ~DecisionPotential ()
 
 DecisionPotential (const Potential< GUM_SCALAR > &prob, const Potential< GUM_SCALAR > &util)
 
 DecisionPotential (const DecisionPotential< GUM_SCALAR > &dp)
 
void clear ()
 
DecisionPotential< GUM_SCALAR > & operator= (const DecisionPotential< GUM_SCALAR > &src)
 
 DecisionPotential (DecisionPotential< GUM_SCALAR > &&dp)
 
DecisionPotential< GUM_SCALAR > & operator= (DecisionPotential< GUM_SCALAR > &&src)
 
bool operator== (const DecisionPotential< GUM_SCALAR > &p) const
 
bool operator!= (const DecisionPotential< GUM_SCALAR > &p) const
 
const DiscreteVariablevariable (const std::string &name) const
 
void insertProba (const gum::Potential< GUM_SCALAR > &proba)
 
void insertUtility (const gum::Potential< GUM_SCALAR > &util)
 
DecisionPotential< GUM_SCALAR > operator* (const DecisionPotential< GUM_SCALAR > &dp1) const
 
DecisionPotential< GUM_SCALAR > operator*= (const DecisionPotential< GUM_SCALAR > &dp1)
 
DecisionPotential< GUM_SCALAR > operator^ (const Set< const DiscreteVariable * > &onto) const
 
DecisionPotential< 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 Potential< GUM_SCALAR > divideEvenZero (const Potential< GUM_SCALAR > &p1, const Potential< GUM_SCALAR > &p2)
 
static DecisionPotential< GUM_SCALAR > combination (const DecisionPotential< GUM_SCALAR > &dp1, const DecisionPotential< GUM_SCALAR > &dp2)
 
static DecisionPotential< GUM_SCALAR > marginalization (const DecisionPotential< GUM_SCALAR > &dp, const Set< const DiscreteVariable * > &onto)
 
static DecisionPotential< GUM_SCALAR > marginalization (const DecisionPotential< GUM_SCALAR > &dp, const std::vector< std::string > &ontonames)
 

Detailed Description

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

<agrum/ID/inference/decisionPotential.h>

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

Definition at line 44 of file decisionPotential.h.

Constructor & Destructor Documentation

◆ DecisionPotential() [1/4]

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

Definition at line 49 of file decisionPotential.h.

49  {
50  GUM_CONSTRUCTOR(DecisionPotential);
51  probPot.fillWith(GUM_SCALAR(1));
52  utilPot.fillWith(GUM_SCALAR(0));
53  }
Potential< GUM_SCALAR > probPot
Potential< GUM_SCALAR > utilPot

◆ ~DecisionPotential()

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

Definition at line 55 of file decisionPotential.h.

55  {
56  GUM_DESTRUCTOR(DecisionPotential);
57  ;
58  }

◆ DecisionPotential() [2/4]

template<typename GUM_SCALAR >
gum::DecisionPotential< GUM_SCALAR >::DecisionPotential ( const Potential< GUM_SCALAR > &  prob,
const Potential< GUM_SCALAR > &  util 
)
inline

Definition at line 60 of file decisionPotential.h.

References gum::DecisionPotential< GUM_SCALAR >::DecisionPotential().

Referenced by gum::DecisionPotential< GUM_SCALAR >::DecisionPotential().

60  :
61  probPot(prob), utilPot(util) {
62  GUM_CONSTRUCTOR(DecisionPotential);
63  }
Potential< GUM_SCALAR > probPot
Potential< GUM_SCALAR > utilPot
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DecisionPotential() [3/4]

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

Definition at line 65 of file decisionPotential.h.

References gum::DecisionPotential< GUM_SCALAR >::DecisionPotential().

Referenced by gum::DecisionPotential< GUM_SCALAR >::DecisionPotential().

65  :
66  probPot(dp.probPot), utilPot(dp.utilPot) {
67  GUM_CONS_CPY(DecisionPotential);
68  }
Potential< GUM_SCALAR > probPot
Potential< GUM_SCALAR > utilPot
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DecisionPotential() [4/4]

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

Definition at line 86 of file decisionPotential.h.

References gum::DecisionPotential< GUM_SCALAR >::DecisionPotential().

Referenced by gum::DecisionPotential< GUM_SCALAR >::DecisionPotential().

86  :
87  probPot(std::forward< Potential< GUM_SCALAR > >(dp.probPot)),
88  utilPot(std::forward< Potential< GUM_SCALAR > >(dp.utilPot)) {
89  GUM_CONS_MOV(DecisionPotential);
90  }
Potential< GUM_SCALAR > probPot
Potential< GUM_SCALAR > utilPot
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Function Documentation

◆ clear()

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

Definition at line 70 of file decisionPotential.h.

70  {
72  p.fillWith(GUM_SCALAR(1));
73  probPot = p;
74  p.fillWith(GUM_SCALAR(0));
75  utilPot = p;
76  }
aGrUM&#39;s Potential is a multi-dimensional array with tensor operators.
Definition: potential.h:59
Potential< GUM_SCALAR > probPot
Potential< GUM_SCALAR > utilPot
const Potential< GUM_SCALAR > & fillWith(const Potential< GUM_SCALAR > &src) const
copy a Potential data using name of variables and labels (not necessarily the same variables in the s...

◆ combination()

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

Definition at line 151 of file decisionPotential.h.

Referenced by gum::DecisionPotential< GUM_SCALAR >::operator*(), and gum::DecisionPotential< GUM_SCALAR >::operator*=().

152  {
153  return DecisionPotential< GUM_SCALAR >(dp1.probPot * dp2.probPot, dp1.utilPot + dp2.utilPot);
154  }
+ Here is the caller graph for this function:

◆ divideEvenZero()

template<typename GUM_SCALAR >
static Potential< GUM_SCALAR > gum::DecisionPotential< GUM_SCALAR >::divideEvenZero ( const Potential< GUM_SCALAR > &  p1,
const Potential< GUM_SCALAR > &  p2 
)
inlinestatic

Definition at line 141 of file decisionPotential.h.

142  {
143  Potential< GUM_SCALAR > res(p1);
144  Instantiation I(res);
145  for (I.setFirst(); !I.end(); I.inc()) {
146  if (res[I] != 0) res.set(I, res[I] / p2[I]);
147  }
148  return res;
149  }

◆ insertProba()

template<typename GUM_SCALAR >
void gum::DecisionPotential< GUM_SCALAR >::insertProba ( const gum::Potential< GUM_SCALAR > &  proba)
inline

Definition at line 119 of file decisionPotential.h.

119 { probPot *= proba; }
Potential< GUM_SCALAR > probPot

◆ insertUtility()

template<typename GUM_SCALAR >
void gum::DecisionPotential< GUM_SCALAR >::insertUtility ( const gum::Potential< GUM_SCALAR > &  util)
inline

Definition at line 121 of file decisionPotential.h.

121 { utilPot += util; }
Potential< GUM_SCALAR > utilPot

◆ marginalization() [1/2]

template<typename GUM_SCALAR >
static DecisionPotential< GUM_SCALAR > gum::DecisionPotential< GUM_SCALAR >::marginalization ( const DecisionPotential< GUM_SCALAR > &  dp,
const Set< const DiscreteVariable * > &  onto 
)
inlinestatic

Definition at line 157 of file decisionPotential.h.

158  {
159  const auto pr = dp.probPot.margSumIn(onto);
160  return DecisionPotential(pr, divideEvenZero((dp.probPot * dp.utilPot).margSumIn(onto), pr));
161  }
static Potential< GUM_SCALAR > divideEvenZero(const Potential< GUM_SCALAR > &p1, const Potential< GUM_SCALAR > &p2)

◆ marginalization() [2/2]

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

Definition at line 164 of file decisionPotential.h.

165  {
166  Set< const DiscreteVariable* > onto;
167  for (const auto& varname: ontonames) {
168  onto.insert(dp.variable(varname));
169  }
170  return marginalization(dp, onto);
171  }
static DecisionPotential< GUM_SCALAR > marginalization(const DecisionPotential< GUM_SCALAR > &dp, const Set< const DiscreteVariable * > &onto)

◆ meanVar()

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

Definition at line 173 of file decisionPotential.h.

173  {
174  auto tmp = probPot * utilPot;
175  GUM_SCALAR s = probPot.sum();
176  double m = tmp.sum() / s;
177  double m2 = (tmp * utilPot).sum() / s;
178  return std::pair< GUM_SCALAR, GUM_SCALAR >(m, m2 - m * m);
179  }
Potential< GUM_SCALAR > probPot
Potential< GUM_SCALAR > utilPot

◆ operator!=()

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

Definition at line 106 of file decisionPotential.h.

References gum::DecisionPotential< GUM_SCALAR >::operator==().

106 { return !operator==(p); }
bool operator==(const DecisionPotential< GUM_SCALAR > &p) const
+ Here is the call graph for this function:

◆ operator*()

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

Definition at line 123 of file decisionPotential.h.

References gum::DecisionPotential< GUM_SCALAR >::combination().

123  {
125  }
static DecisionPotential< GUM_SCALAR > combination(const DecisionPotential< GUM_SCALAR > &dp1, const DecisionPotential< GUM_SCALAR > &dp2)
+ Here is the call graph for this function:

◆ operator*=()

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

Definition at line 127 of file decisionPotential.h.

References gum::DecisionPotential< GUM_SCALAR >::combination().

127  {
129  return *this;
130  }
static DecisionPotential< GUM_SCALAR > combination(const DecisionPotential< GUM_SCALAR > &dp1, const DecisionPotential< GUM_SCALAR > &dp2)
+ Here is the call graph for this function:

◆ operator=() [1/2]

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

Definition at line 78 of file decisionPotential.h.

78  {
79  GUM_OP_CPY(DecisionPotential);
80  if (&src == this) return *this;
81  probPot = src.probPot;
82  utilPot = src.utilPot;
83  return *this;
84  }
Potential< GUM_SCALAR > probPot
Potential< GUM_SCALAR > utilPot

◆ operator=() [2/2]

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

Definition at line 92 of file decisionPotential.h.

92  {
93  GUM_OP_MOV(DecisionPotential);
94  if (&src == this) return *this;
95  probPot = std::forward< Potential< GUM_SCALAR > >(src.probPot);
96  utilPot = std::forward< Potential< GUM_SCALAR > >(src.utilPot);
97  return *this;
98  }
Potential< GUM_SCALAR > probPot
Potential< GUM_SCALAR > utilPot

◆ operator==()

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

Definition at line 100 of file decisionPotential.h.

Referenced by gum::DecisionPotential< GUM_SCALAR >::operator!=().

100  {
101  // @see Evaluating Influence Diagrams using LIMIDS (2000) - section 3.3
102  return ((p.probPot == this->probPot)
103  && (p.probPot * p.utilPot == this->probPot * this->utilPot));
104  }
+ Here is the caller graph for this function:

◆ operator^() [1/2]

template<typename GUM_SCALAR >
DecisionPotential< GUM_SCALAR > gum::DecisionPotential< GUM_SCALAR >::operator^ ( const Set< const DiscreteVariable * > &  onto) const
inline

Definition at line 132 of file decisionPotential.h.

132  {
134  }
static DecisionPotential< GUM_SCALAR > marginalization(const DecisionPotential< GUM_SCALAR > &dp, const Set< const DiscreteVariable * > &onto)

◆ operator^() [2/2]

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

Definition at line 136 of file decisionPotential.h.

136  {
137  return DecisionPotential< GUM_SCALAR >::marginalization(*this, ontonames);
138  }
static DecisionPotential< GUM_SCALAR > marginalization(const DecisionPotential< GUM_SCALAR > &dp, const Set< const DiscreteVariable * > &onto)

◆ toString()

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

Definition at line 181 of file decisionPotential.h.

181  {
182  return "prob : " + probPot.toString() + " util:" + utilPot.toString();
183  }
Potential< GUM_SCALAR > probPot
Potential< GUM_SCALAR > utilPot

◆ variable()

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

Definition at line 108 of file decisionPotential.h.

108  {
109  for (const auto& v: probPot.variablesSequence()) {
110  if (v->name() == name) return v;
111  }
112  for (const auto& v: utilPot.variablesSequence()) {
113  if (v->name() == name) return v;
114  }
115 
116  GUM_ERROR(NotFound, "'" << name << "' can not be found in DecisionPotential.")
117  }
Potential< GUM_SCALAR > probPot
Potential< GUM_SCALAR > utilPot
#define GUM_ERROR(type, msg)
Definition: exceptions.h:51

Member Data Documentation

◆ probPot

template<typename GUM_SCALAR >
Potential< GUM_SCALAR > gum::DecisionPotential< GUM_SCALAR >::probPot

Definition at line 46 of file decisionPotential.h.

◆ utilPot

template<typename GUM_SCALAR >
Potential< GUM_SCALAR > gum::DecisionPotential< GUM_SCALAR >::utilPot

Definition at line 47 of file decisionPotential.h.


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