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 int Indicador (int id)
 Retorna um indicador, após a execução do algoritmo.
 
virtual void Debug (void)
 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, bool mostrarSolucoes=true, char *ficheiro=NULL)
 Executa testes empíricos, em todas as configurações guardadas, nas instâncias selecionadas.
 
virtual void main (int argc, char *argv[], const char *nome)
 Inicializa a interação com o utilizador.
 
virtual void LimparEstatisticas (clock_t &inicio)
 Chapar antes da execução do algoritmo. Limpa valores estatísticos, e fixa o instante limite de tempo para a execução.
 
virtual void ExecucaoTerminada (clock_t inicio)
 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< intCodificarSolucao ()
 retorna um vetor de inteiros com a codifciação da solução (esta codificação será adicionada aos indicadores, no ficheiro CSV de resultados)
 
bool TempoExcedido ()
 
bool IteracoesExcedido ()
 
int Parametro (int id)
 

Static Public Member Functions

static int NovoValor (const char *prompt)
 
static charNovoTexto (const char *prompt)
 

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 int 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.
 

Protected Member Functions

void InserirRegisto (TVector< TResultado > &resultados, int inst, int conf)
 Insere um novo registo de resultados.
 
int Registo (TResultado &resultado, int id)
 Procura um registo com determinado id.
 
void Registo (TResultado &resultado, int id, int 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.
 
void RelatorioCSV (TVector< TResultado > &resultados, FILE *f)
 Gera um relatório CSV com os resultados.
 
TVector< intExtraiLista (char *str)
 Extrai uma lista de inteiros a partir de uma string.
 
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.
 

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.
 

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

Constructor & Destructor Documentation

◆ TProcura()

TProcura::TProcura ( void  )
inline

Definition at line 154 of file TProcura.h.

◆ ~TProcura()

virtual TProcura::~TProcura ( void  )
inlinevirtual

Definition at line 155 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 656 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 845 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 771 of file TProcura.cpp.

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

◆ CodificarSolucao()

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

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

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

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

◆ Debug()

void TProcura::Debug ( void  )
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[nivelDebug].valor. 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(void)
{
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
@ nivelDebug
Nível de debug, de reduzido a completo.
Definition TProcura.h:43
static int resultado
Resultado retornado pelo algoritmo na última execução.
Definition TProcura.h:459
static TVector< TParametro > parametro
Parâmetros a serem utilizados na configuração atual.
Definition TProcura.h:451

Reimplemented in CJogoDoGalo, CJogoEmLinha, CAspirador, COitoDamas, CParticao, CProblemaArtificial, CPuzzle8, COitoDamas, CParticao, CProblemaArtificial, and CTesteTVector.

Definition at line 87 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 941 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 361 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 185 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 213 of file TProcura.cpp.

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

◆ ExecucaoTerminada()

void TProcura::ExecucaoTerminada ( clock_t  inicio)
virtual

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

Reimplemented in TProcuraConstrutiva.

Definition at line 879 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].valor 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 193 of file TProcura.h.

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

Here is the caller graph for this function:

◆ ExtraiLista()

TVector< int > TProcura::ExtraiLista ( char str)
protected

Extrai uma lista de inteiros a partir de uma string.

Parameters
strString a analisar.
Returns
Vetor de inteiros extraídos.

Definition at line 298 of file TProcura.cpp.

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

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

◆ Indicador()

int 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()
void CSubProblema::Indicador(int id)
{
if(id == indicador-da-subclasse) {
// calcular indicador
return resultado;
}
return TProcura::Indicador(id);
}
virtual int Indicador(int id)
Retorna um indicador, após a execução do algoritmo.
Definition TProcura.cpp:74
static TVector< TIndicador > indicador
Indicadores que podem ser calculados após a execução, quer com informação da instãncia, quer com resultado da ...
Definition TProcura.h:454

Reimplemented in CTesteTVector, TProcuraConstrutiva, and TProcuraMelhorativa.

Definition at line 74 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
tamanhoCodificado = 1;
}
virtual void Inicializar(void)
Coloca o objecto no estado inicial da procura.
Definition TProcura.h:182

