package junbbayes.exemplo;

import junbbayes.jprs.jbn.*;

 /**
  * Title: Exemplo de Uso da API através de um Modo de Texto
  * Description: Essa classe feita em JAVA abre um arquivo ".net", "asia.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 é ModoTexo.
  *              No método principal, main, nós começamos criando uma nova Rede. Logo a seguir, nós
  *              carregamos uma rede existente em arquivo, asia.net, que se encontra no diretório
  *              /exemplos usando o método carregarRedeNET(). 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.
  * Copyright: Copyright (c) 2001
  * Company: UnB - Universidade de Brasília
  * @author Rommel Novaes Carvalho
  * @author Michael S. Onishi
  * @version 1.0
  */
  
  public class ModoTexto { 
      public static void main(String[] args) {
 
          TRP rede = new TRP();
          rede.carregarRedeNET("./exemplos/asia.net");
			  
          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);
            
      }
  }