Logo
pyAgrum 1.9.0 on Jupyter

Tutorials

  • ▶ Tutorial
    • ▷ Tutorial
    • ▷ Tutorial2
  • ▶ Examples
    • ▷ Asthma
    • ▷ Kaggle Titanic
    • ▷ Naive Credit Default Modeling
    • ▷ Causality And Learning
    • ▷ Sensitivity Analysis Using Credal Networks
    • ▷ Quasi Continuous
    • ▷ Parameters Learning With Pandas
    • ▷ Bayesian Beta Coin
  • ▶ Models
    • ▷ Influence Diagram
    • ▷ Dynamic Bn
    • ▷ Markov Random Field
    • ▷ Credal Networks
    • ▷ O3PRM
  • ▶ Learning
    • ▷ Structural Learning
    • ▷ Learning Classifier
    • ▷ Learning And Essential Graphs
    • ▷ Dirichlet Prior And Weigthed Database
    • ▷ Parametric Em
    • ▷ Chi2 And Scores From Bn Learner
  • ▶ Inference
    • ▷ Graphical Inference
    • ▷ Relevance Reasoning
    • ▷ Lazy Propagation Advanced Features
    • ▷ Approximate Inference
    • ▷ Sampling Inference
  • ▶ Classifier
    • ▷ Learning
    • ▷ Discretizer
    • ▷ Compare Classifiers With Sklearn
    • ▷ Cross Validation
    • ▷ Binary And Nary Classifier From Bn
  • ▶ Causality
    • ▷ Tobacco
    • ▷ Simpson Paradox
    • ▷ Multinomial Simpson Paradox
    • ▷ Do Calculus Examples
    • ▷ Counterfactual
  • ▶ Applications
    • ▷ Ipywidgets
  • ▶ Tools
    • ▷ Potentials
    • ▷ Aggregators
    • ▷ Explain
    • ▷ Kl For BNs
    • ▷ Comparing Bn
    • ▷ Colouring And Exporting BNs
    • ▷ Config For PyAgrum
pyAgrum

Influence diagram¶

| Creative Commons License | aGrUM | interactive online version

In [1]:
import os

%matplotlib inline
from pylab import *
import matplotlib.pyplot as plt
from IPython.display import display,HTML

import math
In [2]:
import pyAgrum as gum
import pyAgrum.lib.notebook as gnb

Build a Influence Diagram¶

fast build with string¶

In [3]:
gum.fastID("A->*B->$C<-D<-*E->*G->H->*I<-D")
Out[3]:
pyAgrum▶Models▷Influence DiagramG pyAgrum▶Models▷Influence DiagramA A pyAgrum▶Models▷Influence DiagramB B pyAgrum▶Models▷Influence DiagramA->B pyAgrum▶Models▷Influence DiagramD D pyAgrum▶Models▷Influence DiagramI I pyAgrum▶Models▷Influence DiagramD->I pyAgrum▶Models▷Influence DiagramC C pyAgrum▶Models▷Influence DiagramD->C pyAgrum▶Models▷Influence DiagramH H pyAgrum▶Models▷Influence DiagramH->I pyAgrum▶Models▷Influence DiagramB->C pyAgrum▶Models▷Influence DiagramE E pyAgrum▶Models▷Influence DiagramE->D pyAgrum▶Models▷Influence DiagramG G pyAgrum▶Models▷Influence DiagramE->G pyAgrum▶Models▷Influence DiagramG->H

bifxml format file¶

In [4]:
diag=gum.loadID("res/diag.bifxml")
gnb.showInfluenceDiagram(diag)
No description has been provided for this image
In [5]:
diag
Out[5]:
pyAgrum▶Models▷Influence DiagramG pyAgrum▶Models▷Influence DiagramchanceVar1 chanceVar1 pyAgrum▶Models▷Influence DiagramchanceVar2 chanceVar2 pyAgrum▶Models▷Influence DiagramchanceVar1->chanceVar2 pyAgrum▶Models▷Influence DiagramutilityVar1 utilityVar1 pyAgrum▶Models▷Influence DiagramchanceVar1->utilityVar1 pyAgrum▶Models▷Influence DiagramdecisionVar2 decisionVar2 pyAgrum▶Models▷Influence DiagramchanceVar2->decisionVar2 pyAgrum▶Models▷Influence DiagramdecisionVar3 decisionVar3 pyAgrum▶Models▷Influence DiagramchanceVar2->decisionVar3 pyAgrum▶Models▷Influence DiagramchanceVar3 chanceVar3 pyAgrum▶Models▷Influence DiagramchanceVar5 chanceVar5 pyAgrum▶Models▷Influence DiagramchanceVar3->chanceVar5 pyAgrum▶Models▷Influence DiagramchanceVar4 chanceVar4 pyAgrum▶Models▷Influence DiagramchanceVar4->chanceVar5 pyAgrum▶Models▷Influence DiagramutilityVar2 utilityVar2 pyAgrum▶Models▷Influence DiagramchanceVar5->utilityVar2 pyAgrum▶Models▷Influence DiagramdecisionVar1 decisionVar1 pyAgrum▶Models▷Influence DiagramdecisionVar1->chanceVar1 pyAgrum▶Models▷Influence DiagramdecisionVar2->chanceVar4 pyAgrum▶Models▷Influence DiagramdecisionVar2->utilityVar1 pyAgrum▶Models▷Influence DiagramdecisionVar3->chanceVar3 pyAgrum▶Models▷Influence DiagramdecisionVar4 decisionVar4 pyAgrum▶Models▷Influence DiagramdecisionVar4->utilityVar2

