29#define COR_ATIVO_LEVE ""
30#define COR_INATIVO_LEVE ""
34#define COR_LEVE "\x1b[90m"
35#define COR_RESET "\x1b[0m"
36#define COR_ATIVO "\x1b[92m"
37#define COR_INATIVO "\x1b[91m"
38#define COR_ATIVO_LEVE "\x1b[38;5;108m"
39#define COR_INATIVO_LEVE "\x1b[38;5;131m"
325 virtual void Debug(
bool completo =
true);
616 valor = (*valores)[
parametro[id].dependencia.First()];
617 return parametro[id].dependencia.Find(valor,
true, 1) >= 0;
637 if (
exato ? nivel != tipo : nivel < tipo)
664 static void DebugHSL(
float h = -1,
float s = 1.0,
float l = 0.2,
bool fundo =
true);
ETagMPI
Define as tags MPI para comunicação entre processos.
EOperacao
Define o sentido da operação de entrada/saída de dados.
constexpr int RES_INVALIDO
@ IND_TEMPO
tempo em milissegundos 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 (>=0 custo da solução, -1 impossível, -2 não resolvido)
struct SResultado TResultado
constexpr int COR_LEVE_TAM
constexpr int RES_NAO_RESOLVIDO
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.
constexpr int RES_IMPOSSIVEL
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
ECaixaParte
Define as partes de uma caixa de texto para exibição formatada.
Vetor dinâmico genérico com operações de pilha, conjuntos e algoritmos úteis.
Classe para utilizar TProcura em binários externos.
TVector< int64_t > indValores
~TProcuraExecutavel(void)
void ResetParametros()
Reset parâmetros, assumindo variáveis da classe definidas.
int ExecutaAlgoritmo()
Executa o algoritmo e extrai os indicadores.
void Debug(bool completo)
Mostra o estado no ecrã, para debug.
int64_t Indicador(int id)
retorna indicadores após execução
TVector< TString > indPrefixo
TVector< TIndicador > ind
TVector< TString > parPrefixo
TVector< TParametro > par
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.
static void MostraCaixa(TVector< TString > titulo, ECaixaParte parte, TVector< int > largura, bool aberta=true, int identacao=0)
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.
virtual void RelatorioValidacao(TVector< TResultado > resultados, TVector< int > referencias)
static int modoMPI
Modo MPI.
virtual void Inicializar(void)
Coloca o objecto no estado inicial da procura.
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 AjudaUtilizacao(TString programa)
Mostra ajuda de utilização do programa.
void MostrarTorneio(TVector< TVector< int > > &torneio, bool jogo=false)
Mostra os resultados do torneio.
static TString ficheiroInstancia
prefixo do nome ficheiro de uma instância - editado pelo utilizador Caso não seja nulo,...
static int mpiID
MPI - rank do processo.
void MostrarConfiguracoes(int detalhe, int atual=-1)
Mostra as configurações disponíveis.
void MostraParametros(int detalhe=1, TVector< int > *idParametros=NULL, TString titulo="")
Mostra os parâmetros atuais.
virtual int64_t Indicador(int id)
Retorna um indicador, após a execução do algoritmo.
virtual TVector< TString > Solucao()
retorna uma solução no formato do TResultado, para ser gravada em ficheiro de soluções,...
static TString NovoTexto(TString prompt)
static int gravarSolucao
Gravar solução CSV (todas as ações)
static TString ficheiroGravar
prefixo do nome do ficheiro para gravar a instância para ficheiro (terá sido gerada)
TVector< TResultado > ExtrairConfiguracao(TVector< TResultado > &resultados, int configuracao)
Extrai resultados de uma determinada configuração.
virtual void Gravar(void)
void TesteInicio(TVector< int > &instancias, TVector< int > &configAtual)
arranque de teste, auxiliar aos Testes Empíricos
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 TesteValidacao(TVector< int > instancias, TVector< int > impossiveis, TVector< int > referencias, TString fichSolucoes, TString fichResultados="")
Executa testes de validação, executando cada solução na instância respetiva, e verificando a sua vali...
int NovaConfiguracao(TVector< int > ¶metros)
Adiciona uma nova configuração se ainda não existir.
TVector< int > SolicitaInstancias()
Solicita ao utilizador uma lista de instâncias.
virtual void ResetParametros()
Inicializa os parâmetros, indicadores e instâncias.
virtual void TesteEmpiricoTrabalhador(TVector< int > instancias, TString ficheiro="")
Teste empírico com modo mestre-escravo (este é o escravo)
virtual bool Parar(void)
Verifica se a procura deve ser interrompida.
bool JuntarCSV(TString ficheiro)
Juntar ficheiros CSV gerados por diferentes processos MPI em um único ficheiro.
static int NovoValor(TString prompt)
bool ParametroAtivo(int id, TVector< int > *valores=NULL) const
virtual void TesteManual(TString nome)
Inicializa a interação com o utilizador.
static TString MostraTempo(double segundos)
Mostra tempo num formato humano.
virtual void ExecucaoTerminada()
Chamar após a execução do algoritmo. Grava o tempo consumido.
virtual void main(int argc, char *argv[], TString nome)
Inicializa a interação com o utilizador.
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.
void MostraIndicadores()
Mostra os indicadores definidos.
static void Mensagem(TString titulo, const char *fmt,...)
static TVector< TIndicador > indicador
Indicadores que podem ser calculados após a execução, quer com informação da instãncia,...
virtual void TesteEmpiricoGestor(TVector< int > instancias, TString ficheiro="")
Teste empírico com modo mestre-escravo (este é o mestre)
void DebugTabela(ENivelDebug nivel, TVector< int >tabela, TString tipo="", TString prefixo="", int modoCor=0, bool duplaColuna=false)
Mostra uma tabela de inteiros, 10 elementos por linha, apenas se o nível de debug for igual ou superi...
bool RelatorioCSV(TVector< TResultado > &resultados, TString ficheiro, bool parametros=true)
Gera um relatório CSV com os resultados.
virtual bool Validar(TVector< TString > solucao)
Verifica a validade de uma solução para a instância atual.
static clock_t instanteFinal
Instante final (deadline) da corrida atual.
void EditarParametros()
Permite ao utilizador editar os parâmetros.
void InserirConfiguracoes(TString str, TVector< int > &base)
Insere configurações a partir de uma string.
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)
static void DebugHSL(float h=-1, float s=1.0, float l=0.2, bool fundo=true)
Muda a cor (fundo/letra) com HSL.
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 indic...
static double Cronometro(enum ECronometro id=CONT_ALGORITMO, bool inicializar=false)
retorna o tempo em segundos desde que o cronómetro foi inicializado
void InserirRegisto(TVector< TResultado > &resultados, int inst, int conf)
Insere um novo registo de resultados.
virtual void TesteEmpirico(TVector< int > instancias, TString ficheiro="")
Executa testes empíricos, em todas as configurações guardadas, nas instâncias selecionadas.
static TVector< TParametro > parametro
Parâmetros a serem utilizados na configuração atual.
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()
Chamar antes da execução do algoritmo. Limpa valores estatísticos, e fixa o instante limite de tempo ...
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.
static void MostraConjunto(TVector< int > valores, const char *etiqueta)
void srand(unsigned int seed, int seq)
Inicializa a semente da geração pseudo-aleatória.
int indice
indice onde aparece o indicador nos resultados, c.c. -1 para não aparecer
TString nome
nome do indicador
TString descricao
descrição do indicador, opcional
Estrutura para registo de um parâmetro.
TString descricao
descrição do parÂmetro, opcional
TVector< int > dependencia
dependência (indice do parâmetro, seguido de valores permitidos) - vazio não tem dependência
int valor
valor do parâmetro
int max
valor máximo que o parâmetro pode tomar
int min
valor mínimo que o parÂmetro pode tomar
TString nome
nome do parâmetro, opcional mas aconselhado nos parâmetros específicos
TVector< TString > nomeValores
Nome associado a cada valor do parâmetro, útil para variáveis categóricas.
TVector< TString > solucao