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 void Gravar (void)
 
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 parâmetros, indicadores e instâncias.
 
virtual bool Parar (void)
 Verifica se a procura deve ser interrompida.
 
virtual void TesteManual (TString nome)
 Inicializa a interação com o utilizador.
 
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 validade bem como características.
 
virtual void RelatorioValidacao (TVector< TResultado > resultados, TVector< int > referencias)
 
virtual bool Validar (TVector< TString > solucao)
 Verifica a validade de uma solução para a instância atual.
 
virtual void TesteEmpirico (TVector< int > instancias, TString ficheiro="")
 Executa testes empíricos, em todas as configurações guardadas, nas instâncias selecionadas.
 
virtual void TesteEmpiricoGestor (TVector< int > instancias, TString ficheiro="")
 Teste empírico com modo mestre-escravo (este é o mestre)
 
virtual void TesteEmpiricoTrabalhador (TVector< int > instancias, TString ficheiro="")
 Teste empírico com modo mestre-escravo (este é o escravo)
 
virtual void main (int argc, char *argv[], TString nome)
 Inicializa a interação com o utilizador.
 
virtual void LimparEstatisticas ()
 Chamar 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)
 
virtual TVector< TStringSolucao ()
 retorna uma solução no formato do TResultado, para ser gravada em ficheiro de soluções, ou visualizada (pode ser utilizada para mostrar a solução, ou para gravar a solução num formato mais legível)
 
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 (TString prompt)
 
static TString NovoTexto (TString 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 TString MostraTempo (double segundos)
 Mostra tempo num formato humano.
 
static void MostraCaixa (TVector< TString > titulo, ECaixaParte parte, TVector< int > largura, bool aberta=true, int identacao=0)
 
static void MostraCaixa (TString titulo, ECaixaParte parte, int largura=70, bool aberta=true, int identacao=0, const char *icon="")
 
static void MostraCaixa (TVector< TString > textos, int largura=70, bool aberta=true, int identacao=0)
 
static void Mensagem (TString titulo, const char *fmt,...)
 
static void MostraConjunto (TVector< int > valores, const char *etiqueta)
 
static void DebugHSL (float h=-1, float s=1.0, float l=0.2, bool fundo=true)
 Muda a cor (fundo/letra) com HSL.
 

Static Public Attributes

static TParametro instancia = { "",1,1,1 }
 ID da instância atual, a ser utilizado em SolucaoVazia().
 
static TString ficheiroInstancia = ""
 prefixo do nome ficheiro de uma instância - editado pelo utilizador Caso não seja nulo, utilizar como prefixo, concatenando com ID da instância, para obter o ficheiro 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
 
static TString ficheiroGravar = ""
 prefixo do nome do ficheiro para gravar a instância para ficheiro (terá sido gerada)
 
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.
 
static int gravarSolucao = 0
 Gravar solução CSV (todas as ações)
 

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, TString titulo="")
 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, TString ficheiro, bool parametros=true)
 Gera um relatório CSV com os resultados.
 
void InserirConfiguracoes (TString 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 (TString programa)
 Mostra ajuda de utilização do programa.
 
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 superior.
 
bool JuntarCSV (TString ficheiro)
 Juntar ficheiros CSV gerados por diferentes processos MPI em um único ficheiro.
 
void TesteInicio (TVector< int > &instancias, TVector< int > &configAtual)
 arranque de teste, auxiliar aos Testes Empíricos
 
void TesteFim ()
 

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 inicializar=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, permitindo a gestão de parâmetros, indicadores, instâncias e execução de algoritmos.

Observação: Alguns métodos e parâmetros terão efeito apenas se determinados métodos forem redefinidos na subclasse.

Definition at line 217 of file TProcura.h.

Constructor & Destructor Documentation

◆ TProcura()

TProcura::TProcura ( void  )
inline

Definition at line 220 of file TProcura.h.

◆ ~TProcura()

virtual TProcura::~TProcura ( void  )
inlinevirtual

Definition at line 221 of file TProcura.h.

Member Function Documentation

◆ AjudaUtilizacao()

void TProcura::AjudaUtilizacao ( TString  programa)
protected

Mostra ajuda de utilização do programa.

Parameters
programaNome do programa.

Definition at line 1451 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 1705 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 1628 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 551 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 740 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  inicializar = false 
)
inlinestaticprotected

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