Reimplemented in CJogoDoGalo, CJogoEmLinha, CAspirador, COitoDamas, CParticao, CProblemaArtificial, CPuzzle8, COitoDamas, CParticao, CProblemaArtificial, CTesteTVector, and TProcuraConstrutiva.

Definition at line 182 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 405 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 457 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 273 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 470 of file TProcura.h.

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

◆ LimparEstatisticas()

void TProcura::LimparEstatisticas ( clock_t inicio)
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 94 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:588

Definition at line 588 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 856 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 792 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 155 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 479 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 705 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 889 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 806 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 244 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 908 of file TProcura.cpp.

Here is the caller graph for this function:

◆ NovoValor()

int TProcura::NovoValor ( const char prompt)
static

Definition at line 898 of file TProcura.cpp.

Here is the caller graph for this function:

◆ Parametro()

int TProcura::Parametro ( int  id)
inline

Definition at line 479 of file TProcura.h.

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:336

Definition at line 336 of file TProcura.h.

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

◆ Registo() [1/2]

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

Here is the caller graph for this function:

◆ Registo() [2/2]

void TProcura::Registo ( TResultado resultado,
int  id,
int  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 289 of file TProcura.cpp.

◆ RelatorioCSV()

void TProcura::RelatorioCSV ( TVector< TResultado > &  resultados,
FILE f 
)
protected

Gera um relatório CSV com os resultados.

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

Definition at line 679 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
parametro[nivelDebug].valor = 1;
// novo parametro para utilizar na função Heuristica()
parametro.Add({ "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.Add({ "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.Add({ "Ordenado","verifica se um vetor está ordenado", indOrdenar });
indAtivo.Add(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 };
}
@ indOrdenar
verifica se está ordenado
@ parametrosProcura
Marcador para permitir a extensão do enum em subclasses.
Definition TProcura.h:47
virtual void ResetParametros()
Inicializa os parametros, indicadores e instâncias.
Definition TProcura.cpp:37
static TVector< int > indAtivo
Definition TProcura.h:455
static TParametro instancia
ID da instância atual, a ser utilizado em SolucaoVazia().
Definition TProcura.h:21
TVector< Item > & Add(Item a)
Definition TVector.h:115

Reimplemented in CJogoEmLinha, TProcuraAdversa, CAspirador, COitoDamas, CParticao, CProblemaArtificial, CPuzzle8, CProblemaArtificial, CTesteTVector, TProcuraConstrutiva, and TProcuraMelhorativa.

Definition at line 37 of file TProcura.cpp.

Here is the call graph for this function:
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 916 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 345 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 469 of file TProcura.h.

Here is the caller graph for this function:

◆ TesteEmpirico()

void TProcura::TesteEmpirico ( TVector< int instancias,
bool  mostrarSolucoes = true,
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
inicio- ID da primeira instância no teste (ou -1 para a primeira)
fim- ID da última instância no teste (ou -1 para a última)
mostrarSolucoes- se true, mostra a solução após cada execução, c.c. indica apenas a instância em processamento.

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

Note
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 509 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:104

Reimplemented in CJogoDoGalo, CJogoEmLinha, COitoDamas, CParticao, and CProblemaArtificial.

Definition at line 104 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 457 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 448 of file TProcura.h.

◆ indAtivo

TVector< int > TProcura::indAtivo
static

Definition at line 455 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 454 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 21 of file TProcura.h.

◆ instanteFinal

clock_t TProcura::instanteFinal = 0
static

Instante final (deadline) da corrida atual.

Definition at line 465 of file TProcura.h.

◆ iteracoes

int TProcura::iteracoes = 0
static

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

Definition at line 463 of file TProcura.h.

◆ memoriaEsgotada

bool TProcura::memoriaEsgotada = false
static

Flag indicando problemas de memória esgotada.

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

◆ resultado

int TProcura::resultado = 0
static

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

Definition at line 459 of file TProcura.h.

◆ tempo

int TProcura::tempo = 0
static

tempo consumido na última execução.

Definition at line 461 of file TProcura.h.


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