the hard way :-)¶

In [6]:
F=diag.addChanceNode(gum.LabelizedVariable("F","F",2))
diag.addArc(diag.idFromName("decisionVar1"),F)

U=diag.addUtilityNode(gum.LabelizedVariable("U","U",1))
diag.addArc(diag.idFromName("decisionVar3"),U)
diag.addArc(diag.idFromName("F"),U)
gnb.showInfluenceDiagram(diag)
No description has been provided for this image
In [7]:
diag.cpt(F)[{'decisionVar1':0}]=[0.9,0.1]
diag.cpt(F)[{'decisionVar1':1}]=[0.3,0.7]

diag.utility(U)[{'F':0,'decisionVar3':0}]=2
diag.utility(U)[{'F':0,'decisionVar3':1}]=4
diag.utility(U)[{'F':1}]=[[0],[5]]

Optimization in an influence diagram (actually LIMID)¶

In [8]:
oil=gum.loadID("res/OilWildcatter.bifxml")
gnb.flow.row(oil,gnb.getInference(oil))
pyAgrum▶Models▷Influence DiagramG pyAgrum▶Models▷Influence DiagramTestResult TestResult pyAgrum▶Models▷Influence DiagramDrilling Drilling pyAgrum▶Models▷Influence DiagramTestResult->Drilling pyAgrum▶Models▷Influence DiagramOilContents OilContents pyAgrum▶Models▷Influence DiagramOilContents->TestResult pyAgrum▶Models▷Influence DiagramReward Reward pyAgrum▶Models▷Influence DiagramOilContents->Reward pyAgrum▶Models▷Influence DiagramTesting Testing pyAgrum▶Models▷Influence DiagramTesting->TestResult pyAgrum▶Models▷Influence DiagramTesting->Drilling pyAgrum▶Models▷Influence DiagramCost Cost pyAgrum▶Models▷Influence DiagramTesting->Cost pyAgrum▶Models▷Influence DiagramDrilling->Reward
pyAgrum▶Models▷Influence Diagramstructs MEU 22.50 (stdev=87.46) Inference in   0.79ms pyAgrum▶Models▷Influence DiagramTesting 2023-07-25T09:21:31.264777 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramDrilling 2023-07-25T09:21:31.308136 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->Drilling pyAgrum▶Models▷Influence DiagramTestResult 2023-07-25T09:21:31.356145 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->TestResult pyAgrum▶Models▷Influence DiagramCost Cost : -10.00 (0.00) pyAgrum▶Models▷Influence DiagramTesting->Cost pyAgrum▶Models▷Influence DiagramReward Reward : 32.50 (87.46) pyAgrum▶Models▷Influence DiagramDrilling->Reward pyAgrum▶Models▷Influence DiagramTestResult->Drilling pyAgrum▶Models▷Influence DiagramOilContents 2023-07-25T09:21:31.404001 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramOilContents->TestResult pyAgrum▶Models▷Influence DiagramOilContents->Reward
In [9]:
# a function to show results on decision nodes T and D
def show_decisions(ie):
    gnb.flow.row(ie.optimalDecision("Testing"),
                   ie.optimalDecision("Drilling"),
                   f"$${ie.MEU()['mean']:5.3f}\\ (stdev : {math.sqrt(ie.MEU()['variance']):5.3f})$$",
                   captions=["Strategy for T",
                             "Strategy for D",
                             "MEU and its standard deviation"])
    gnb.flow.row(ie.posterior("Testing"),ie.posteriorUtility("Testing"),
                   ie.posterior("Drilling"),ie.posteriorUtility("Drilling"),
                  captions=["Final decision for Testing","Final reward for Testing",
                            "Final decision for Drilling","Final reward for Drilling"])

ie=gum.ShaferShenoyLIMIDInference(oil) 

