예제 #1
0
  def testBugInferenceWithEvidenceWithSemiFastSyntax(self):
    tst_id = gum.InfluenceDiagram()
    tst_id.addVariables(["c1","c","$u","*d"])
    tst_id.addArcs([("c","c1"),
                    ("c","u"),
                    ("d","u")])

    tst_id.cpt("c").fillWith([0.5, 0.5])

    tst_id.cpt("c1")[{'c': 0}] = [1, 0]
    tst_id.cpt("c1")[{'c': 1}] = [0, 1]

    tst_id.utility("u")[{'c': 0, 'd': 0}] = [10]
    tst_id.utility("u")[{'c': 0, 'd': 1}] = [21]
    tst_id.utility("u")[{'c': 1, 'd': 0}] = [100]
    tst_id.utility("u")[{'c': 1, 'd': 1}] = [200]

    ie = gum.ShaferShenoyLIMIDInference(tst_id)
    ie.setEvidence({'c': 0})
    ie.makeInference()
    self.assertEqual(ie.optimalDecision("d"), gum.Potential().add(tst_id.variableFromName("d")).fillWith([0, 1]))
    self.assertEqual(ie.MEU()['mean'], 21)

    ie = gum.ShaferShenoyLIMIDInference(tst_id)
    ie.setEvidence({'c': 1})
    ie.makeInference()
    self.assertEqual(ie.optimalDecision("d"), gum.Potential().add(tst_id.variableFromName("d")).fillWith([0, 1]))
    self.assertEqual(ie.MEU()['mean'], 200)
예제 #2
0
  def testCopyInfluenceDiagram(self):
    newone = gum.InfluenceDiagram(self.diag)

    self.assertEqual(newone.chanceNodeSize(), 5)
    self.assertEqual(newone.decisionNodeSize(), 4)
    self.assertEqual(newone.utilityNodeSize(), 2)

    for t, h in self.diag.arcs():
      self.assertTrue(newone.dag().existsArc(t, h))

    for i in self.diag.nodes():
      self.assertEqual(self.diag.variable(i).__str__(), newone.variable(i).__str__())
예제 #3
0
  def setUp(self):
    self.D1 = gum.LabelizedVariable("D1", "Décision 1", 2)
    self.D2 = gum.LabelizedVariable("D2", "Décision 2", 2)
    self.D3 = gum.LabelizedVariable("D3", "Décision 3", 2)
    self.D4 = gum.LabelizedVariable("D4", "Décision 4", 2)

    self.C1 = gum.LabelizedVariable("C1", "Chance 1", 2)
    self.C2 = gum.LabelizedVariable("C2", "Chance 2", 2)
    self.C3 = gum.LabelizedVariable("C3", "Chance 3", 2)
    self.C4 = gum.LabelizedVariable("C4", "Chance 4", 2)
    self.C5 = gum.LabelizedVariable("C5", "Chance 5", 2)

    self.U1 = gum.LabelizedVariable("U1", "Utility 1", 1)
    self.U2 = gum.LabelizedVariable("U2", "Utility 2", 1)

    self.diag = gum.InfluenceDiagram()

    self.diag.addChanceNode(self.C1)
    self.diag.addChanceNode(self.C2)
    self.diag.addChanceNode(self.C3)
    self.diag.addChanceNode(self.C4)
    self.diag.addChanceNode(self.C5)

    self.diag.addDecisionNode(self.D1)
    self.diag.addDecisionNode(self.D2)
    self.diag.addDecisionNode(self.D3)
    self.diag.addDecisionNode(self.D4)

    self.diag.addUtilityNode(self.U1)
    self.diag.addUtilityNode(self.U2)

    self.diag.addArc("D1", "C1")
    self.diag.addArc("C1", "C2")
    self.diag.addArc("C1", "U1")
    self.diag.addArc("C2", "D2")
    self.diag.addArc("C2", "D3")
    self.diag.addArc("D3", "C3")
    self.diag.addArc("D2", "C4")
    self.diag.addArc("C3", "C5")
    self.diag.addArc("C4", "C5")
    self.diag.addArc("C5", "U2")
    self.diag.addArc("D4", "U2")
#------------------------------------------------------------------------------------------------------------------
#   Bayesian network for the burglary alarm problem.
#------------------------------------------------------------------------------------------------------------------

import pyAgrum as gum

# Initialize model
model = gum.InfluenceDiagram()

cow1_var = gum.LabelizedVariable('C1', 'C1', 2)
cow1_var.changeLabel(0, 'S')
cow1_var.changeLabel(1, 'H')

cow2_var = gum.LabelizedVariable('C2', 'C2', 2)
cow2_var.changeLabel(0, 'S')
cow2_var.changeLabel(1, 'H')

cow3_var = gum.LabelizedVariable('C3', 'C3', 2)
cow3_var.changeLabel(0, 'S')
cow3_var.changeLabel(1, 'H')

cow4_var = gum.LabelizedVariable('C4', 'C4', 2)
cow4_var.changeLabel(0, 'S')
cow4_var.changeLabel(1, 'H')

cow5_var = gum.LabelizedVariable('C5', 'C5', 2)
cow5_var.changeLabel(0, 'S')
cow5_var.changeLabel(1, 'H')

cow6_var = gum.LabelizedVariable('C6', 'C6', 2)
cow6_var.changeLabel(0, 'S')