137 const char*
nome =
"Indefinido";
283 virtual void Debug(
bool completo =
true);
461 virtual void main(
int argc,
char*
argv[],
const char* nome);
531 valor = (*valores)[
parametro[id].dependencia.First()];
532 return parametro[id].dependencia.Find(valor,
true, 1) >= 0;
552 if (
exato ? nivel != tipo : nivel < tipo)
ETagMPI
Define as tags MPI para comunicação entre processos.
EOperacao
Define o sentido da operação de entrada/saída de dados.
@ IND_TEMPO
tempo em milisegundos consumidos
@ IND_ITERACOES
número de iterações consumidas
@ IND_PROCURA
Marcador para permitir a extensão do enum em subclasses.
@ IND_RESULTADO
resultado do algoritmo
struct SResultado TResultado
ENivelDebug
Níveis de detalhamento para debug.
@ PASSOS
Exibe passos intermediários.
@ EXTRA_DEBUG
Nível extra para debug muito detalhado (uso interno).
@ ATIVIDADE
Apenas eventos principais.
@ COMPLETO
Mostra toda a execução detalhadamente.
@ NADA
Sem informações de debug.
@ DETALHE
Debug detalhada sobre estados e decisões.
struct SParametro TParametro
Estrutura para registo de um parâmetro.
ECronometro
Define os tipos de contadores de cronômetro.
@ CONT_NUMERO
Número de contadores disponíveis.
@ CONT_TESTE
Tempo total do teste (todas as execuções)
@ CONT_REPORTE
Tempo entre mensagens durante o teste.
@ CONT_CHECKPOINT
Tempo entre checkpoints ou estados internos.
@ CONT_ALGORITMO
Tempo da execução do algoritmo por instância.
@ CONT_FINALIZACAO
Tempo de encerramento/exportação.
@ CONT_PREPARACAO
Tempo de inicialização antes do teste.
EParametrosProcura
Identifica um parâmetro específico no código.
@ ALGORITMO
Algoritmo base a executar.
@ LIMITE_ITERACOES
Número máximo de iterações (0 significa sem limite).
@ SEMENTE
Semente aleatória para inicializar a sequência de números pseudo-aleatórios.
@ NIVEL_DEBUG
Nível de debug, de reduzido a completo.
@ PARAMETROS_PROCURA
Marcador para permitir a extensão do enum em subclasses.
@ LIMITE_TEMPO
Tempo limite em segundos.
struct SIndicador TIndicador
Vetor dinâmico genérico com operações de pilha, conjuntos e algoritmos úteis.
Classe base para todas as procuras.
virtual void MostrarSolucao()
definir para visualizar a solução
static bool memoriaEsgotada
Flag indicando problemas de memória esgotada.
virtual void Debug(bool completo=true)
Mostra o estado no ecrã, para debug.
int Parametro(int id) const
virtual int ExecutaAlgoritmo()
Executa o algoritmo com os parametros atuais.
static int Dominio(int &variavel, int min=INT_MIN, int max=INT_MAX)
Limita o domínio de um parâmetro inteiro.
static int modoMPI
Modo MPI.
static char * NovoTexto(const char *prompt)
virtual void Inicializar(void)
Coloca o objecto no estado inicial da procura.
virtual void TesteEmpiricoTrabalhador(TVector< int > instancias, char *ficheiro=NULL)
Teste empírico com modo mestre-escravo (este é o escravo)
static TVector< TVector< int > > configuracoes
Conjuntos de configurações para teste empírico.
static int resultado
Resultado retornado pelo algoritmo na última execução.
void BarraTorneio(bool nomes)
Mostra a barra de progresso ou nomes do torneio.
void ExecutaTarefa(TVector< TResultado > &resultados, int inst, int conf)
Executa uma tarefa num teste empírico.
void MostrarTorneio(TVector< TVector< int > > &torneio, bool jogo=false)
Mostra os resultados do torneio.
static int mpiID
MPI - rank do processo.
void MostrarConfiguracoes(int detalhe, int atual=-1)
Mostra as configurações disponíveis.
virtual int64_t Indicador(int id)
Retorna um indicador, após a execução do algoritmo.
static char * MostraTempo(double segundos)
Mostra tempo num formato humano.
TVector< TResultado > ExtrairConfiguracao(TVector< TResultado > &resultados, int configuracao)
Extrai resultados de uma determinada configuração.
static bool Debug(ENivelDebug tipo, bool exato, const char *fmt,...)
Mostra uma informação de debug, se o nível de debug for suficiente.
static int iteracoes
Número total de iterações realizadas na última execução.
static void FinalizaMPI()
Finaliza o ambiente MPI, se aplicável.
virtual void TesteManual(const char *nome)
Inicializa a interação com o utilizador.
static char ficheiroInstancia[256]
nome do ficheiro de uma instância - editado pelo utilizador (utilizar como prefixo, concatenando com ID...
int NovaConfiguracao(TVector< int > ¶metros)
Adiciona uma nova configuração se ainda não existir.
void InserirConfiguracoes(char *str, TVector< int > &base)
Insere configurações a partir de uma string.
TVector< int > SolicitaInstancias()
Solicita ao utilizador uma lista de instâncias.
virtual void ResetParametros()
Inicializa os parametros, indicadores e instâncias.
void MostraParametros(int detalhe=1, TVector< int > *idParametros=NULL)
Mostra os parâmetros atuais.
virtual bool Parar(void)
Verifica se a procura deve ser interrompida.
bool ParametroAtivo(int id, TVector< int > *valores=NULL) const
virtual void ExecucaoTerminada()
Chamar após a execução do algoritmo. Grava o tempo consumido.
void MostraRelatorio(TVector< TResultado > &resultados, bool ultimo=false)
Mostra um relatório dos resultados.
bool EditarIndicadores()
Permite ao utilizador editar os indicadores a utilizar.
static int mpiCount
MPI - número de processos.
static void InicializaMPI(int argc, char *argv[])
Inicializa o ambiente MPI, se aplicável.
static int NovoValor(const char *prompt)
void MostraIndicadores()
Mostra os indicadores definidos.
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 ...
bool JuntarCSV(const char *ficheiro)
Juntar ficheiros CSV gerados por diferentes processos MPI em um único ficheiro.
virtual void main(int argc, char *argv[], const char *nome)
Inicializa a interação com o utilizador.
static clock_t instanteFinal
Instante final (deadline) da corrida atual.
void EditarParametros()
Permite ao utilizador editar os parâmetros.
bool RelatorioCSV(TVector< TResultado > &resultados, char *ficheiro)
Gera um relatório CSV com os resultados.
void DebugTabela(ENivelDebug nivel, TVector< int >tabela, const char *tipo="")
Mostra uma tabela de inteiros, 10 elementos por linha, apenas se o nível de debug for igual ou superior...
int MelhorResultado(TResultado base, TResultado alternativa)
Compara dois resultados para determinar o melhor.
virtual void Explorar()
definir para explorar manualmente os dados (não definido em TProcura, apenas em TProcuraConstrutiva)
void CalculaTorneio(TVector< TResultado > &resultados)
Calcula o torneio entre várias configurações.
void ConfiguracaoAtual(TVector< int > ¶metros, int operacao)
Grava ou lê a configuração atual.
static TVector< int > indAtivo
static TParametro instancia
ID da instância atual, a ser utilizado em SolucaoVazia().
virtual TVector< int64_t > CodificarSolucao()
retorna um vetor de inteiros com a codificação da solução (esta codificação será adicionada aos indicadores,...
void InserirRegisto(TVector< TResultado > &resultados, int inst, int conf)
Insere um novo registo de resultados.
static TVector< TParametro > parametro
Parâmetros a serem utilizados na configuração atual.
static double Cronometro(enum ECronometro id=CONT_ALGORITMO, bool inicialiar=false)
retorna o tempo em segundos desde que o cronómetro foi inicializado
void AjudaUtilizacao(const char *programa)
Mostra ajuda de utilização do programa.
void EditarConfiguracoes()
Permite ao utilizador editar as configurações.
int64_t Registo(TResultado &resultado, int id)
Procura um registo com determinado id.
virtual void LimparEstatisticas()
Chapar antes da execução do algoritmo. Limpa valores estatísticos, e fixa o instante limite de tempo para...
virtual void TesteEmpirico(TVector< int > instancias, char *ficheiro=NULL)
Executa testes empíricos, em todas as configurações guardadas, nas instâncias selecionadas.
void SolicitaInstancia()
Solicita ao utilizador o ID da instância a utilizar, permitindo alterar também o prefixo do ficheiro.
static double tempo
tempo consumido na última execução.
virtual void TesteEmpiricoGestor(TVector< int > instancias, char *ficheiro=NULL)
Teste empírico com modo mestre-escravo (este é o mestre)
int indice
indice onde aparece o indicador nos resultados, c.c. -1 para não aparecer
const char * nome
nome do indicador
const char * descricao
descrição do indicador, opcional
Estrutura para registo de um parâmetro.
const char * descricao
descrição do parametro, opcional
TVector< int > dependencia
dependência (indice do parametro, seguido de valores permitidos) - vazio não tem dependência
int valor
valor do parametro
const char * nome
nome do parametro, opcional mas aconselhado nos parâmetros específicos
int max
valor máximo que o parametro pode tomar
const char ** nomeValores
Nome associado a cada valor do parâmetro, útil para variáveis categóricas.
int min
valor mínimo que o parametro pode tomar