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 Class Reference

Classe base para todas as procuras. More...

#include <TProcura.h>

Inheritance diagram for TProcura:
Collaboration diagram for TProcura:

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 int64_t Indicador (int id)
 Retorna um indicador, após a execução do algoritmo.
 
virtual void Debug (bool completo=true)
 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, char *ficheiro=NULL)
 Executa testes empíricos, em todas as configurações guardadas, nas instâncias selecionadas.
 
virtual void TesteEmpiricoGestor (TVector< int > instancias, char *ficheiro=NULL)
 Teste empírico com modo mestre-escravo (este é o mestre)
 
virtual void TesteEmpiricoTrabalhador (TVector< int > instancias, char *ficheiro=NULL)
 Teste empírico com modo mestre-escravo (este é o escravo)
 
virtual void main (int argc, char *argv[], const char *nome)
 Inicializa a interação com o utilizador.
 
virtual void LimparEstatisticas ()
 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 ()
 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< int64_tCodificarSolucao ()
 retorna um vetor de inteiros com a codificação da solução (esta codificação será adicionada aos indicadores, no ficheiro CSV de resultados)
 
bool TempoExcedido ()
 
bool IteracoesExcedido ()
 
int Parametro (int id) const
 
intParametro (int id)
 
bool ParametroAtivo (int id, TVector< int > *valores=NULL) const
 

Static Public Member Functions

static int NovoValor (const char *prompt)
 
static charNovoTexto (const char *prompt)
 
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 charMostraTempo (double segundos)
 Mostra tempo num formato humano.
 

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< TParametroparametro
 Parâmetros a serem utilizados na configuração atual.
 
static TVector< TIndicadorindicador
 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< intindAtivo
 
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 double 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.
 
static int mpiID = 0
 MPI - rank do processo.
 
static int mpiCount = 1
 MPI - número de processos.
 
static int modoMPI = 0
 Modo MPI.
 

Protected Member Functions

void ExecutaTarefa (TVector< TResultado > &resultados, int inst, int conf)
 Executa uma tarefa num teste empírico.
 
void InserirRegisto (TVector< TResultado > &resultados, int inst, int conf)
 Insere um novo registo de resultados.
 
int64_t Registo (TResultado &resultado, int id)
 Procura um registo com determinado id.
 
void Registo (TResultado &resultado, int id, int64_t 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 > &parametros, int operacao)
 Grava ou lê a configuração atual.
 
