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 BNMain.h 00031 * @author Ernesto Colla (ernesto@gmail.com) 00032 * @version 0.0.1 00033 * @date Julho/2007 (2007-06-07) 00034 * @brief Main Package com as definições das estruturas de Redes Bayesianas (BN: \e Bayesian \e Networks). 00035 * 00036 * @todo 00037 * -# Na função buildBayesNet ao invés de copiar (duplicar) os dados utilizados como 00038 * parâmetro de entrada, faz-se a atribuição direta para as estruturas de dados correspondentes 00039 * na BayesNet. Eventualmente a melhor forma seria copiar o conteúdo dos parâmetros da memória 00040 * para as estruturas internas da BayesNet e desta forma isolar.Verificar se é utilizada esta função. 00041 * 00042 */ 00043 00044 #ifndef BNMAIN_H 00045 #define BNMAIN_H 00046 00047 /* Bibliotecas Específicas */ 00048 #include "graph.h" 00049 #include "potential.h" 00050 00051 /* Defines */ 00052 00053 /* Definições das estruturas e tipos de dados */ 00054 00055 /*! Estrutura que armazena uma Rede Bayesiana (BN: \e Bayesian \e Networks). Armazena os vértices, os arcos e as 00056 * distribuições de probabilidades os potenciais (potential.h) associado a cada uma das variáveis. 00057 */ 00058 typedef struct struct_BayesNet { 00059 struct struct_Graph* graph; //!< Grafo que define a topologia da Rede. 00060 Variable** variables; //!< Variáveis associadas aos vértices do grafo. O \e id da variável é igual ao \e id do vértice correspondente no grafo. 00061 Potential** potentials; //!< Potenciais associados às váriaveis. 00062 } BayesNet; 00063 00064 /* Funções */ 00065 00066 /*! 00067 * @brief Cria uma nova Rede Bayesiana com um grafo direcionado vazio sem nenhuma variável e sem nenhum potencial. 00068 * @return Um ponteiro para uma estrutura de dados para armazenar uma Rede Bayesiana. 00069 */ 00070 00071 BayesNet* newBayesNet(); 00072 00073 /*! 00074 * @brief Cria uma nova Rede Bayesiana a partir dos parâmetros de entrada. 00075 * @param[in] graph Grafo que descreve a topologia da rede. 00076 * @param[in] variables \e Array de variáveis que irão compor ao BN. 00077 * @param[in] potentials \e Array de potenciais que caracterizam a BN. 00078 * @return Um ponteiro para uma estrutura de dados para armazenar uma Rede Bayesiana. 00079 */ 00080 00081 BayesNet* buildBayesNet(Graph* graph, Variable** variables, Potential** potentials); 00082 00083 /*! 00084 * @brief Dump para o \e stdout do conteúdo da BN. 00085 * @param[in] bayesnet Ponteiro para a BN da qual se deseja fazer o dump. 00086 */ 00087 00088 void dumpBayesNet(BayesNet* bayesnet); 00089 00090 /*! 00091 * @brief Destrói a BN e libera os recursos alocados. Atenção: Destrói e libera inclusive os recursos que estavam 00092 * alocados para armazenar os potenciais e as variáveis. 00093 * @param[out] refBayesNet Referência para a BN que se deseja destruir. 00094 */ 00095 void destroyBayesNet(BayesNet** refBayesNet); 00096 00097 /*! 00098 * @brief Tamanho (número de vértices=número de variáveis) que compõe o grafo da BN. 00099 * @param[in] bayesnet Ponteiro para a BN da qual se deseja saber o número de vértices. 00100 * @return Número de vértices (=número de variáveis) da BN. 00101 */ 00102 int bnsize(BayesNet* bayesnet); 00103 00104 /*! 00105 * @brief Retorna o \e array de potenciais da BN. 00106 * @param[in] bayesnet Ponteiro para a BN da qual se deseja o \e array de potenciais. 00107 * @return \e Array de potenciais da BN. 00108 */ 00109 00110 Potential** bnpotentials(BayesNet* bayesnet); 00111 00112 /*! 00113 * @brief Retorna o \e array de variáveis da BN. 00114 * @param[in] bayesnet Ponteiro para a BN da qual se deseja o \e array de variáveis. 00115 * @return \e Array de variáveis da BN. 00116 */ 00117 00118 Variable** bnvariables(BayesNet* bayesnet); 00119 00120 #endif