00001 /* 00002 * Copyright 2007, 2008 Ernesto Coutinho Colla 00003 * 00004 * "BN Parallel Package" é um nome que identifica o conjunto de programas 00005 * que forma uma biblioteca de rotinas que foram desenvolvidas como parte da 00006 * dissertação de mestrado do autor em Ciências da Computação. 00007 * 00008 * O conjunto de programas foi integralmente desenvolvido pelo autor e está 00009 * disponível sob a licença GPL (GNU General Public License). O entendimento 00010 * integral dos termos da licença GPL é condição necessária para a utilização 00011 * parcial ou integral de qualquer parte deste conjunto de programas. 00012 * 00013 * This file is part of BN Parallel Package. 00014 * 00015 * BN Parallel Package is free software: you can redistribute it and/or modify 00016 * it under the terms of the GNU General Public License as published by 00017 * the Free Software Foundation, either version 3 of the License. 00018 * 00019 * BN Parallel Package is distributed in the hope that it will be useful, 00020 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00021 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00022 * GNU General Public License for more details. 00023 * 00024 * You should have received a copy of the GNU General Public License 00025 * along with BN Parallel Package. If not, see <http://www.gnu.org/licenses/>. 00026 */ 00027 00028 00029 /*! 00030 * @file BNUtils.h 00031 * @author Ernesto Colla (ernesto@gmail.com) 00032 * @version 0.0.1 00033 * @date Julho/2007 (2007-06-28) 00034 * @brief Biblioteca do tipo "interface" (analogia com java) para encapsular implementações de funções úteis 00035 * em Redes Bayesianas (BN: \e Bayesian \e Network). 00036 * 00037 */ 00038 00039 #ifndef BNUTILS_H 00040 #define BNUTILS_H 00041 00042 /* Bibliotecas específicas */ 00043 #include "BNMain.h" 00044 #include "graphtools.h" 00045 #include "bayesball.h" 00046 #include "threadtree.h" 00047 00048 /* Defines */ 00049 00050 /* Funções */ 00051 00052 /*! 00053 * @brief Constrói o \e Moral \e Graph para uma Rede Bayesiana (BN: \e Bayesian \e Network) a partir de um 00054 * conjunto de variáveis requisitadas (\e Required \e Variables). 00055 * 00056 * Atenção: No grafo moral, os \e ids das variáveis requisitadas são mantidos os mesmos do grafo da rede 00057 * bayesiana, mesmo que não estejam em uma seqüência contínua. 00058 * @param[in] nxr Número de elementos do \e array de variáveis requisitadas (\e Required \e Variables). 00059 * @param[in] xr \e Array de variáveis requisitadas (\e Required \e Variables). 00060 * @param[in] bayesnet BN que será a base para construção do \e Moral \e Graph. 00061 * @return \e Moral \e Graph construído a partir das variáveis requisitadas da rede bayesiana. 00062 */ 00063 00064 Graph* buildBNMoralGraph (int nxr, int* xr, BayesNet* bayesnet); 00065 00066 /*! 00067 * @brief Determina a ordem de eliminação de um grafo moral de uma Rede Bayesiana. 00068 * @param[in] moral Grafo Moral do qual a ordem de eliminação deve ser determinada. 00069 * @return \e Array com os \e ids dos vértices na ordem que devem ser eliminados. 00070 */ 00071 00072 int* defineBNEliminationOrder(Graph* moral); 00073 00074 /*! 00075 * @brief Executa a fatoração simbólica do grafo moral com base em uma ordem de eliminação predefinida. 00076 * 00077 * Os parâmetros de entrada \e refEliminationTree e \e refFilledGraph devem ser explicitamente inicializados antes da chamada da função. 00078 * Por questão de performance o parâmetro \e refFilledGraph pode ser NULL e neste caso não será contruído. 00079 * @param[out] refElmTree Referência para a árvore de eliminação quer será preeenchida. 00080 * @param[out] refFilledGraph Referência para o grafo preenchido, se NULL, não monta do gráfico preenchido e ganha performance. 00081 * @param[in] moral \e Moral \e Graph a ser fatorado. 00082 * @param[in] elmorder Ordem de eliminação. 00083 */ 00084 00085 void doBNSymbolicFactorization(Graph** refElmTree, Graph** refFilledGraph, Graph* moral, int* elmorder); 00086 00087 /*! 00088 * @brief Determina o conjunto de variáveis relevante para uma \e query na BN. Onde uma \e query é a inferência 00089 * sobre a BN para um determinado estado das variáveis. 00090 * @param[out] nxr Ponteiro para um inteiro que irá armazenar o tamanho do \e array de inteiros que a função retorna. 00091 * @param[in] nxq Número de variáveis questionadas (\e Query \e Variables). 00092 * @param[in] xq \e Array com os \e ids das variáveis questionadas (\e Query \e Variables). 00093 * @param[in] nxe Número de variáveis que compõe a evidência (\e Evidence), ou seja, as variáveis observadas. O estado da variável esta 00094 * em outra estrutura denominada \e finding. 00095 * @param[in] xe \e Array com os \e ids das variáveis observadas. 00096 * @param[in] bayesnet BN da qual se deseja obter as variáveis requisitadas para a inferência. 00097 * @return Um \e array de inteiros com os \e ids dos vértices, e portanto das varíaveis, requisitadas (\e Required \e Variables) para o 00098 * procedimento de inferência. 00099 */ 00100 00101 int* defineBNRequiredVars(int* nxr, int nxq, int* xq, int nxe, int* xe, BayesNet* bayesnet); 00102 00103 #endif