Definition at line 854 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:92
@ NIVEL_DEBUG
Nível de debug, de reduzido a completo.
Definition TProcura.h:71
int Parametro(int id) const
Definition TProcura.h:607
static int resultado
Resultado retornado pelo algoritmo na última execução.
Definition TProcura.h:575

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

Definition at line 86 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:86
static int iteracoes
Número total de iterações realizadas na última execução.
Definition TProcura.h:579

Definition at line 635 of file TProcura.h.

◆ DebugHSL()

void TProcura::DebugHSL ( float  h = -1,
float  s = 1.0,
float  l = 0.2,
bool  fundo = true 
)
static

Muda a cor (fundo/letra) com HSL.

Muda a cor (fundo/letra) com HSL (h=0 a 360 saturação, luminosidade)

Parameters
hHue (matiz): 0–360 graus (círculo cromático). Se <0, faz reset.
sSaturação: 0–1 (0 = cinzento, 1 = cor pura).
lLuminosidade: 0–1 (0 = preto, 0.5 = cor normal, 1 = branco).
fundotrue = cor de fundo, false = cor do texto. Valores por omissão: s=1, l=0.2, fundo=true. Chamada sem argumentos faz reset das cores

Definition at line 525 of file TProcura.cpp.

Here is the caller graph for this function:

◆ DebugTabela()

void TProcura::DebugTabela ( ENivelDebug  nivel,
TVector< int tabela,
TString  tipo = "",
TString  prefixo = "",
int  modoCor = 0,
bool  duplaColuna = false 
)
protected

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

Definition at line 1837 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 1813 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 817 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 646 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 674 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 1739 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, CTesteTVector, and TProcuraExecutavel.

Definition at line 262 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 1282 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 547 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 1696 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 1830 of file TProcura.cpp.

Here is the caller graph for this function:

◆ Gravar()

virtual void TProcura::Gravar ( void  )
inlinevirtual

Reimplemented in COitoDamas, CParticao, and CPuzzle8.

Definition at line 251 of file TProcura.h.

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:73
static TVector< TIndicador > indicador
Indicadores que podem ser calculados após a execução, quer com informação da instãncia,...
Definition TProcura.h:570

Reimplemented in CTesteTVector, TProcuraExecutavel, TProcuraConstrutiva, and TProcuraMelhorativa.

Definition at line 73 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 1821 of file TProcura.cpp.

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
}
virtual void Inicializar(void)
Coloca o objecto no estado inicial da procura.
Definition TProcura.h:248

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

Definition at line 248 of file TProcura.h.

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

◆ InserirConfiguracoes() [1/2]

void TProcura::InserirConfiguracoes ( TString  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 862 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 912 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 778 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 598 of file TProcura.h.

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

◆ JuntarCSV()

bool TProcura::JuntarCSV ( TString  ficheiro)
protected

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

Definition at line 1866 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

Chamar 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 92 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[],
TString  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[], TString nome)
Inicializa a interação com o utilizador.

Definition at line 1331 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 1716 of file TProcura.cpp.

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

◆ Mensagem()

void TProcura::Mensagem ( TString  titulo,
const char fmt,
  ... 
)
static

Definition at line 502 of file TProcura.cpp.

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

◆ MostraCaixa() [1/3]

void TProcura::MostraCaixa ( TString  titulo,
ECaixaParte  parte,
int  largura = 70,
bool  aberta = true,
int  identacao = 0,
const char icon = "" 
)
static

Definition at line 430 of file TProcura.cpp.

Here is the call graph for this function:

◆ MostraCaixa() [2/3]

void TProcura::MostraCaixa ( TVector< TString textos,
int  largura = 70,
bool  aberta = true,
int  identacao = 0 
)
static

Definition at line 495 of file TProcura.cpp.

Here is the call graph for this function:

◆ MostraCaixa() [3/3]

void TProcura::MostraCaixa ( TVector< TString titulo,
ECaixaParte  parte,
TVector< int largura,
bool  aberta = true,
int  identacao = 0 
)
static

Definition at line 368 of file TProcura.cpp.

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

◆ MostraConjunto()

void TProcura::MostraConjunto ( TVector< int valores,
const char etiqueta 
)
static

Definition at line 969 of file TProcura.cpp.

Here is the caller graph for this function:

◆ MostraIndicadores()

void TProcura::MostraIndicadores ( )
protected

Mostra os indicadores definidos.

Definition at line 1649 of file TProcura.cpp.

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

