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 rede = new ProbabilisticNetwork(null);
40 XMLBIFIO.loadXML(new File(redeEntity.getArquivo()), rede);
42 } catch (Exception e) {
50 public static UnBUtil getInstance(Rede redeEntity) {
52 unBUtil = new UnBUtil(redeEntity);
57 public ProbabilisticNode getNodeByName(String name) {
58 for(Node node : rede.getNodes()) {
59 if (node.getName().equals(name))
60 return (ProbabilisticNode) node;
66 public NodoBean getNodoBeanByNodo(Nodo nodo) {
67 for(Node node : rede.getNodes()) {
68 if (node.getName().equals(nodo.getNome()))
69 return new NodoBean(nodo, (ProbabilisticNode) node);
75 public ProbabilisticNetwork getRede() {
79 public void compilar() {
80 JunctionTreeAlgorithm jt = new JunctionTreeAlgorithm();
85 public void setProbablidadeNodo(ProbabilisticNode pn, float sim, float nao) {
86 float likelihood[] = new float[pn.getStatesSize()]; //nr. de estados do nodo
90 pn.addLikeliHood(likelihood);
92 unBUtil.getRede().updateEvidences();
93 } catch (Exception e) {
98 public void ativarNodo(ProbabilisticNode pn) {
99 setProbablidadeNodo(pn, 1f, 0.0f);
102 public void desativarNodo(ProbabilisticNode pn) {
103 setProbablidadeNodo(pn, 0.0f, 1f);
106 public List<NodoBean> getProbabilidadeNodos(String tipo) {
107 EntityManager em = DbUtil.getInstance().getEntityManager();
108 List<NodoBean> nodos = new ArrayList<NodoBean>();
110 for (int j = 0; j < rede.getNodeCount(); j++) {
111 ProbabilisticNode nodoAtual = (ProbabilisticNode) rede.getNodeAt(j);
114 Nodo nodo = (Nodo) em.createQuery("From Nodo where nome=:pNome")
115 .setParameter("pNome", nodoAtual.getName())
119 if (!nodo.getTipo().equals(tipo))
122 nodos.add(new NodoBean(nodo, nodoAtual));
125 Collections.sort(nodos, new Comparator() {
127 public int compare(Object o1, Object o2) {
128 NodoBean nodo1 = (NodoBean) o1;
129 NodoBean nodo2 = (NodoBean) o2;
131 if (nodo1.getProbabilidade() < nodo2.getProbabilidade())
133 else if (nodo1.getProbabilidade() > nodo2.getProbabilidade())
143 public List<NodoBean> getProbabilidadeDiagnosticos() {
144 return getProbabilidadeNodos(Nodo.DIAGNOSTICO);
147 public List<NodoBean> getProbabilidadeCondutas() {
148 return getProbabilidadeNodos(Nodo.CONDUTA);
151 public void print() {
152 for (int j = 0; j < rede.getNodeCount(); j++) {
153 ProbabilisticNode nodoAtual = (ProbabilisticNode) rede.getNodeAt(j);
154 System.out.println(nodoAtual.getName());
156 // Verificando a tabela de probabilidades do nodo
157 for (int pb = 0; pb < nodoAtual.getStatesSize(); pb++) {
158 System.out.println(nodoAtual.getStateAt(pb)+":"+nodoAtual.getMarginalAt(pb));
160 System.out.println("");