int NovaConfiguracao (TVector< int > &parametros)
 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< TResultadoExtrairConfiguracao (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< intSolicitaInstancias ()
 Solicita ao utilizador uma lista de instâncias.
 
bool RelatorioCSV (TVector< TResultado > &resultados, char *ficheiro)
 Gera um relatório CSV com os resultados.
 
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.
 
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.
 
bool JuntarCSV (const char *ficheiro)
 Juntar ficheiros CSV gerados por diferentes processos MPI em um único ficheiro.
 

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.
 
static void InicializaMPI (int argc, char *argv[])
 Inicializa o ambiente MPI, se aplicável.
 
static void FinalizaMPI ()
 Finaliza o ambiente MPI, se aplicável.
 
static double Cronometro (enum ECronometro id=CONT_ALGORITMO, bool inicialiar=false)
 retorna o tempo em segundos desde que o cronómetro foi inicializado
 

Detailed Description

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 178 of file TProcura.h.

Constructor & Destructor Documentation

◆ TProcura()

TProcura::TProcura ( void  )
inline

Definition at line 181 of file TProcura.h.

◆ ~TProcura()

virtual TProcura::~TProcura ( void  )
inlinevirtual

Definition at line 182 of file TProcura.h.

Member Function Documentation

◆ AjudaUtilizacao()

void TProcura::AjudaUtilizacao ( const char programa)
protected

Mostra ajuda de utilização do programa.

Parameters
programaNome do programa.

Definition at line 892 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ BarraTorneio()

void TProcura::BarraTorneio ( bool  nomes)
protected

Mostra a barra de progresso ou nomes do torneio.

Parameters
nomesSe true, mostra nomes; caso contrário, mostra progresso.

Definition at line 1106 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CalculaTorneio()

void TProcura::CalculaTorneio ( TVector< TResultado > &  resultados)
protected

Calcula o torneio entre várias configurações.

Parameters
resultadosVetor de resultados a comparar.

Definition at line 1032 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CodificarSolucao()

virtual TVector< int64_t > TProcura::CodificarSolucao ( )
inlinevirtual

retorna um vetor de inteiros com a codificação da solução (esta codificação será adicionada aos indicadores, no ficheiro CSV de resultados)

Definition at line 472 of file TProcura.h.

Here is the caller graph for this function:

◆ ConfiguracaoAtual()

void TProcura::ConfiguracaoAtual ( TVector< int > &  parametros,
int  operacao 
)
protected

Grava ou lê a configuração atual.

Parameters
parametrosVetor de parâmetros.
operacaoTipo de operação (gravar ou ler).

Definition at line 269 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Cronometro()

static double TProcura::Cronometro ( enum ECronometro  id = CONT_ALGORITMO,
bool  inicialiar = false 
)
inlinestaticprotected

retorna o tempo em segundos desde que o cronómetro foi inicializado

Definition at line 750 of file TProcura.h.

Here is the caller graph for this function:

◆ Debug() [1/2]

void TProcura::Debug ( bool  completo = true)
virtual

Mostra o estado no ecrã, para debug.

Note
Redefinição opcional. Necessário para visualizar a procura, e explorar o espaço manualmente.

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.

Note
Antes de cada linha, chame a função NovaLinha(). Dependendo do contexto, NovaLinha() pode imprimir caracteres que representam os ramos da árvore de procura, criando uma visualização textual que simula a estrutura da procura.
A exibição do estado pode variar conforme o nível de debug definido em Parametro(NIVEL_DEBUG). Um nível menor pode mostrar informações mais sucintas, enquanto um nível maior pode detalhar todas as variáveis do estado.
See also
NovaLinha()
void CSubProblema::Debug(bool completo) // refazer comentários....
{
NovaLinha();
// neste exemplo o estado é apenas um número
printf("--<([%d])>--", variavel); // versão compacta do estado
else {
// versão mais elaborada do estado
}
}
@ ATIVIDADE
Apenas eventos principais.
Definition TProcura.h:64
@ NIVEL_DEBUG
Nível de debug, de reduzido a completo.
Definition TProcura.h:43
int Parametro(int id) const
Definition TProcura.h:522
static int resultado
Resultado retornado pelo algoritmo na última execução.
Definition TProcura.h:493

Reimplemented in COitoDamasCI, COitoDamasCP, CParticaoCB, TCodificacaoBinaria, TCodificacaoInteira, TCodificacaoPermutacao, TCodificacaoReal, CTesteTVector, CJogoDoGalo, CJogoEmLinha, CAspirador, COitoDamas, CParticao, CProblemaArtificial, CPuzzle8, TCodificacaoBinaria, TCodificacaoInteira, TCodificacaoPermutacao, TCodificacaoReal, COitoDamas, CParticao, CProblemaArtificial, and CTesteTVector.

Definition at line 93 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Debug() [2/2]

static bool TProcura::Debug ( ENivelDebug  tipo,
bool  exato,
const char fmt,
  ... 
)
inlinestatic

Mostra uma informação de debug, se o nível de debug for suficiente.

Parameters
tipoNível de detalhe necessário para exibir a mensagem.
exatoSe true, só imprime se o nível de debug for exatamente igual a tipo. Se false, imprime se for >= tipo.
fmtFormato da mensagem, como no printf.
Returns
true se a mensagem foi impressa, false caso contrário.
Note
Pode ser usado com || para encadear mensagens de diferentes níveis, imprimindo apenas a primeira que corresponda ao nível de debug atual.
// Exemplo: tenta imprimir no nível passos, senão no detalhe
Debug(passos, true, "\nPasso %d", iteracoes) ||
Debug(detalhe, false, "\nPasso %d | Melhor custo: %d", iteracoes, custo) ||
virtual void Debug(bool completo=true)
Mostra o estado no ecrã, para debug.
Definition TProcura.cpp:93
static int iteracoes
Número total de iterações realizadas na última execução.
Definition TProcura.h:497

Definition at line 550 of file TProcura.h.

◆ DebugTabela()

void TProcura::DebugTabela ( ENivelDebug  nivel,
TVector< int tabela,
const char tipo = "" 
)
protected

Mostra uma tabela de inteiros, 10 elementos por linha, apenas se o nível de debug for igual ou superior.

Definition at line 1231 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Dominio()

int TProcura::Dominio ( int variavel,
int  min = INT_MIN,
int  max = INT_MAX 
)
staticprotected

Limita o domínio de um parâmetro inteiro.

Parameters
variavelVariável a limitar.
minValor mínimo permitido.
maxValor máximo permitido.
Returns
Valor ajustado dentro do domínio.

Definition at line 1203 of file TProcura.cpp.

Here is the caller graph for this function:

◆ EditarConfiguracoes()

void TProcura::EditarConfiguracoes ( )
protected

Permite ao utilizador editar as configurações.

Definition at line 350 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ EditarIndicadores()

bool TProcura::EditarIndicadores ( )
protected

Permite ao utilizador editar os indicadores a utilizar.

Returns
true se alterou indicadores, false caso contrário.

Definition at line 193 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ EditarParametros()

void TProcura::EditarParametros ( )
protected

Permite ao utilizador editar os parâmetros.

Definition at line 221 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ExecucaoTerminada()

void TProcura::ExecucaoTerminada ( )
virtual

Chamar após a execução do algoritmo. Grava o tempo consumido.

Reimplemented in TProcuraConstrutiva.

Definition at line 1140 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ExecutaAlgoritmo()

virtual int TProcura::ExecutaAlgoritmo ( )
inlinevirtual

Executa o algoritmo com os parametros atuais.

Note
Redefinição necessária

No caso de adicionar algum algoritmo, chame o algoritmo com base em Parametro(ALGORITMO) 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 220 of file TProcura.h.

Here is the caller graph for this function:

◆ ExecutaTarefa()

void TProcura::ExecutaTarefa ( TVector< TResultado > &  resultados,
int  inst,
int  conf 
)
protected

Executa uma tarefa num teste empírico.

Parameters
resultadosVetor onde inserir o resultado.
instID da instância.
confID da configuração.

Definition at line 764 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Explorar()

virtual void TProcura::Explorar ( )
inlinevirtual

definir para explorar manualmente os dados (não definido em TProcura, apenas em TProcuraConstrutiva)

Reimplemented in TProcuraConstrutiva, and TProcuraMelhorativa.

Definition at line 468 of file TProcura.h.

Here is the caller graph for this function:

◆ ExtrairConfiguracao()

TVector< TResultado > TProcura::ExtrairConfiguracao ( TVector< TResultado > &  resultados,
int  configuracao 
)
protected

Extrai resultados de uma determinada configuração.

Parameters
resultadosVetor de resultados.
configuracaoÍndice da configuração.
Returns
Vetor com os resultados extraídos.

Definition at line 1097 of file TProcura.cpp.

Here is the caller graph for this function:

◆ FinalizaMPI()

void TProcura::FinalizaMPI ( )
staticprotected

Finaliza o ambiente MPI, se aplicável.

Definition at line 1222 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Indicador()

int64_t TProcura::Indicador ( int  id)
virtual

Retorna um indicador, após a execução do algoritmo.

Note
Obrigatória a redefinição no caso de serem definidos indicadores na subclasse

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.

Note
Um indicador pode ser uma verificação da solução, ou qualquer outro procedimento que executa após o algoritmo, não sendo o tempo de execução contabgilizado no algoritmo.
See also
ResetParametros()
int64_t CSubProblema::Indicador(int id)
{
if(id == indicador-da-subclasse) {
// calcular indicador
return resultado;
}
return TProcura::Indicador(id);
}
virtual int64_t Indicador(int id)
Retorna um indicador, após a execução do algoritmo.
Definition TProcura.cpp:80
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:488

Reimplemented in CTesteTVector, TProcuraConstrutiva, and TProcuraMelhorativa.

Definition at line 80 of file TProcura.cpp.

Here is the caller graph for this function:

◆ InicializaMPI()

void TProcura::InicializaMPI ( int  argc,
char argv[] 
)
staticprotected

Inicializa o ambiente MPI, se aplicável.

Definition at line 1211 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Inicializar()

virtual void TProcura::Inicializar ( void  )
inlinevirtual

Coloca o objecto no estado inicial da procura.

Note
Obrigatória a redefinição.

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.

Note
A variável instancia.valor, tem o ID da instância que deve ser carregada.
void CSubProblema::Inicializar(void)
{
// acertar as variáveis estáticas, com a instância (ID: instancia.valor)
CarregaInstancia(); // exemplo de método em CSubProblema para carregar uma instância
// pode/deve utilizar variável "ficheiroInstancia" concatenado com instancia.valor, com o ID da instância
// inicializar todas as variáveis de estado
variavel = 0;
// Determinar o tamanho máximo do estado codificado, se aplicável
tamanhoCodificado = 1;
}
virtual void Inicializar(void)
Coloca o objecto no estado inicial da procura.
Definition TProcura.h:209

Reimplemented in CJogoDoGalo, CJogoEmLinha, CAspirador, COitoDamas, CParticao, CProblemaArtificial, CPuzzle8, COitoDamas, COitoDamasCI, COitoDamasCP, CParticao, CParticaoCB, CProblemaArtificial, TProcuraMelhorativa, CTesteTVector, TProcuraConstrutiva, TCodificacaoBinaria, TCodificacaoInteira, TCodificacaoPermutacao, and TCodificacaoReal.

Definition at line 209 of file TProcura.h.

Here is the caller graph for this function:

◆ InserirConfiguracoes() [1/2]

void TProcura::InserirConfiguracoes ( char str,
TVector< int > &  base 
)
protected

Insere configurações a partir de uma string.

Parameters
strString com as configurações.
baseVetor base para inserção.

Definition at line 394 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ InserirConfiguracoes() [2/2]

void TProcura::InserirConfiguracoes ( TVector< int > &  base,
TVector< int > &  produto,
TVector< TVector< int > > &  valores 
)
protected

Insere configurações gerando o produto cartesiano de valores.

Parameters
baseVetor base.
produtoVetor para resultados.
valoresVetor de vetores de valores possíveis.

Definition at line 446 of file TProcura.cpp.

Here is the call graph for this function:

◆ InserirRegisto()

void TProcura::InserirRegisto ( TVector< TResultado > &  resultados,
int  inst,
int  conf 
)
protected

Insere um novo registo de resultados.

Parameters
resultadosVetor onde inserir o resultado.
instID da instância.
confID da configuração.

Definition at line 313 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IteracoesExcedido()

bool TProcura::IteracoesExcedido ( )
inline

Definition at line 513 of file TProcura.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ JuntarCSV()

bool TProcura::JuntarCSV ( const char ficheiro)
protected

Juntar ficheiros CSV gerados por diferentes processos MPI em um único ficheiro.

Definition at line 1246 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LimparEstatisticas()

void TProcura::LimparEstatisticas ( )
virtual

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 99 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ main()

void TProcura::main ( int  argc,
char argv[],
const char nome 
)
virtual

Inicializa a interação com o utilizador.

Note
Redefinição opcional

Esta função arranca com o teste manual, orientada para o programador. A interface permite:

  • visualizar e trocar de instância
  • explorar o espaço de estados nessa instancia, executando ações
  • ver um caminho que esteja gravado (por exploração manual ou por execução de um algoritmo)
  • ver e editar qualquer parametro de execução
  • o algoritmo é também um parametro, podendo naturalmente ser alterado
  • há parametros sobre limites de execução, informação de debug, opções de implementação e opções de algoritmos
  • executar o algoritmo com a configuração atual
  • adicionar a configuração atual a um conjunto de configurações de teste
  • executar um teste empírico, executando todas as configurações de teste, no conjunto de instâncias selecionadas
Note
Esta função deve ser o ponto de entrada, a executar no main, caso não se utilize a função TProcura::main().
See also
TParametro, TesteManual
// exemplo do main, processando argumentos (ver TProcura::TesteManual)
int main(int argc, char* argv[])
{
std::locale::global(std::locale(""));
CSubProblema().main(argc, argv, "SubProblema");
}
virtual void main(int argc, char *argv[], const char *nome)
Inicializa a interação com o utilizador.
Definition TProcura.cpp:804

Definition at line 804 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MelhorResultado()

int TProcura::MelhorResultado ( TResultado  base,
TResultado  alternativa 
)
protected

Compara dois resultados para determinar o melhor.

Parameters
baseResultado base.
alternativaResultado alternativo.
Returns
Índice do melhor resultado.

Definition at line 1117 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MostraIndicadores()

void TProcura::MostraIndicadores ( )
protected

Mostra os indicadores definidos.

Definition at line 1053 of file TProcura.cpp.

Here is the caller graph for this function:

◆ MostraParametros()

void TProcura::MostraParametros ( int  detalhe = 1,
TVector< int > *  idParametros = NULL 
)
protected

Mostra os parâmetros atuais.

Parameters
detalheNível de detalhe na apresentação.
idParametrosVetor de IDs de parâmetros a mostrar (opcional).

Definition at line 159 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MostrarConfiguracoes()

void TProcura::MostrarConfiguracoes ( int  detalhe,
int  atual = -1 
)
protected

Mostra as configurações disponíveis.

Parameters
detalheNível de detalhe.
atualÍndice da configuração atual (opcional).

Definition at line 468 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MostraRelatorio()

void TProcura::MostraRelatorio ( TVector< TResultado > &  resultados,
bool  ultimo = false 
)
protected

Mostra um relatório dos resultados.

Parameters
resultadosVetor de resultados a apresentar.
ultimoIndica se é o último relatório (opcional).

Definition at line 966 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MostrarSolucao()

void TProcura::MostrarSolucao ( void  )
virtual

definir para visualizar a solução

Reimplemented in COitoDamas, CParticao, CPuzzle8, TProcuraConstrutiva, COitoDamas, and CParticao.

Definition at line 1149 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MostrarTorneio()

void TProcura::MostrarTorneio ( TVector< TVector< int > > &  torneio,
bool  jogo = false 
)
protected

Mostra os resultados do torneio.

Parameters
torneioMatriz de resultados do torneio.
jogoIndica se é modo de jogo ou apenas comparação.

Definition at line 1067 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MostraTempo()

char * TProcura::MostraTempo ( double  segundos)
static

Mostra tempo num formato humano.

Definition at line 281 of file TProcura.cpp.

Here is the caller graph for this function:

◆ NovaConfiguracao()

int TProcura::NovaConfiguracao ( TVector< int > &  parametros)
protected

Adiciona uma nova configuração se ainda não existir.

Parameters
parametrosVetor de parâmetros.
Returns
Índice da nova configuração.

Definition at line 252 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ NovoTexto()

char * TProcura::NovoTexto ( const char prompt)
static

Definition at line 1168 of file TProcura.cpp.

Here is the caller graph for this function:

◆ NovoValor()

int TProcura::NovoValor ( const char prompt)
static

Definition at line 1158 of file TProcura.cpp.

Here is the caller graph for this function:

◆ Parametro() [1/2]

int & TProcura::Parametro ( int  id)
inline

Definition at line 523 of file TProcura.h.

◆ Parametro() [2/2]

int TProcura::Parametro ( int  id) const
inline

Definition at line 522 of file TProcura.h.

◆ ParametroAtivo()

bool TProcura::ParametroAtivo ( int  id,
TVector< int > *  valores = NULL 
) const
inline

Definition at line 524 of file TProcura.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Parar()

virtual bool TProcura::Parar ( void  )
inlinevirtual

Verifica se a procura deve ser interrompida.

Note
A redefinição é opcional e deve ser feita apenas se houver necessidade de critérios de paragem adicionais, além dos já estabelecidos.
Returns
Retorna verdadeiro se a procura deve parar de imediato

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.

Note
Redefinir apenas se o critério de paragem não puder ser contemplado nestes pontos.
Esta função deve manter a eficiência elevada, dado que é chamada em ciclos internos dos algoritmos de procura.
bool CSubProblema::Parar(void) {
return TProcura::Parar() || CriterioParagem(); // critério de paragem definido em CSubProblema
}
virtual bool Parar(void)
Verifica se a procura deve ser interrompida.
Definition TProcura.h:363

Reimplemented in TProcuraMelhorativa.

Definition at line 363 of file TProcura.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Registo() [1/2]

int64_t TProcura::Registo ( TResultado resultado,
int  id 
)
protected

Procura um registo com determinado id.

Parameters
resultadoVetor de resultados.
idID a procurar.
Returns
Índice do registo, ou -1 se não encontrado.

Definition at line 322 of file TProcura.cpp.

Here is the caller graph for this function:

◆ Registo() [2/2]

void TProcura::Registo ( TResultado resultado,
int  id,
int64_t  valor 
)
protected

Atualiza o valor de um registo.

Parameters
resultadoReferência ao resultado a atualizar.
idID do valor.
valorNovo valor a atribuir.

Definition at line 329 of file TProcura.cpp.

◆ RelatorioCSV()

bool TProcura::RelatorioCSV ( TVector< TResultado > &  resultados,
char ficheiro 
)
protected

Gera um relatório CSV com os resultados.

Parameters
resultadosVetor de resultados.
fPonteiro para o ficheiro onde gravar.

Definition at line 915 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ResetParametros()

void TProcura::ResetParametros ( )
virtual

Inicializa os parametros, indicadores e instâncias.

Note
Redefinição necessária, para pelo menos indicar as instâncias existentes

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.

Note
Na criação de um novo parametro, dar uma estrutura TParametro.
Ao adicionar novos parâmetros, é recomendável manter a enumeração sincronizada com a da superclasse. O primeiro elemento deve ser parametrosConstrutivos, garantindo que novas adições na superclasse sejam automaticamente refletidas aqui.
A instância selecionada irá ser carregada em Inicializar(), utilizando o valor atual.
See also
TParametro

Exemplo com a alteração do valor de omissão de um parametro, e adição de dois novos parametros.

// continuação da enumeração EParametrosProcujra
void CSubProblema::ResetParametros(void)
{
static const char* nomesSuc[] = { "todas", "contributo" }; // nomes para os valores de opcaoSuc
// chamar primeiro o método na superclasse
// neste exemplo considerou-se que se pretende ver algum debug, de omissão
// novo parametro para utilizar na função Heuristica()
parametro += { "Opção Heurística", 0,0,10,
"explicação do que acontece na heuristica, com este parametro entre 0 e 10",NULL };
// novo parametro para utilizar na função Sucessores()
parametro += { "Opção Sucessores", 0,0,1,
"0 gera todas as ações; 1 gera apenas ações que tenham um contributo para a solução.",nomesSuc };
// novo indicador
indicador += { "Ordenado","verifica se um vetor está ordenado", indOrdenar };
indAtivo += indOrdenar; // adicionar aos indicadores ativos de omissão
// indicar que há 10 instâncias, sendo a instância inicial a 1
instancia = { "Problema", 1,1,10, "Características dos problemas", NULL };
}
virtual void ResetParametros()
Inicializa os parametros, indicadores e instâncias.
Definition TProcura.cpp:47
static TVector< int > indAtivo
Definition TProcura.h:489
static TParametro instancia
ID da instância atual, a ser utilizado em SolucaoVazia().
Definition TProcura.h:24
static TVector< TParametro > parametro
Parâmetros a serem utilizados na configuração atual.
Definition TProcura.h:485

Reimplemented in CJogoEmLinha, TProcuraAdversa, CAspirador, COitoDamas, CParticao, CProblemaArtificial, CPuzzle8, TCodificacaoBinaria, TCodificacaoInteira, TCodificacaoPermutacao, TCodificacaoReal, COitoDamas, COitoDamasCI, COitoDamasCP, CParticaoCB, CProblemaArtificial, CTesteTVector, TProcuraConstrutiva, and TProcuraMelhorativa.

Definition at line 47 of file TProcura.cpp.

Here is the caller graph for this function:

◆ SolicitaInstancia()

void TProcura::SolicitaInstancia ( )
protected

Solicita ao utilizador o ID da instância a utilizar, permitindo alterar também o prefixo do ficheiro.

Definition at line 1176 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SolicitaInstancias()

TVector< int > TProcura::SolicitaInstancias ( )
protected

Solicita ao utilizador uma lista de instâncias.

Returns
Vetor com IDs das instâncias selecionadas.

Definition at line 335 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ TempoExcedido()

bool TProcura::TempoExcedido ( )
inline

Definition at line 512 of file TProcura.h.

Here is the caller graph for this function:

◆ TesteEmpirico()

void TProcura::TesteEmpirico ( TVector< int instancias,
char ficheiro = NULL 
)
virtual

Executa testes empíricos, em todas as configurações guardadas, nas instâncias selecionadas.

Note
Redefinição não é necessária
Parameters
instancias- IDs das instâncias a serem utilizadas
ficheiro- nome do ficheiro com os resultados, caso exista

Esta função é chamada de TesteManual() para executar testes empíricos. A função apresenta-se como método virtual, atendendo a que é redefinida nas procuras adversas. É genérica e não se prevê outras situações que seja necessário redefini-la.

Note
o parametro NIVEL_DEBUG controla a quantidade de informação que é mostrada relativamente às tarefas, sendo colocado com o valor NADA para a execução do algoritmo
Pode ser chamada diretamente do código, e nesse caso é necessário que a variável estática 'configuracoes' tenha as configurações em teste. Se 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.
See also
TesteManual()

Definition at line 498 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ TesteEmpiricoGestor()

void TProcura::TesteEmpiricoGestor ( TVector< int instancias,
char ficheiro = NULL 
)
virtual

Teste empírico com modo mestre-escravo (este é o mestre)

Definition at line 579 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ TesteEmpiricoTrabalhador()

void TProcura::TesteEmpiricoTrabalhador ( TVector< int instancias,
char ficheiro = NULL 
)
virtual

Teste empírico com modo mestre-escravo (este é o escravo)

Definition at line 714 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ TesteManual()

void TProcura::TesteManual ( const char nome)
virtual

Inicializa a interação com o utilizador.

Note
Redefinição opcional

Esta função arranca com o teste manual, orientada para o programador. A interface permite:

  • visualizar e trocar de instância
  • explorar o espaço de estados nessa instancia, executando ações
  • ver um caminho que esteja gravado (por exploração manual ou por execução de um algoritmo)
  • ver e editar qualquer parametro de execução
  • o algoritmo é também um parametro, podendo naturalmente ser alterado
  • há parametros sobre limites de execução, informação de debug, opções de implementação e opções de algoritmos
  • executar o algoritmo com a configuração atual
  • adicionar a configuração atual a um conjunto de configurações de teste
  • executar um teste empírico, executando todas as configurações de teste, no conjunto de instâncias selecionadas
Note
Esta função deve ser o ponto de entrada, a executar no main, caso não se utilize a função TProcura::main().
See also
TParametro, main
void CSubProblema::TesteManual(const char* nome)
{
// ações extra antes do teste manual, ou redefinição completa;
TProcura::TesteManual(nome); // chamada do método da superclasse, caso não redefina por completo
}
// exemplo do main, sem processar argumentos (ver TProcura::main)
int main()
{
problema.TesteManual("CSubProblema");
}
virtual void TesteManual(const char *nome)
Inicializa a interação com o utilizador.
Definition TProcura.cpp:110

Reimplemented in CJogoDoGalo, CJogoEmLinha, CParticao, and CProblemaArtificial.

Definition at line 110 of file TProcura.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ configuracoes

TVector< TVector< int > > TProcura::configuracoes
static

Conjuntos de configurações para teste empírico.

Definition at line 491 of file TProcura.h.

◆ ficheiroInstancia

char TProcura::ficheiroInstancia = "instancia_"
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)

