import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import junbbayes.jprs.jbn.*;
/** * Title: Exemplo de Uso da API através de um Modo Gráfico * Description: Essa classe feita em JAVA abre um modo gráfico onde o usuário entra com o endereço e * nome de um arquivo ".net". Depois esse arquivo é carregado, modificado em algumas * partes e então compilado. Essa classe tem a função de apenas exemplificar como se * pode usar a API desenvolvida para trabalhar com Redes Bayesianas. O nome da classe * responsável por essa exemplificação é ModoGrafico. No método principal, main, * criamos uma janela com título de "Exemplo de uso da API" e colocamos na mesma um * label "Nome do Arquivo" descrevendo o campo de texto, onde se deve especificar o * nome do arquivo, e um botão responsável por fazer as interações descritas a seguir. * Começamos criando uma nova Rede. Logo a seguir, nós carregamos uma rede existente * em arquivo (a descrita pelo usuário no campo de texto). O próximo passo é criar uma * variável probabilística, auxVP, com a sigla "K", e texto (descrição) "Variável de Teste". * Então inserimos dois estados nessa variável, "Estado 0" e "Estado 1", com probabilidades * de 0.99 (99%) e .01 (01%). Depois de definir todos essas características dessa variável * probabilística, inserimos a mesma na rede que carregamos do arquivo. Pegamos então uma * variável probabilística existente na rede carregada , auxVP2, que possui a sigla "A" e * ligamos ela à variável anterior dizendo que auxVP é pai de auxVP2 através de um arco. * Finalmente verificamos a consistência da rede, moralizamos, triangulamos, e finalmente * compilamos a árvore de junção criada a partir da rede. Logo em seguida, pegamos as * evidências da rede, modificamos a evidência de todas para -1 exceto a que for igual a * variável auxVP onde modificamos para -2. Pegamos as marginais e atualizamos o valor da * primeira, 0, para 1.0 e da segunda, 1, para 0.8 e por fim atualizamos essas modificações. * OBS: As interações descritas anteriormente só funcionarão se o usuário indicar uma rede * ".net" que possui uma variável propabilística com a sigla "A". Caso contrário um erro, * Exception, ocorrerá pois não encontrará nenhuma variável que possua a sigla "A", logo * ocorrerão erros nas operações seguintes. * Copyright: Copyright (c) 2001 * Company: UnB - Universidade de Brasília * @author Rommel Novaes Carvalho * @author Michael S. Onishi * @version 1.0 */
public class ModoGrafico { public static void main(String[] args) { JFrame frame = new JFrame("Exemplo de uso da API"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container pane = frame.getContentPane(); pane.setLayout(new FlowLayout()); JLabel labelArquivo = new JLabel("Nome do Arquivo"); final JTextField nomeArquivo = new JTextField(20); JButton botao = new JButton("Compila Árvore"); pane.add(labelArquivo); pane.add(nomeArquivo); pane.add(botao); botao.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { TRP rede = new TRP(); rede.carregarRedeNET(nomeArquivo.getText()); TVP auxVP = new TVP(); auxVP.setSigla("K"); auxVP.setTexto("Variável de Teste"); auxVP.insereEstado("Estado 0"); auxVP.insereEstado("Estado 1"); TTabPot auxTabPot = new TTabPot(); auxTabPot.porVariavel(auxVP); auxTabPot.porValor(0, 0.99); auxTabPot.porValor(1, 0.01); auxVP.setTabelaPProb(auxTabPot);
rede.adicionaNo(auxVP); TVP auxVP2 = (TVP)rede.pegarNo("A"); TArco auxArco = new TArco(auxVP, auxVP2); rede.liga(auxArco); rede.verificaConsistencia(); rede.moraliza(); rede.triangula(); rede.compilaAJ(); int[] evidencias = new int[rede.noVariaveis()]; for (int i = 0; i < evidencias.length; i++) { auxVP2 = (TVP)rede.pegarNo(i); if (auxVP == auxVP2) { evidencias[i] = -2; } else { evidencias[i] = -1; } } auxVP.marginal(); auxVP.getMarginais()[0] = 1.0; auxVP.getMarginais()[1] = 0.8; rede.atualizarEvidencias(evidencias); } }); frame.pack(); frame.setVisible(true); } }