TProcura
Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização
Loading...
Searching...
No Matches
TProcura.h
Go to the documentation of this file.
1#pragma once
2
3#define _CRT_SECURE_NO_WARNINGS
4
5#include "TVector.h"
6#include <time.h>
7#include <stdint.h>
8#include <limits.h>
9#include <stdio.h>
10
11
12// código para número não lido (não deve ser utilizado num parâmetro)
13#define NAO_LIDO -1000000
14
15
22
49
69
75enum EOperacao { gravar = 0, ler };
76
77
78// identificação de todos os indicadores definidos
79typedef struct SIndicador {
81 const char* nome;
83 const char* descricao;
85 int indice;
87
110typedef struct SParametro {
112 const char* nome;
114 int valor;
116 int min;
118 int max;
120 const char* descricao;
123 const char** nomeValores;
125
126
134typedef struct SResultado {
136 TVector<int> valor; // valor para cada indicador selecionado (fixos os EIndicadoresProcura, resultado, tempo, iterações)
138
139
152{
153public:
154 TProcura(void) {}
155 virtual ~TProcura(void) {}
156
182 virtual void Inicializar(void) { }
183
184
193 virtual int ExecutaAlgoritmo() { return -1; }
194
220 virtual int Indicador(int id);
221
256 virtual void Debug(void);
257
315 virtual void ResetParametros();
316
336 virtual bool Parar(void) {
338 }
339
375 virtual void TesteManual(const char* nome);
376
396 virtual void TesteEmpirico(TVector<int> instancias, bool mostrarSolucoes = true, char* ficheiro = NULL);
397
427 virtual void main(int argc, char* argv[], const char*nome);
428
430 virtual void LimparEstatisticas(clock_t& inicio);
432 virtual void ExecucaoTerminada(clock_t inicio);
434 virtual void Explorar() {}
436 virtual void MostrarSolucao();
439
441 static TParametro instancia;
448 static char ficheiroInstancia[256];
455 static TVector<int> indAtivo; // lista por ordem dos indicadores a utilizar
459 static int resultado;
461 static int tempo;
463 static int iteracoes;
467 static bool memoriaEsgotada;
468
469 bool TempoExcedido() { return instanteFinal < clock(); }
473 // ler um número, ou retorna NAO_LIDO
474 static int NovoValor(const char* prompt);
475 // ler uma string
476 static char *NovoTexto(const char* prompt);
477
478 // retorna o valor do parametro, para facilidade de uso
479 int Parametro(int id) { return parametro[id].valor; }
480
481protected:
482
490
497 int Registo(TResultado& resultado, int id);
498
505 void Registo(TResultado& resultado, int id, int valor);
506
513
517 void MostraIndicadores();
518
524 void MostrarConfiguracoes(int detalhe, int atual = -1);
525
530 bool EditarIndicadores();
531
535 void EditarParametros();
536
540 void EditarConfiguracoes();
541
548
555
562
570
576
582 void MostrarTorneio(TVector<TVector<int>>& torneio, bool jogo = false);
583
588 void BarraTorneio(bool nomes);
589
597
601 void SolicitaInstancia();
602
608
615
622
629
637
642 void AjudaUtilizacao(const char* programa);
643
651 static int Dominio(int& variavel, int min = INT_MIN, int max = INT_MAX);
652};
653
EOperacao
Define o sentido da operação de entrada/saída de dados.
Definition TProcura.h:75
@ ler
Definition TProcura.h:75
@ gravar
Definition TProcura.h:75
EIndicadoresProcura
Definition TProcura.h:16
@ indResultado
resultado do algoritmo
Definition TProcura.h:17
@ indProcura
Marcador para permitir a extensão do enum em subclasses.
Definition TProcura.h:20
@ indIteracoes
número de iterações consumidas
Definition TProcura.h:19
@ indTempo
tempo em milisegundos consumidos
Definition TProcura.h:18
struct SResultado TResultado
ENivelDebug
Níveis de detalhamento para debug.
Definition TProcura.h:62
@ detalhe
Debug detalhada sobre estados e decisões.
Definition TProcura.h:66
@ atividade
Apenas eventos principais.
Definition TProcura.h:64
@ completo
Mostra toda a execução detalhadamente.
Definition TProcura.h:67
@ passos
Exibe passos intermediários.
Definition TProcura.h:65
@ nada
Sem informações de debug.
Definition TProcura.h:63
struct SParametro TParametro
Estrutura para registo de um parâmetro.
EParametrosProcura
Identifica um parâmetro específico no código.
Definition TProcura.h:41
@ parametrosProcura
Marcador para permitir a extensão do enum em subclasses.
Definition TProcura.h:47
@ seed
Semente aleatória para inicializar a sequência de números pseudo-aleatórios.
Definition TProcura.h:44
@ nivelDebug
Nível de debug, de reduzido a completo.
Definition TProcura.h:43
@ limiteTempo
Tempo limite em segundos.
Definition TProcura.h:45
@ algoritmo
Algoritmo base a executar.
Definition TProcura.h:42
@ limiteIteracoes
Número máximo de iterações (0 significa sem limite).
Definition TProcura.h:46
struct SIndicador TIndicador
Vetor dinâmico genérico com operações de pilha, conjuntos e algoritmos úteis.
Classe base para todas as procuras.
Definition TProcura.h:152
virtual void MostrarSolucao()
definir para visualizar a solução
Definition TProcura.cpp:889
static bool memoriaEsgotada
Flag indicando problemas de memória esgotada.
Definition TProcura.h:467
virtual int ExecutaAlgoritmo()
Executa o algoritmo com os parametros atuais.
Definition TProcura.h:193
static int Dominio(int &variavel, int min=INT_MIN, int max=INT_MAX)
Limita o domínio de um parâmetro inteiro.
Definition TProcura.cpp:941
static char * NovoTexto(const char *prompt)
Definition TProcura.cpp:908
virtual void Inicializar(void)
Coloca o objecto no estado inicial da procura.
Definition TProcura.h:182
static TVector< TVector< int > > configuracoes
Conjuntos de configurações para teste empírico.
Definition TProcura.h:457
static int resultado
Resultado retornado pelo algoritmo na última execução.
Definition TProcura.h:459
void BarraTorneio(bool nomes)
Mostra a barra de progresso ou nomes do torneio.
Definition TProcura.cpp:845
void MostrarTorneio(TVector< TVector< int > > &torneio, bool jogo=false)
Mostra os resultados do torneio.
Definition TProcura.cpp:806
void MostrarConfiguracoes(int detalhe, int atual=-1)
Mostra as configurações disponíveis.
Definition TProcura.cpp:479
virtual ~TProcura(void)
Definition TProcura.h:155
virtual int Indicador(int id)
Retorna um indicador, após a execução do algoritmo.
Definition TProcura.cpp:74
TVector< TResultado > ExtrairConfiguracao(TVector< TResultado > &resultados, int configuracao)
Extrai resultados de uma determinada configuração.
Definition TProcura.cpp:836
static int tempo
tempo consumido na última execução.
Definition TProcura.h:461
static int iteracoes
Número total de iterações realizadas na última execução.
Definition TProcura.h:463
virtual void TesteManual(const char *nome)
Inicializa a interação com o utilizador.
Definition TProcura.cpp:104
static char ficheiroInstancia[256]
nome do ficheiro de uma instância - editado pelo utilizador (utilizar como prefixo, concatenando com ID...
Definition TProcura.h:448
int NovaConfiguracao(TVector< int > &parametros)
Adiciona uma nova configuração se ainda não existir.
Definition TProcura.cpp:244
void InserirConfiguracoes(char *str, TVector< int > &base)
Insere configurações a partir de uma string.
Definition TProcura.cpp:405
TVector< int > SolicitaInstancias()
Solicita ao utilizador uma lista de instâncias.
Definition TProcura.cpp:345
virtual void ResetParametros()
Inicializa os parametros, indicadores e instâncias.
Definition TProcura.cpp:37
void MostraParametros(int detalhe=1, TVector< int > *idParametros=NULL)
Mostra os parâmetros atuais.
Definition TProcura.cpp:155
TProcura(void)
Definition TProcura.h:154
bool IteracoesExcedido()
Definition TProcura.h:470
virtual bool Parar(void)
Verifica se a procura deve ser interrompida.
Definition TProcura.h:336
virtual void ExecucaoTerminada(clock_t inicio)
Chamar após a execução do algoritmo. Grava o tempo consumido.
Definition TProcura.cpp:879
void MostraRelatorio(TVector< TResultado > &resultados, bool ultimo=false)
Mostra um relatório dos resultados.
Definition TProcura.cpp:705
bool EditarIndicadores()
Permite ao utilizador editar os indicadores a utilizar.
Definition TProcura.cpp:185
TVector< int > ExtraiLista(char *str)
Extrai uma lista de inteiros a partir de uma string.
Definition TProcura.cpp:298
virtual TVector< int > CodificarSolucao()
retorna um vetor de inteiros com a codifciação da solução (esta codificação será adicionada aos indicadores,...
Definition TProcura.h:438
virtual void Debug(void)
Mostra o estado no ecrã, para debug.
Definition TProcura.cpp:87
static int NovoValor(const char *prompt)
Definition TProcura.cpp:898
void MostraIndicadores()
Mostra os indicadores definidos.
Definition TProcura.cpp:792
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 ...
Definition TProcura.h:454
virtual void main(int argc, char *argv[], const char *nome)
Inicializa a interação com o utilizador.
Definition TProcura.cpp:588
static clock_t instanteFinal
Instante final (deadline) da corrida atual.
Definition TProcura.h:465
void EditarParametros()
Permite ao utilizador editar os parâmetros.
Definition TProcura.cpp:213
int Registo(TResultado &resultado, int id)
Procura um registo com determinado id.
Definition TProcura.cpp:282
int MelhorResultado(TResultado base, TResultado alternativa)
Compara dois resultados para determinar o melhor.
Definition TProcura.cpp:856
virtual void Explorar()
definir para explorar manualmente os dados (não definido em TProcura, apenas em TProcuraConstrutiva)
Definition TProcura.h:434
void RelatorioCSV(TVector< TResultado > &resultados, FILE *f)
Gera um relatório CSV com os resultados.
Definition TProcura.cpp:679
void CalculaTorneio(TVector< TResultado > &resultados)
Calcula o torneio entre várias configurações.
Definition TProcura.cpp:771
void ConfiguracaoAtual(TVector< int > &parametros, int operacao)
Grava ou lê a configuração atual.
Definition TProcura.cpp:261
static TVector< int > indAtivo
Definition TProcura.h:455
static TParametro instancia
ID da instância atual, a ser utilizado em SolucaoVazia().
Definition TProcura.h:21
void InserirRegisto(TVector< TResultado > &resultados, int inst, int conf)
Insere um novo registo de resultados.
Definition TProcura.cpp:273
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...
Definition TProcura.cpp:94
static TVector< TParametro > parametro
Parâmetros a serem utilizados na configuração atual.
Definition TProcura.h:451
void AjudaUtilizacao(const char *programa)
Mostra ajuda de utilização do programa.
Definition TProcura.cpp:656
void EditarConfiguracoes()
Permite ao utilizador editar as configurações.
Definition TProcura.cpp:361
void SolicitaInstancia()
Solicita ao utilizador o ID da instância a utilizar, permitindo alterar também o prefixo do ficheiro.
Definition TProcura.cpp:916
int Parametro(int id)
Definition TProcura.h:479
bool TempoExcedido()
Definition TProcura.h:469
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.
Definition TProcura.cpp:509
int indice
indice onde aparece o indicador nos resultados, c.c. -1 para não aparecer
Definition TProcura.h:85
const char * nome
nome do indicador
Definition TProcura.h:81
const char * descricao
descrição do indicador, opcional
Definition TProcura.h:83
Estrutura para registo de um parâmetro.
Definition TProcura.h:110
const char * descricao
descrição do parametro, opcional
Definition TProcura.h:120
int valor
valor do parametro
Definition TProcura.h:114
const char * nome
nome do parametro, opcional mas aconselhado nos parâmetros específicos
Definition TProcura.h:112
int max
valor máximo que o parametro pode tomar
Definition TProcura.h:118
const char ** nomeValores
Nome associado a cada valor do parâmetro, útil para variáveis categóricas.
Definition TProcura.h:123
int min
valor mínimo que o parametro pode tomar
Definition TProcura.h:116
TVector< int > valor
Definition TProcura.h:136
int configuracao
Definition TProcura.h:135
int instancia
Definition TProcura.h:135