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);
}
// 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());
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));
+ }
}