display(HTML("<h2>Inference in the LIMID optimizing the decisions nodes</h2>"))
ie.makeInference()
show_decisions(ie)

Inference in the LIMID optimizing the decisions nodes

Testing
Yes
No
1.00000.0000

Strategy for T
Drilling
TestResult
Yes
No
closed
1.00000.0000
open
1.00000.0000
diffuse
0.00001.0000

Strategy for D
$$22.500\ (stdev : 87.457)$$
MEU and its standard deviation
Testing
Yes
No
1.00000.0000

Final decision for Testing
Testing
Yes
No
22.500020.0000

Final reward for Testing
Drilling
Yes
No
0.59000.4100

Final decision for Drilling
Drilling
Yes
No
45.0847-10.0000

Final reward for Drilling

Graphical inference with evidence and targets (developped nodes)¶

In [10]:
gnb.sideBySide(oil,
               gnb.getInference(oil,evs={'TestResult':'closed'}),
               gnb.getInference(oil,evs={'TestResult':'open'}),
               gnb.getInference(oil,evs={'TestResult':'diffuse'}),
               oil,
               gnb.getInference(oil,evs={'OilContents':'Dry'}),
               gnb.getInference(oil,evs={'OilContents':'Wet'}),
               gnb.getInference(oil,evs={'OilContents':'Soaking'}),
               ncols=4)
