Added postgres persistence unit.
[simdecs.git] / src / java / org / ufcspa / simdecs / diagram / bn / BayesianNetwork.java
CommitLineData
be675984
MS
1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5package org.ufcspa.simdecs.diagram.bn;
6
7import java.io.File;
8import java.util.ArrayList;
9import java.util.Vector;
10
11import unbbayes.io.xmlbif.version6.*;
12import unbbayes.prs.Node;
9500f210 13import unbbayes.prs.bn.JunctionTreeAlgorithm;
be675984 14import unbbayes.prs.bn.ProbabilisticNetwork;
9500f210
MS
15import unbbayes.prs.bn.ProbabilisticNode;
16
be675984 17import unbbayes.simdecs.PerguntaNodo;
9500f210 18
be675984
MS
19/**
20 *
21 * @author mchelem
22 */
23public class BayesianNetwork {
9500f210 24
be675984
MS
25 public static ProbabilisticNetwork loadNetwork(String filename) throws Exception {
26 ProbabilisticNetwork bayesianNetwork = new ProbabilisticNetwork(null);
27 XMLBIFIO.loadXML(new File(filename),bayesianNetwork);
28 return bayesianNetwork;
29 }
30
31 /* Testing */
32 public static void main(String[] args) throws Exception {
33 ProbabilisticNetwork bn = BayesianNetwork.loadNetwork("samples/headache.xml");
34
35 // Get bayesian network name
36 System.out.println("Network name: "+ bn.getName());
37
38 // Get all the nodes
39 System.out.println("All nodes: ");
40 ArrayList<Node> nodes = bn.getNodes();
41 for (Node node: nodes){
42 System.out.println("-> " + node.getName());
43 }
44
45 // Get node by name and its children
9500f210
MS
46 // To work with probabilistic table, node must be a Probabilistic node
47 ProbabilisticNode facialPainNode = (ProbabilisticNode)bn.getNode("facial_pain");
be675984
MS
48 System.out.println("\nNode: " + facialPainNode.getName());
49
9500f210
MS
50 for (int i = 0; i < facialPainNode.getStatesSize(); i++) {
51 System.out.println(facialPainNode.getStateAt(i)+":"+facialPainNode.getMarginalAt(i));
52 }
53
54 // Fields custo, tempo and pergunta moved to database.
55 // Included here for testing.
be675984
MS
56 System.out.println("Custo: " + facialPainNode.getCustoEtapa());
57 System.out.println("Tempo: " + facialPainNode.getTempoEtapa());
0016f784 58
be675984
MS
59 Vector<PerguntaNodo> perguntas = facialPainNode.getPerguntas();
60 for (PerguntaNodo pergunta: perguntas) {
61 // Setting questions because it is not set in the saved net
62 pergunta.setPergunta("Minha pergunta?");
63 System.out.println("Pergunta: " + pergunta.getPergunta());
64 }
65
66 ArrayList<Node> childrenNodes = facialPainNode.getChildren();
67 System.out.println("Children:");
68 for (Node node: childrenNodes){
69 System.out.println("-> " + node.getName());
70 }
9500f210
MS
71
72 // Updating nodes
73 // Before updating probabilities, it is required to run the network
74 System.out.println("Running Bayesian network:");
75
76 JunctionTreeAlgorithm jt = new JunctionTreeAlgorithm();
77 jt.setNet(bn);
78 jt.run();
79
80 ProbabilisticNode holocranialPainNode = (ProbabilisticNode) bn.getNode("holocranial_pain");
81 System.out.println("\nNode: " + holocranialPainNode.getName());
82
83 System.out.println("Before updating probability table:");
84 for (int i = 0; i < holocranialPainNode.getStatesSize(); i++) {
85 System.out.println(holocranialPainNode.getStateAt(i)+":"+holocranialPainNode.getMarginalAt(i));
86 }
87
88 float likelihood[] = new float[holocranialPainNode.getStatesSize()];
89 likelihood[0] = 1.0f;
90 likelihood[1] = 0.0f;
91 holocranialPainNode.addLikeliHood(likelihood);
92
93 bn.updateEvidences();
94
95 System.out.println("After updating probability table:");
96 for (int i = 0; i < holocranialPainNode.getStatesSize(); i++) {
97 System.out.println(holocranialPainNode.getStateAt(i)+":"+holocranialPainNode.getMarginalAt(i));
98 }
be675984
MS
99 }
100
101
102}
103