Added probability table examples.
authorMichele Silva <michele.silva@gmail.com>
Wed, 7 Dec 2011 11:09:35 +0000 (09:09 -0200)
committerMichele Silva <michele.silva@gmail.com>
Wed, 7 Dec 2011 11:09:35 +0000 (09:09 -0200)
src/java/org/ufcspa/simdecs/diagram/bn/BayesianNetwork.java

index 0f68bff..c457e33 100644 (file)
@@ -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));
+        }
     }