pyAgrum▶Models▷Influence DiagramG pyAgrum▶Models▷Influence DiagramTestResult TestResult pyAgrum▶Models▷Influence DiagramDrilling Drilling pyAgrum▶Models▷Influence DiagramTestResult->Drilling pyAgrum▶Models▷Influence DiagramOilContents OilContents pyAgrum▶Models▷Influence DiagramOilContents->TestResult pyAgrum▶Models▷Influence DiagramReward Reward pyAgrum▶Models▷Influence DiagramOilContents->Reward pyAgrum▶Models▷Influence DiagramTesting Testing pyAgrum▶Models▷Influence DiagramTesting->TestResult pyAgrum▶Models▷Influence DiagramTesting->Drilling pyAgrum▶Models▷Influence DiagramCost Cost pyAgrum▶Models▷Influence DiagramTesting->Cost pyAgrum▶Models▷Influence DiagramDrilling->Reward
pyAgrum▶Models▷Influence Diagramstructs MEU 77.50 (stdev=104.73) Inference in   1.26ms pyAgrum▶Models▷Influence DiagramTesting 2023-07-25T09:21:31.778586 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramDrilling 2023-07-25T09:21:31.822791 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->Drilling pyAgrum▶Models▷Influence DiagramTestResult 2023-07-25T09:21:31.866736 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->TestResult pyAgrum▶Models▷Influence DiagramCost Cost : -10.00 (0.00) pyAgrum▶Models▷Influence DiagramTesting->Cost pyAgrum▶Models▷Influence DiagramReward Reward : 87.50 (104.73) pyAgrum▶Models▷Influence DiagramDrilling->Reward pyAgrum▶Models▷Influence DiagramTestResult->Drilling pyAgrum▶Models▷Influence DiagramOilContents 2023-07-25T09:21:31.914829 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramOilContents->TestResult pyAgrum▶Models▷Influence DiagramOilContents->Reward
pyAgrum▶Models▷Influence Diagramstructs MEU 22.86 (stdev=104.98) Inference in   0.45ms pyAgrum▶Models▷Influence DiagramTesting 2023-07-25T09:21:32.087308 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramDrilling 2023-07-25T09:21:32.130186 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->Drilling pyAgrum▶Models▷Influence DiagramTestResult 2023-07-25T09:21:32.179363 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->TestResult pyAgrum▶Models▷Influence DiagramCost Cost : -10.00 (0.00) pyAgrum▶Models▷Influence DiagramTesting->Cost pyAgrum▶Models▷Influence DiagramReward Reward : 32.86 (104.98) pyAgrum▶Models▷Influence DiagramDrilling->Reward pyAgrum▶Models▷Influence DiagramTestResult->Drilling pyAgrum▶Models▷Influence DiagramOilContents 2023-07-25T09:21:32.229891 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramOilContents->TestResult pyAgrum▶Models▷Influence DiagramOilContents->Reward
pyAgrum▶Models▷Influence Diagramstructs MEU 20.00 (stdev=103.92) Inference in   0.41ms pyAgrum▶Models▷Influence DiagramTesting 2023-07-25T09:21:32.490015 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramDrilling 2023-07-25T09:21:32.532973 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->Drilling pyAgrum▶Models▷Influence DiagramTestResult 2023-07-25T09:21:32.578492 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->TestResult pyAgrum▶Models▷Influence DiagramCost Cost : 0.00 (0.00) pyAgrum▶Models▷Influence DiagramTesting->Cost pyAgrum▶Models▷Influence DiagramReward Reward : 20.00 (103.92) pyAgrum▶Models▷Influence DiagramDrilling->Reward pyAgrum▶Models▷Influence DiagramTestResult->Drilling pyAgrum▶Models▷Influence DiagramOilContents 2023-07-25T09:21:32.628646 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramOilContents->TestResult pyAgrum▶Models▷Influence DiagramOilContents->Reward
pyAgrum▶Models▷Influence DiagramG pyAgrum▶Models▷Influence DiagramTestResult TestResult pyAgrum▶Models▷Influence DiagramDrilling Drilling pyAgrum▶Models▷Influence DiagramTestResult->Drilling pyAgrum▶Models▷Influence DiagramOilContents OilContents pyAgrum▶Models▷Influence DiagramOilContents->TestResult pyAgrum▶Models▷Influence DiagramReward Reward pyAgrum▶Models▷Influence DiagramOilContents->Reward pyAgrum▶Models▷Influence DiagramTesting Testing pyAgrum▶Models▷Influence DiagramTesting->TestResult pyAgrum▶Models▷Influence DiagramTesting->Drilling pyAgrum▶Models▷Influence DiagramCost Cost pyAgrum▶Models▷Influence DiagramTesting->Cost pyAgrum▶Models▷Influence DiagramDrilling->Reward
pyAgrum▶Models▷Influence Diagramstructs MEU 0.00 (stdev=0.00) Inference in   0.45ms pyAgrum▶Models▷Influence DiagramTesting 2023-07-25T09:21:32.791744 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramDrilling 2023-07-25T09:21:32.900926 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->Drilling pyAgrum▶Models▷Influence DiagramTestResult 2023-07-25T09:21:32.946922 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->TestResult pyAgrum▶Models▷Influence DiagramCost Cost : 0.00 (0.00) pyAgrum▶Models▷Influence DiagramTesting->Cost pyAgrum▶Models▷Influence DiagramReward Reward : 0.00 (0.00) pyAgrum▶Models▷Influence DiagramDrilling->Reward pyAgrum▶Models▷Influence DiagramTestResult->Drilling pyAgrum▶Models▷Influence DiagramOilContents 2023-07-25T09:21:32.993931 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramOilContents->TestResult pyAgrum▶Models▷Influence DiagramOilContents->Reward
pyAgrum▶Models▷Influence Diagramstructs MEU 50.00 (stdev=0.00) Inference in   0.45ms pyAgrum▶Models▷Influence DiagramTesting 2023-07-25T09:21:33.167904 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramDrilling 2023-07-25T09:21:33.210199 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->Drilling pyAgrum▶Models▷Influence DiagramTestResult 2023-07-25T09:21:33.256816 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->TestResult pyAgrum▶Models▷Influence DiagramCost Cost : 0.00 (0.00) pyAgrum▶Models▷Influence DiagramTesting->Cost pyAgrum▶Models▷Influence DiagramReward Reward : 50.00 (0.00) pyAgrum▶Models▷Influence DiagramDrilling->Reward pyAgrum▶Models▷Influence DiagramTestResult->Drilling pyAgrum▶Models▷Influence DiagramOilContents 2023-07-25T09:21:33.303216 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramOilContents->TestResult pyAgrum▶Models▷Influence DiagramOilContents->Reward
pyAgrum▶Models▷Influence Diagramstructs MEU 200.00 (stdev=0.00) Inference in   0.40ms pyAgrum▶Models▷Influence DiagramTesting 2023-07-25T09:21:33.477301 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramDrilling 2023-07-25T09:21:33.519468 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->Drilling pyAgrum▶Models▷Influence DiagramTestResult 2023-07-25T09:21:33.565734 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramTesting->TestResult pyAgrum▶Models▷Influence DiagramCost Cost : 0.00 (0.00) pyAgrum▶Models▷Influence DiagramTesting->Cost pyAgrum▶Models▷Influence DiagramReward Reward : 200.00 (0.00) pyAgrum▶Models▷Influence DiagramDrilling->Reward pyAgrum▶Models▷Influence DiagramTestResult->Drilling pyAgrum▶Models▷Influence DiagramOilContents 2023-07-25T09:21:33.690338 image/svg+xml Matplotlib v3.7.2, https://matplotlib.org/ pyAgrum▶Models▷Influence DiagramOilContents->TestResult pyAgrum▶Models▷Influence DiagramOilContents->Reward

Soft evidence on chance node¶

In [11]:
gnb.showInference(oil,evs={'OilContents':[0.7,0.5,0.8]})
No description has been provided for this image

Forced decision¶

In [12]:
gnb.showInference(oil,evs={'Drilling':'Yes'})