◆ MostraParametros()

void TProcura::MostraParametros ( int  detalhe = 1,
TVector< int > *  idParametros = NULL,
TString  titulo = "" 
)
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 553 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 934 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 1539 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 1748 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 1666 of file TProcura.cpp.

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

◆ MostraTempo()

TString TProcura::MostraTempo ( double  segundos)
static

Mostra tempo num formato humano.

Definition at line 752 of file TProcura.cpp.

Here is the call graph for this function:
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 723 of file TProcura.cpp.

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

◆ NovoTexto()

TString TProcura::NovoTexto ( TString  prompt)
static

Definition at line 1768 of file TProcura.cpp.

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

◆ NovoValor()

int TProcura::NovoValor ( TString  prompt)
static

Definition at line 1757 of file TProcura.cpp.

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

◆ Parametro() [1/2]

int & TProcura::Parametro ( int  id)
inline

Definition at line 608 of file TProcura.h.

◆ Parametro() [2/2]

int TProcura::Parametro ( int  id) const
inline

Definition at line 607 of file TProcura.h.

◆ ParametroAtivo()

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

Definition at line 609 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:405

Reimplemented in TProcuraMelhorativa.

Definition at line 405 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 788 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 795 of file TProcura.cpp.

◆ RelatorioCSV()

bool TProcura::RelatorioCSV ( TVector< TResultado > &  resultados,
TString  ficheiro,
bool  parametros = true 
)
protected

Gera um relatório CSV com os resultados.

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

Definition at line 1478 of file TProcura.cpp.

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

◆ RelatorioValidacao()

void TProcura::RelatorioValidacao ( TVector< TResultado resultados,
TVector< int referencias 
)
virtual

Definition at line 293 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 parâmetros, 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 parÂmetros 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 por omissão.

Novos parâmetros podem ser adicionados conforme necessário para atender às particularidades do problema. Estes parâmetros 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 parÂmetros, 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 parâmetro, 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 por omissão de um parâmetro, e adição de dois novos parametros.

// continuação da enumeração EParametrosProcura
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, por omissão
// novo parâmetro 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 parâmetro 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 por 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 parâmetros, indicadores e instâncias.
Definition TProcura.cpp:48
static TVector< int > indAtivo
Definition TProcura.h:571
static TParametro instancia
ID da instância atual, a ser utilizado em SolucaoVazia().
Definition TProcura.h:22
static TVector< TParametro > parametro
Parâmetros a serem utilizados na configuração atual.
Definition TProcura.h:567

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

Definition at line 48 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 1785 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 801 of file TProcura.cpp.

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

◆ Solucao()

virtual TVector< TString > TProcura::Solucao ( )
inlinevirtual

retorna uma solução no formato do TResultado, para ser gravada em ficheiro de soluções, ou visualizada (pode ser utilizada para mostrar a solução, ou para gravar a solução num formato mais legível)

Reimplemented in TProcuraConstrutiva.

Definition at line 553 of file TProcura.h.

Here is the caller graph for this function:

◆ TempoExcedido()

bool TProcura::TempoExcedido ( )
inline

Definition at line 597 of file TProcura.h.

Here is the caller graph for this function:

◆ TesteEmpirico()

void TProcura::TesteEmpirico ( TVector< int instancias,
TString  ficheiro = "" 
)
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 parâmetro 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()

Reimplemented in TProcuraAdversa.

Definition at line 1021 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,
TString  ficheiro = "" 
)
virtual

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

Reimplemented in TProcuraAdversa.

Definition at line 1102 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,
TString  ficheiro = "" 
)
virtual

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

Reimplemented in TProcuraAdversa.

Definition at line 1241 of file TProcura.cpp.

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

◆ TesteFim()

void TProcura::TesteFim ( )
protected

Definition at line 1010 of file TProcura.cpp.

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

◆ TesteInicio()

void TProcura::TesteInicio ( TVector< int > &  instancias,
TVector< int > &  configAtual 
)
protected

arranque de teste, auxiliar aos Testes Empíricos

Definition at line 987 of file TProcura.cpp.

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

◆ TesteManual()

