package junbbayes.exemplo;

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); } }