See also
Inicializar()

Definition at line 482 of file TProcura.h.

◆ indAtivo

TVector< int > TProcura::indAtivo
static

Definition at line 489 of file TProcura.h.

◆ indicador

TVector< TIndicador > TProcura::indicador
static

Indicadores que podem ser calculados após a execução, quer com informação da instãncia, quer com resultado da última corrida.

See also
Indicador()

Definition at line 488 of file TProcura.h.

◆ instancia

TParametro TProcura::instancia = { NULL,1,1,1, NULL, NULL }
static

ID da instância atual, a ser utilizado em SolucaoVazia().

Definition at line 24 of file TProcura.h.

◆ instanteFinal

clock_t TProcura::instanteFinal = 0
static

Instante final (deadline) da corrida atual.

Definition at line 499 of file TProcura.h.

◆ iteracoes

int TProcura::iteracoes = 0
static

Número total de iterações realizadas na última execução.

Definition at line 497 of file TProcura.h.

◆ memoriaEsgotada

bool TProcura::memoriaEsgotada = false
static

Flag indicando problemas de memória esgotada.

Definition at line 501 of file TProcura.h.

◆ modoMPI

int TProcura::modoMPI = 0
static

Modo MPI.

Note
0 = divisão estática, 1 = mestre-escravo

Definition at line 508 of file TProcura.h.

◆ mpiCount

int TProcura::mpiCount = 1
static

MPI - número de processos.

Definition at line 505 of file TProcura.h.

◆ mpiID

int TProcura::mpiID = 0
static

MPI - rank do processo.

Definition at line 503 of file TProcura.h.

◆ parametro

TVector< TParametro > TProcura::parametro
static

Parâmetros a serem utilizados na configuração atual.

See also
EParametrosConstrutiva

Definition at line 485 of file TProcura.h.

◆ resultado

int TProcura::resultado = 0
static

Resultado retornado pelo algoritmo na última execução.

Definition at line 493 of file TProcura.h.

◆ tempo

double TProcura::tempo = 0
static

tempo consumido na última execução.

Definition at line 495 of file TProcura.h.


The documentation for this class was generated from the following files: