X-Git-Url: http://200.18.67.61/gitweb/?a=blobdiff_plain;f=src%2Fjava%2Forg%2Fufcspa%2Fsimdecs%2Fdiagram%2Fbn%2FBayesianNetwork.java;h=c457e331c6b09954689c9c04b01c6b791694a5d4;hb=536d177f86211b0a79fc818851b4334ac8fd7f22;hp=0f68bffd2b8f65c166a43335551037d107bf15e9;hpb=0016f784fffe29c49cab953103877c8bd00fe1ae;p=simdecs.git 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)); + } }