From 9500f210dd6554c33cc11f8a63ae5c0cd77a5298 Mon Sep 17 00:00:00 2001 From: Michele Silva Date: Wed, 7 Dec 2011 09:09:35 -0200 Subject: [PATCH] Added probability table examples. --- .../ufcspa/simdecs/diagram/bn/BayesianNetwork.java | 46 +++++++++++++++++-- 1 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/java/org/ufcspa/simdecs/diagram/bn/BayesianNetwork.java b/src/java/org/ufcspa/simdecs/diagram/bn/BayesianNetwork.java index 0f68bff..c457e33 100644 --- a/src/java/org/ufcspa/simdecs/diagram/bn/BayesianNetwork.java +++ b/src/java/org/ufcspa/simdecs/diagram/bn/BayesianNetwork.java @@ -10,14 +10,18 @@ import java.util.Vector; import unbbayes.io.xmlbif.version6.*; import unbbayes.prs.Node; +import unbbayes.prs.bn.JunctionTreeAlgorithm; import unbbayes.prs.bn.ProbabilisticNetwork; +import unbbayes.prs.bn.ProbabilisticNode; + import unbbayes.simdecs.PerguntaNodo; + /** * * @author mchelem */ public class BayesianNetwork { - + public static ProbabilisticNetwork loadNetwork(String filename) throws Exception { ProbabilisticNetwork bayesianNetwork = new ProbabilisticNetwork(null); XMLBIFIO.loadXML(new File(filename),bayesianNetwork); @@ -39,12 +43,16 @@ public class BayesianNetwork { } // Get node by name and its children - Node facialPainNode = bn.getNode("facial_pain"); + // To work with probabilistic table, node must be a Probabilistic node + ProbabilisticNode facialPainNode = (ProbabilisticNode)bn.getNode("facial_pain"); System.out.println("\nNode: " + facialPainNode.getName()); - // Atenção: campos adicionados aos nodos usando unbbayes. - // No projeto será utilizado o armazenado pelo banco de dados. - // Foi incluído aqui apenas para uso temporário. + for (int i = 0; i < facialPainNode.getStatesSize(); i++) { + System.out.println(facialPainNode.getStateAt(i)+":"+facialPainNode.getMarginalAt(i)); + } + + // Fields custo, tempo and pergunta moved to database. + // Included here for testing. System.out.println("Custo: " + facialPainNode.getCustoEtapa()); System.out.println("Tempo: " + facialPainNode.getTempoEtapa()); @@ -60,6 +68,34 @@ public class BayesianNetwork { for (Node node: childrenNodes){ System.out.println("-> " + node.getName()); } + + // Updating nodes + // Before updating probabilities, it is required to run the network + System.out.println("Running Bayesian network:"); + + JunctionTreeAlgorithm jt = new JunctionTreeAlgorithm(); + jt.setNet(bn); + jt.run(); + + ProbabilisticNode holocranialPainNode = (ProbabilisticNode) bn.getNode("holocranial_pain"); + System.out.println("\nNode: " + holocranialPainNode.getName()); + + System.out.println("Before updating probability table:"); + for (int i = 0; i < holocranialPainNode.getStatesSize(); i++) { + System.out.println(holocranialPainNode.getStateAt(i)+":"+holocranialPainNode.getMarginalAt(i)); + } + + float likelihood[] = new float[holocranialPainNode.getStatesSize()]; + likelihood[0] = 1.0f; + likelihood[1] = 0.0f; + holocranialPainNode.addLikeliHood(likelihood); + + bn.updateEvidences(); + + System.out.println("After updating probability table:"); + for (int i = 0; i < holocranialPainNode.getStatesSize(); i++) { + System.out.println(holocranialPainNode.getStateAt(i)+":"+holocranialPainNode.getMarginalAt(i)); + } } -- 1.7.6.4