2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
5 package org.ufcspa.simdecs.util;
8 import java.util.ArrayList;
9 import java.util.Collections;
10 import java.util.Comparator;
11 import java.util.List;
12 import javax.persistence.EntityManager;
13 import org.ufcspa.simdecs.entities.Nodo;
14 import org.ufcspa.simdecs.entities.Rede;
15 import unbbayes.io.xmlbif.version6.XMLBIFIO;
16 import unbbayes.prs.Node;
17 import unbbayes.prs.bn.JunctionTreeAlgorithm;
18 import unbbayes.prs.bn.ProbabilisticNetwork;
19 import unbbayes.prs.bn.ProbabilisticNode;
25 public class UnBUtil {
28 private static UnBUtil unBUtil;
29 private ProbabilisticNetwork rede;
31 private UnBUtil(Rede redeEntity) {
35 public final void abreRede(Rede redeEntity) {
37 // required to run unbbayes gui classes on server
38 System.setProperty("java.awt.headless", "false");
39 System.out.println("REDE: " + redeEntity.getArquivo());
40 rede = new ProbabilisticNetwork(null);
41 XMLBIFIO.loadXML(new File(redeEntity.getArquivo()), rede);
43 } catch (Exception e) {
51 public static UnBUtil getInstance(Rede redeEntity) {
53 unBUtil = new UnBUtil(redeEntity);
58 public ProbabilisticNode getNodeByName(String name) {
59 for(Node node : rede.getNodes()) {
60 if (node.getName().equals(name))
61 return (ProbabilisticNode) node;
67 public NodoBean getNodoBeanByNodo(Nodo nodo) {
68 for(Node node : rede.getNodes()) {
69 if (node.getName().equals(nodo.getNome()))
70 return new NodoBean(nodo, (ProbabilisticNode) node);
76 public ProbabilisticNetwork getRede() {
80 public void compilar() {
81 JunctionTreeAlgorithm jt = new JunctionTreeAlgorithm();
86 public void setProbablidadeNodo(ProbabilisticNode pn, float sim, float nao) {
87 float likelihood[] = new float[pn.getStatesSize()]; //nr. de estados do nodo
91 pn.addLikeliHood(likelihood);
93 unBUtil.getRede().updateEvidences();
94 } catch (Exception e) {
99 public void ativarNodo(ProbabilisticNode pn) {
100 setProbablidadeNodo(pn, 1f, 0.0f);
103 public void desativarNodo(ProbabilisticNode pn) {
104 setProbablidadeNodo(pn, 0.0f, 1f);
107 public List<NodoBean> getProbabilidadeNodos(String tipo) {
108 EntityManager em = DbUtil.getInstance().getEntityManager();
109 List<NodoBean> nodos = new ArrayList<NodoBean>();
111 for (int j = 0; j < rede.getNodeCount(); j++) {
112 ProbabilisticNode nodoAtual = (ProbabilisticNode) rede.getNodeAt(j);
115 Nodo nodo = (Nodo) em.createQuery("From Nodo where nome=:pNome")
116 .setParameter("pNome", nodoAtual.getName())
120 if (!nodo.getTipo().equals(tipo))
123 nodos.add(new NodoBean(nodo, nodoAtual));
126 Collections.sort(nodos, new Comparator() {
128 public int compare(Object o1, Object o2) {
129 NodoBean nodo1 = (NodoBean) o1;
130 NodoBean nodo2 = (NodoBean) o2;
132 if (nodo1.getProbabilidade() < nodo2.getProbabilidade())
134 else if (nodo1.getProbabilidade() > nodo2.getProbabilidade())
144 public List<NodoBean> getProbabilidadeDiagnosticos() {
145 return getProbabilidadeNodos(Nodo.DIAGNOSTICO);
148 public List<NodoBean> getProbabilidadeCondutas() {
149 return getProbabilidadeNodos(Nodo.CONDUTA);
152 public void print() {
153 for (int j = 0; j < rede.getNodeCount(); j++) {
154 ProbabilisticNode nodoAtual = (ProbabilisticNode) rede.getNodeAt(j);
155 System.out.println(nodoAtual.getName());
157 // Verificando a tabela de probabilidades do nodo
158 for (int pb = 0; pb < nodoAtual.getStatesSize(); pb++) {
159 System.out.println(nodoAtual.getStateAt(pb)+":"+nodoAtual.getMarginalAt(pb));
161 System.out.println("");