void TProcura::TesteManual ( TString  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 parâmetro de execução
  • o algoritmo é também um parâmetro, podendo naturalmente ser alterado
  • há parâmetros 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(TString nome)
Inicializa a interação com o utilizador.
Definition TProcura.cpp:103

Reimplemented in CJogoEmLinha.

Definition at line 103 of file TProcura.cpp.

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

◆ TesteValidacao()

void TProcura::TesteValidacao ( TVector< int instancias,
TVector< int impossiveis,
TVector< int referencias,
TString  fichSolucoes,
TString  fichResultados = "" 
)
virtual

Executa testes de validação, executando cada solução na instância respetiva, e verificando a sua validade bem como características.

Note
Redefinição opcional, caso seja necessário um processo de validação específico.

Esta função carrega a instância e solução (conjunto de ações), as quais são executadas passo a passo, verificando a validade de cada ação sendo calculados indicadores do resultado final.

Caso existam ações inválidas, ou a solução não seja completa, o resultado é considerado inválido, sendo retornado o número de ações corretamente executadas. (isto faz sentido apenas em TProcurasConstrutivas.... nesta classe pode ser algo genérico, sendo redefinida em TProcurasConstrutivas...) (fazer uma função validação geral, a redefinir em TProcurasConstrutivas?) (deixar o formato da solução em aberto, o ficheiro recebe ID da instância, seguido da solução.

Parameters
instancias- IDs das instâncias a serem validadas.
impossiveis- IDs das instâncias impossíveis, de entre as instâncias dadas.
referencias- custo mínimo, custo máximo, tempo mínimo, tempo máximo.
fichSolucoes- nome do arquivo contendo as soluções a validar para as instâncias.
fichResultados- nome do arquivo onde os resultados da validação serão gravados (opcional).

Reimplemented in TProcuraAdversa.

Definition at line 160 of file TProcura.cpp.

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

◆ Validar()

virtual bool TProcura::Validar ( TVector< TString solucao)
inlinevirtual

Verifica a validade de uma solução para a instância atual.

Note
Redefinição necessária, caso seja necessário um processo de validação específico.

Esta função é chamada para verificar a validade de cada ação durante a execução da solução, bem como para calcular indicadores do resultado final. O formato da solução é genérico, podendo ser adaptado conforme as necessidades específicas do problema.

Parameters
solucao- representação da solução a ser validada (formato específico a ser definido na subclasse).
Returns
Retorna verdadeiro se a solução for válida, ou falso caso contrário.

Reimplemented in TProcuraConstrutiva, and TProcuraAdversa.

Definition at line 481 of file TProcura.h.

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

◆ ficheiroGravar

TString TProcura::ficheiroGravar = ""
static

prefixo do nome do ficheiro para gravar a instância para ficheiro (terá sido gerada)

Definition at line 564 of file TProcura.h.

◆ ficheiroInstancia

TString TProcura::ficheiroInstancia = ""
static

prefixo do nome ficheiro de uma instância - editado pelo utilizador Caso não seja nulo, utilizar como prefixo, concatenando com ID da instância, para obter o ficheiro 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

See also
Inicializar()

Definition at line 562 of file TProcura.h.

◆ gravarSolucao

int TProcura::gravarSolucao = 0
static

Gravar solução CSV (todas as ações)

Note
0 = não grava, 1 = grava

Definition at line 593 of file TProcura.h.

◆ indAtivo

TVector< int > TProcura::indAtivo
static

Definition at line 571 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 570 of file TProcura.h.

◆ instancia

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

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

Definition at line 22 of file TProcura.h.

◆ instanteFinal

clock_t TProcura::instanteFinal = 0
static

Instante final (deadline) da corrida atual.

Definition at line 581 of file TProcura.h.

◆ iteracoes

int TProcura::iteracoes = 0
static

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

Definition at line 579 of file TProcura.h.

◆ memoriaEsgotada

bool TProcura::memoriaEsgotada = false
static

Flag indicando problemas de memória esgotada.

Definition at line 583 of file TProcura.h.

◆ modoMPI

int TProcura::modoMPI = 0
static

Modo MPI.

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

Definition at line 590 of file TProcura.h.

◆ mpiCount

int TProcura::mpiCount = 1
static

MPI - número de processos.

Definition at line 587 of file TProcura.h.

◆ mpiID

int TProcura::mpiID = 0
static

MPI - rank do processo.

Definition at line 585 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 567 of file TProcura.h.

◆ resultado

int TProcura::resultado = 0
static

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

Definition at line 575 of file TProcura.h.

◆ tempo

double TProcura::tempo = 0
static

tempo consumido na última execução.

Definition at line 577 of file TProcura.h.


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