TProcura
Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização
|
Classe base para todas as procuras. More...
#include <TProcura.h>
Public Member Functions | |
TProcura (void) | |
virtual | ~TProcura (void) |
virtual void | Inicializar (void) |
Coloca o objecto no estado inicial da procura. | |
virtual int | ExecutaAlgoritmo () |
Executa o algoritmo com os parametros atuais. | |
virtual int | Indicador (int id) |
Retorna um indicador, após a execução do algoritmo. | |
virtual void | Debug (void) |
Mostra o estado no ecrã, para debug. | |
virtual void | ResetParametros () |
Inicializa os parametros, indicadores e instâncias. | |
virtual bool | Parar (void) |
Verifica se a procura deve ser interrompida. | |
virtual void | TesteManual (const char *nome) |
Inicializa a interação com o utilizador. | |
virtual void | TesteEmpirico (TVector< int > instancias, bool mostrarSolucoes=true, char *ficheiro=NULL) |
Executa testes empíricos, em todas as configurações guardadas, nas instâncias selecionadas. | |
virtual void | main (int argc, char *argv[], const char *nome) |
Inicializa a interação com o utilizador. | |
virtual void | LimparEstatisticas (clock_t &inicio) |
Chapar antes da execução do algoritmo. Limpa valores estatísticos, e fixa o instante limite de tempo para a execução. | |
virtual void | ExecucaoTerminada (clock_t inicio) |
Chamar após a execução do algoritmo. Grava o tempo consumido. | |
virtual void | Explorar () |
definir para explorar manualmente os dados (não definido em TProcura, apenas em TProcuraConstrutiva) | |
virtual void | MostrarSolucao () |
definir para visualizar a solução | |
virtual TVector< int > | CodificarSolucao () |
retorna um vetor de inteiros com a codifciação da solução (esta codificação será adicionada aos indicadores, no ficheiro CSV de resultados) | |
bool | TempoExcedido () |
bool | IteracoesExcedido () |
int | Parametro (int id) |
Static Public Member Functions | |
static int | NovoValor (const char *prompt) |
static char * | NovoTexto (const char *prompt) |
Static Public Attributes | |
static TParametro | instancia = { NULL,1,1,1, NULL, NULL } |
ID da instância atual, a ser utilizado em SolucaoVazia(). | |
static char | ficheiroInstancia [256] = "instancia_" |
nome do ficheiro de uma instância - editado pelo utilizador (utilizar como prefixo, concatenando com ID da instância) pode ser utilizado para gravar a instãncia num novo formato, colocando um indicador ativo que é chamado após a execução (pode gravar a solução para ficheiro também, mas essa é mais facilmente gravada em CVS codificada em inteiros, onde fica associada à configuração utilizada para a gerar) | |
static TVector< TParametro > | parametro |
Parâmetros a serem utilizados na configuração atual. | |
static TVector< TIndicador > | indicador |
Indicadores que podem ser calculados após a execução, quer com informação da instãncia, quer com resultado da última corrida. | |
static TVector< int > | indAtivo |
static TVector< TVector< int > > | configuracoes |
Conjuntos de configurações para teste empírico. | |
static int | resultado = 0 |
Resultado retornado pelo algoritmo na última execução. | |
static int | tempo = 0 |
tempo consumido na última execução. | |
static int | iteracoes = 0 |
Número total de iterações realizadas na última execução. | |
static clock_t | instanteFinal = 0 |
Instante final (deadline) da corrida atual. | |
static bool | memoriaEsgotada = false |
Flag indicando problemas de memória esgotada. | |
Protected Member Functions | |
void | InserirRegisto (TVector< TResultado > &resultados, int inst, int conf) |
Insere um novo registo de resultados. | |
int | Registo (TResultado &resultado, int id) |
Procura um registo com determinado id. | |
void | Registo (TResultado &resultado, int id, int valor) |
Atualiza o valor de um registo. | |
void | MostraParametros (int detalhe=1, TVector< int > *idParametros=NULL) |
Mostra os parâmetros atuais. | |
void | MostraIndicadores () |
Mostra os indicadores definidos. | |
void | MostrarConfiguracoes (int detalhe, int atual=-1) |
Mostra as configurações disponíveis. | |
bool | EditarIndicadores () |
Permite ao utilizador editar os indicadores a utilizar. | |
void | EditarParametros () |
Permite ao utilizador editar os parâmetros. | |
void | EditarConfiguracoes () |
Permite ao utilizador editar as configurações. | |
void | MostraRelatorio (TVector< TResultado > &resultados, bool ultimo=false) |
Mostra um relatório dos resultados. | |
void | ConfiguracaoAtual (TVector< int > ¶metros, int operacao) |
Grava ou lê a configuração atual. | |
int | NovaConfiguracao (TVector< int > ¶metros) |
Adiciona uma nova configuração se ainda não existir. | |
int | MelhorResultado (TResultado base, TResultado alternativa) |
Compara dois resultados para determinar o melhor. | |
void | CalculaTorneio (TVector< TResultado > &resultados) |
Calcula o torneio entre várias configurações. | |
void | MostrarTorneio (TVector< TVector< int > > &torneio, bool jogo=false) |
Mostra os resultados do torneio. | |
void | BarraTorneio (bool nomes) |
Mostra a barra de progresso ou nomes do torneio. | |
TVector< TResultado > | ExtrairConfiguracao (TVector< TResultado > &resultados, int configuracao) |
Extrai resultados de uma determinada configuração. | |
void | SolicitaInstancia () |
Solicita ao utilizador o ID da instância a utilizar, permitindo alterar também o prefixo do ficheiro. | |
TVector< int > | SolicitaInstancias () |
Solicita ao utilizador uma lista de instâncias. | |
void | RelatorioCSV (TVector< TResultado > &resultados, FILE *f) |
Gera um relatório CSV com os resultados. | |
TVector< int > | ExtraiLista (char *str) |
Extrai uma lista de inteiros a partir de uma string. | |
void | InserirConfiguracoes (char *str, TVector< int > &base) |
Insere configurações a partir de uma string. | |
void | InserirConfiguracoes (TVector< int > &base, TVector< int > &produto, TVector< TVector< int > > &valores) |
Insere configurações gerando o produto cartesiano de valores. | |
void | AjudaUtilizacao (const char *programa) |
Mostra ajuda de utilização do programa. | |
Static Protected Member Functions | |
static int | Dominio (int &variavel, int min=INT_MIN, int max=INT_MAX) |
Limita o domínio de um parâmetro inteiro. | |
Classe base para todas as procuras.
Esta classe base para procuras... (separação de TProcurasConstrutivas, em curso). pretende-se que depois as sub-classes tipo TProcuraMelhorativa, possa herdar de TProcura, não ficando com partes da procura construtiva que são desnecessárias
Observação: Alguns métodos e parâmetros terão efeito apenas se determinados métodos forem redefinidos na subclasse.
Definition at line 151 of file TProcura.h.
|
inline |
Definition at line 154 of file TProcura.h.
Definition at line 155 of file TProcura.h.
Mostra ajuda de utilização do programa.
programa | Nome do programa. |
Definition at line 656 of file TProcura.cpp.
Mostra a barra de progresso ou nomes do torneio.
nomes | Se true, mostra nomes; caso contrário, mostra progresso. |
Definition at line 845 of file TProcura.cpp.
|
protected |
Calcula o torneio entre várias configurações.
resultados | Vetor de resultados a comparar. |
Definition at line 771 of file TProcura.cpp.
retorna um vetor de inteiros com a codifciação da solução (esta codificação será adicionada aos indicadores, no ficheiro CSV de resultados)
Definition at line 438 of file TProcura.h.
Grava ou lê a configuração atual.
parametros | Vetor de parâmetros. |
operacao | Tipo de operação (gravar ou ler). |
Definition at line 261 of file TProcura.cpp.
Mostra o estado no ecrã, para debug.
Esta função deverá mostrar claramente o estado atual, em texto mas da forma mais confortável possível. O formato texto destina-se principalmente a quem implementa o problema, e não utilizadores finais. É importante poder explorar o espaço de estados, para verificar a correta implementação dos sucessores, como também possa ver a árvore de procura dos algoritmos, para árvores pequenas, e assim detectar bugs.
NovaLinha()
pode imprimir caracteres que representam os ramos da árvore de procura, criando uma visualização textual que simula a estrutura da procura.parametro[nivelDebug].valor
. Um nível menor pode mostrar informações mais sucintas, enquanto um nível maior pode detalhar todas as variáveis do estado.Reimplemented in CJogoDoGalo, CJogoEmLinha, CAspirador, COitoDamas, CParticao, CProblemaArtificial, CPuzzle8, COitoDamas, CParticao, CProblemaArtificial, and CTesteTVector.
Definition at line 87 of file TProcura.cpp.
Limita o domínio de um parâmetro inteiro.
variavel | Variável a limitar. |
min | Valor mínimo permitido. |
max | Valor máximo permitido. |
Definition at line 941 of file TProcura.cpp.
|
protected |
Permite ao utilizador editar as configurações.
Definition at line 361 of file TProcura.cpp.
|
protected |
Permite ao utilizador editar os indicadores a utilizar.
Definition at line 185 of file TProcura.cpp.
|
protected |
Permite ao utilizador editar os parâmetros.
Definition at line 213 of file TProcura.cpp.
Chamar após a execução do algoritmo. Grava o tempo consumido.
Reimplemented in TProcuraConstrutiva.
Definition at line 879 of file TProcura.cpp.
Executa o algoritmo com os parametros atuais.
No caso de adicionar algum algoritmo, chame o algoritmo com base em parametro[algoritmo].valor Se TesteManual()
não for utilizado, esta função pode ser chamada diretamente, desde que os parâmetros necessários já estejam configurados corretamente.
Reimplemented in TProcuraAdversa, TProcuraConstrutiva, TProcuraMelhorativa, and CTesteTVector.
Definition at line 193 of file TProcura.h.
definir para explorar manualmente os dados (não definido em TProcura, apenas em TProcuraConstrutiva)
Reimplemented in TProcuraConstrutiva, and TProcuraMelhorativa.
Definition at line 434 of file TProcura.h.
Extrai uma lista de inteiros a partir de uma string.
str | String a analisar. |
Definition at line 298 of file TProcura.cpp.
|
protected |
Extrai resultados de uma determinada configuração.
resultados | Vetor de resultados. |
configuracao | Índice da configuração. |
Definition at line 836 of file TProcura.cpp.
Retorna um indicador, após a execução do algoritmo.
Este método é chamado após a execução do algoritmo, para cada indicador, pela ordem definida pelo utilizador. Caso tenham sido definidos outros indicadorews na subclasse, deve redefinir, e caso seja um indicador da subclasse, calcular, caso contrário deve chamar o método da superclasse.
Reimplemented in CTesteTVector, TProcuraConstrutiva, and TProcuraMelhorativa.
Definition at line 74 of file TProcura.cpp.
Coloca o objecto no estado inicial da procura.
Este método inicializa as variáveis de estado no estado inicial vazio. Representa o estado inicial antes de qualquer ação ser realizada na procura. Caso existam dados de instância, deve neste método carregar a instância. A primeira instrução deverá chamar o método da superclasse, conforme modelo em baixo.
Reimplemented in CJogoDoGalo, CJogoEmLinha, CAspirador, COitoDamas, CParticao, CProblemaArtificial, CPuzzle8, COitoDamas, CParticao, CProblemaArtificial, CTesteTVector, and TProcuraConstrutiva.
Definition at line 182 of file TProcura.h.
Insere configurações a partir de uma string.
str | String com as configurações. |
base | Vetor base para inserção. |
Definition at line 405 of file TProcura.cpp.
|
protected |
Insere configurações gerando o produto cartesiano de valores.
base | Vetor base. |
produto | Vetor para resultados. |
valores | Vetor de vetores de valores possíveis. |
Definition at line 457 of file TProcura.cpp.
|
protected |
Insere um novo registo de resultados.
resultados | Vetor onde inserir o resultado. |
inst | ID da instância. |
conf | ID da configuração. |
Definition at line 273 of file TProcura.cpp.
|
inline |
Definition at line 470 of file TProcura.h.
Chapar antes da execução do algoritmo. Limpa valores estatísticos, e fixa o instante limite de tempo para a execução.
Reimplemented in TProcuraMelhorativa, and TProcuraConstrutiva.
Definition at line 94 of file TProcura.cpp.
Inicializa a interação com o utilizador.
Esta função arranca com o teste manual, orientada para o programador. A interface permite:
Definition at line 588 of file TProcura.cpp.
|
protected |
Compara dois resultados para determinar o melhor.
base | Resultado base. |
alternativa | Resultado alternativo. |
Definition at line 856 of file TProcura.cpp.
|
protected |
Mostra os indicadores definidos.
Definition at line 792 of file TProcura.cpp.
Mostra os parâmetros atuais.
detalhe | Nível de detalhe na apresentação. |
idParametros | Vetor de IDs de parâmetros a mostrar (opcional). |
Definition at line 155 of file TProcura.cpp.
Mostra as configurações disponíveis.
detalhe | Nível de detalhe. |
atual | Índice da configuração atual (opcional). |
Definition at line 479 of file TProcura.cpp.
|
protected |
Mostra um relatório dos resultados.
resultados | Vetor de resultados a apresentar. |
ultimo | Indica se é o último relatório (opcional). |
Definition at line 705 of file TProcura.cpp.
definir para visualizar a solução
Reimplemented in COitoDamas, CParticao, CPuzzle8, TProcuraConstrutiva, COitoDamas, and CParticao.
Definition at line 889 of file TProcura.cpp.
Mostra os resultados do torneio.
torneio | Matriz de resultados do torneio. |
jogo | Indica se é modo de jogo ou apenas comparação. |
Definition at line 806 of file TProcura.cpp.
Adiciona uma nova configuração se ainda não existir.
parametros | Vetor de parâmetros. |
Definition at line 244 of file TProcura.cpp.
Verifica se a procura deve ser interrompida.
O critério de paragem pode ser especificado em limite de tempo, limite de iterações. Caso exista uma falha na alocação de memória de um estado, em chamadas futuras irá retornar verdadeiro.
Definition at line 336 of file TProcura.h.
|
protected |
Procura um registo com determinado id.
resultado | Vetor de resultados. |
id | ID a procurar. |
Definition at line 282 of file TProcura.cpp.
|
protected |
Atualiza o valor de um registo.
resultado | Referência ao resultado a atualizar. |
id | ID do valor. |
valor | Novo valor a atribuir. |
Definition at line 289 of file TProcura.cpp.
|
protected |
Gera um relatório CSV com os resultados.
resultados | Vetor de resultados. |
f | Ponteiro para o ficheiro onde gravar. |
Definition at line 679 of file TProcura.cpp.
|
virtual |
Inicializa os parametros, indicadores e instâncias.
Nesta função, a primeira instrução deverá ser a chamada da função da superclasse, para que sejam criados os parametros da superclasse antes de qualquer outra instrução.
Cada problema pode ter um algoritmo e configurações padrão que funcionam bem na maioria dos casos. Nesta função, podem ser definidos estes valores de omissão.
Novos parâmetros podem ser adicionados conforme necessário para atender às particularidades do problema. Estes parametros podem depois ser selecionados ou incluídos num teste empírico, de modo a averiguar em fase de testes, qual a melhor configuração, evitando escolhas arbitrárias ou não fundamentadas.
Nesta função deve ser redefinida a variável com informação dos IDs das instâncias disponíveis. Essa variável é do tipo TParametro, mas não está na lista de parametros, devendo ser inicializada aqui.
Existindo novos indicadores, devem ser adicionados aqui, e redefinida a função Indicador() para calcular o valor.
parametrosConstrutivos
, garantindo que novas adições na superclasse sejam automaticamente refletidas aqui.Exemplo com a alteração do valor de omissão de um parametro, e adição de dois novos parametros.
Reimplemented in CJogoEmLinha, TProcuraAdversa, CAspirador, COitoDamas, CParticao, CProblemaArtificial, CPuzzle8, CProblemaArtificial, CTesteTVector, TProcuraConstrutiva, and TProcuraMelhorativa.
Definition at line 37 of file TProcura.cpp.
|
protected |
Solicita ao utilizador o ID da instância a utilizar, permitindo alterar também o prefixo do ficheiro.
Definition at line 916 of file TProcura.cpp.
Solicita ao utilizador uma lista de instâncias.
Definition at line 345 of file TProcura.cpp.
|
inline |
|
virtual |
Executa testes empíricos, em todas as configurações guardadas, nas instâncias selecionadas.
inicio | - ID da primeira instância no teste (ou -1 para a primeira) |
fim | - ID da última instância no teste (ou -1 para a última) |
mostrarSolucoes | - se true, mostra a solução após cada execução, c.c. indica apenas a instância em processamento. |
Esta função é chamada de TesteManual() para executar testes empíricos. A função apresenta-se como método virtual, atendendo a que será redefinida nas procuras adversas. É genérica e não se prevê outras situações que seja necessário redefini-la.
configuracoes
estiver vazia, o teste empírico será executado apenas com a configuração atual, avaliando seu desempenho isoladamente, sem comparação com outras configurações.Definition at line 509 of file TProcura.cpp.
Inicializa a interação com o utilizador.
Esta função arranca com o teste manual, orientada para o programador. A interface permite:
Reimplemented in CJogoDoGalo, CJogoEmLinha, COitoDamas, CParticao, and CProblemaArtificial.
Definition at line 104 of file TProcura.cpp.
Conjuntos de configurações para teste empírico.
Definition at line 457 of file TProcura.h.
|
static |
nome do ficheiro de uma instância - editado pelo utilizador (utilizar como prefixo, concatenando com ID da instância) pode ser utilizado para gravar a instãncia num novo formato, colocando um indicador ativo que é chamado após a execução (pode gravar a solução para ficheiro também, mas essa é mais facilmente gravada em CVS codificada em inteiros, onde fica associada à configuração utilizada para a gerar)
Definition at line 448 of file TProcura.h.
Definition at line 455 of file TProcura.h.
|
static |
Indicadores que podem ser calculados após a execução, quer com informação da instãncia, quer com resultado da última corrida.
Definition at line 454 of file TProcura.h.
|
static |
ID da instância atual, a ser utilizado em SolucaoVazia().
Definition at line 21 of file TProcura.h.
|
static |
Instante final (deadline) da corrida atual.
Definition at line 465 of file TProcura.h.
|
static |
Número total de iterações realizadas na última execução.
Definition at line 463 of file TProcura.h.
Flag indicando problemas de memória esgotada.
Definition at line 467 of file TProcura.h.
|
static |
Parâmetros a serem utilizados na configuração atual.
Definition at line 451 of file TProcura.h.
|
static |
Resultado retornado pelo algoritmo na última execução.
Definition at line 459 of file TProcura.h.
|
static |
tempo consumido na última execução.
Definition at line 461 of file TProcura.h.