3#define _CRT_SECURE_NO_WARNINGS
11#define TAMANHO_HASHTABLE 1000000
13#define OBJETO_HASHTABLE 5
15#define NAO_LIDO -1000000
452 virtual const char*
Acao(
TNo sucessor) {
return "ação inválida"; }
569 virtual void Debug(
void);
639 virtual bool Acao(
const char* acao);
747 virtual void TesteEmpirico(
int inicio = -1,
int fim = -1,
bool mostrarSolucoes =
true);
872 int IDAStar(
int upperBound = 0);
947 static int NovoValor(
const char* prompt);
954 void DebugExpansao(
int sucessor,
int sucessores,
bool duplo =
false);
956 void DebugCorte(
int sucessores = -1,
bool duplo =
false);
997 int Dominio(
int& variavel,
int min = INT_MIN,
int max = INT_MAX);
1010 unsigned int Hash();
1052 if ((estado =
Estado(i)) != NULL)
1060 return indice[
atual].prox;
1061 if(i>=0 && i<indice.
Count())
1062 return indice[i].prox;
1068 return indice[
atual].proxDistinto;
1069 if (i >= 0 && i < indice.
Count())
1070 return indice[i].proxDistinto;
1076 return indice[
atual].estado;
1077 if (i >= 0 && i < indice.
Count())
1078 return indice[i].estado;
1086 int NovoElemento(
TNo elemento);
1087 void LibertarLista();
1088 void LibertarSeguinte(
int id);
EOperacao
Define o sentido da operação de entrada/saída de dados.
EParametrosConstrutiva
Identifica um parâmetro específico no código.
@ limite
Valor dependente do algoritmo. Exemplo: Profundidade limitada.
@ ruidoHeur
Ruído a adicionar à heurística para testes de robustez.
@ pesoAStar
Peso aplicado à heuristica, na soma com o custo para calculo do lower bound.
@ estadosRepetidos
Forma de lidar com estados repetidos (ignorá-los, ascendentes, gerados).
@ limiteAvaliacoes
Número máximo de avaliações (0 significa sem limite).
@ verAcoes
Mostra estado a cada K ações. Se 1, mostra sempre estados e nunca ações.
@ parametrosConstrutivas
Marcador para permitir a extensão do enum em subclasses.
@ seed
Semente aleatória para inicializar a sequência de números pseudo-aleatórios.
@ nivelDebug
Nível de debug, de reduzido a completo.
@ limiteTempo
Tempo limite em segundos.
@ limiteGeracoes
Número máximo de gerações (0 significa sem limite).
@ baralharSuc
Baralhar os sucessores ao expandir.
@ limiteExpansoes
Número máximo de expansões (0 significa sem limite).
@ algoritmo
Algoritmo base a executar.
struct SResultado TResultado
TProcuraConstrutiva * TNo
Representa um nó na árvore de busca, apontando para um estado.
EEstadosRepetidos
Enumerado com os valores possíveis do parametro estadosRepetidos.
@ ascendentes
estados são comparados com ascendentes, e se forem repetidos são removidos
@ gerados
estados são comparados com todos os gerados, e se forem repetidos são removidos
@ ignorados
ignorados os estados gerados repetidos
EAlgoritmo
Algoritmos disponíveis para procura construtiva.
@ melhorPrimeiro
Executa a procura melhor primeiro, algoritmo informado.
@ custoUniforme
Executa a procura por custo uniforme, algoritmo cego.
@ larguraPrimeiro
Executa a procura em largura primeiro, algoritmo cego.
@ aStar
Executa a procura A*, algoritmo informado.
@ idAStar
Executa a procura IDA*, algoritmo informado.
@ profundidadePrimeiro
Executa a procura em profundidade primeiro, algoritmo cego.
@ branchAndBound
Executa o algoritmo Branch-and-Bound, um algoritmo informado.
#define TAMANHO_HASHTABLE
ENivelDebug
Níveis de detalhamento para debug.
@ detalhe
Debug detalhada sobre estados e decisões.
@ atividade
Apenas eventos principais.
@ completo
Mostra toda a execução detalhadamente.
@ passos
Exibe passos intermediários.
@ nada
Sem informações de debug.
struct SParametro TParametro
Estrutura para registo de um parâmetro.
int Inserir(TNo elemento, int id=0)
int ProximoDistinto(int i=-1)
Representa um estado no espaço de estados.
void DebugCorte(int sucessores=-1, bool duplo=false)
void DebugSucessores(TVector< TNo > &sucessores)
void MostrarTorneio(TVector< TVector< int > > &torneio, bool jogo=false)
TProcuraConstrutiva(void)
void DebugRamo(char ramo, char folha)
int SolucaoEncontrada(bool continuar=false)
void DebugEstado(int id=-1, int pai=-1)
void DebugSolucao(bool continuar=false)
static int NovoValor(const char *prompt)
void ConfiguracaoAtual(TVector< int > ¶metros, int operacao)
void BarraTorneio(bool nomes)
void CalculaTorneio(TVector< TResultado > &resultados)
static uint64_t elementosHT[TAMANHO_HASHTABLE][OBJETO_HASHTABLE]
void CalcularHeuristicas(TVector< TNo > &sucessores, TVector< int > *id=NULL, bool sortLB=false)
int SolucaoParcial(int i, TVector< TNo > &sucessores)
int Dominio(int &variavel, int min=INT_MIN, int max=INT_MAX)
void NovaLinha(bool tudo=true)
void EditarConfiguracoes()
int ObjetivoAlcancado(int item, TVector< TNo > &lista)
int MelhorResultado(TResultado base, TResultado alternativa)
static void LibertarVector(TVector< TNo > &vector, int excepto=-1, int maiorQue=-1)
virtual void SubstituirHT(int indice)
void MostrarConfiguracoes(int detalhe, int atual=-1)
virtual ~TProcuraConstrutiva(void)
void CalculaCaminho(bool completa=true)
void ExplorarSucessores(bool jogo=false)
void MostraRelatorio(TVector< TResultado > &resultados)
void DebugExpansao(int sucessor, int sucessores, bool duplo=false)
void ExtrairConfiguracao(TVector< TResultado > &resultados, TVector< TResultado > &extracao, int configuracao)
void LimparEstatisticas(clock_t &inicio)
void DebugIteracao(int iteracao)
bool AvaliacoesExcedido()
void VerificaLimites(int limite, int porProcessar, TVector< TNo > &sucessores)
void FinalizarCorrida(clock_t inicio)
static int custoHT[TAMANHO_HASHTABLE]
void MostraParametros(int detalhe=1, TVector< int > *idParametros=NULL)
static uint64_t estadoCodHT[OBJETO_HASHTABLE]
int CustoUniforme(int limite=0)
Executa a procura por custo uniforme, algoritmo cego.
int ProfundidadePrimeiro(int nivel=0)
Executa a procura em profundidade primeiro, algoritmo cego.
int LarguraPrimeiro(int limite=0)
Executa a procura em largura primeiro, algoritmo cego.
virtual void Sucessores(TVector< TNo > &sucessores)
Coloca em sucessores a lista de estados sucessores.
virtual bool SolucaoCompleta(void)
Verifica se o estado actual é objectivo (é uma solução completa)
virtual void SolucaoVazia(void)
Coloca o objecto no estado inicial da procura.
virtual void TesteManual(const char *nome)
Inicializa a interação com o utilizador.
virtual void Copiar(TNo objecto)
Fica com uma cópia do objecto.
virtual TNo Duplicar(void)=0
Cria um objecto que é uma cópia deste.
virtual bool Distinto(TNo estado)
Verifica se o estado actual distinto do fornecido.
virtual void MostrarSolucao(void)
Mostrar solução, seja um caminho ou o próprio estado.
virtual void TesteEmpirico(int inicio=-1, int fim=-1, bool mostrarSolucoes=true)
Executa testes empíricos, em todas as configurações guardadas, nas instâncias selecionadas.
virtual int ExecutaAlgoritmo()
Executa o algoritmo com os parametros atuais.
virtual bool Parar(void)
Verifica se a procura deve ser interrompida.
virtual int Heuristica(void)
Função para calcular quanto falta para o final, o valor da heurística.
virtual void Codifica(uint64_t estado[OBJETO_HASHTABLE])
Codifica o estado para um vetor de inteiros de 64 bits.
virtual void Debug(void)
Mostra o estado no ecrã, para debug.
virtual void ResetParametros()
Inicializa os parametros.
virtual const char * Acao(TNo sucessor)
Retorna a ação (movimento, passo, jogada, lance, etc.) que gerou o sucessor.
int heuristica
Estimativa para o custo até um estado objetivo, se disponível.
int custo
Custo total acumulado desde o estado inicial.
TNo pai
Ponteiro para o estado pai, na árvore de procura.
static int expansoes
Número total de expansões realizadas na procura.
static int lowerBound
Valor mínimo que a solução pode apresentar, obtido pela procura.
static int avaliacoes
Número total de avaliações realizadas na procura.
static bool memoriaEsgotada
Flag indicando problemas de memória esgotada.
static int tamanhoCodificado
Número de inteiros de 64 bits utilizados para codificar um objeto (≤ OBJETO_HASHTABLE).
static int geracoes
Número total de gerações realizadas na procura.
static TVector< TNo > caminho
Solução retornada pela procura (os estados devem ser libertados).
static TVector< TVector< int > > configuracoes
Conjuntos de configurações para teste empírico.
static TVector< TParametro > parametro
Parâmetros a serem utilizados na configuração atual.
static TVector< unsigned char > ramo
static TNo solucao
Estado objetivo encontrado, retornado pela procura (deve ser libertado).
static TParametro instancia
ID da instância atual, a ser utilizado em SolucaoVazia().
static clock_t instanteFinal
Estrutura para registo de um parâmetro.
const char * descricao
descrição do parametro, opcional
int valor
valor do parametro
const char * nome
nome do parametro, opcional mas aconselhado nos parâmetros específicos
int max
valor máximo que o parametro pode tomar
const char ** nomeValores
Nome associado a cada valor do parâmetro, útil para variáveis categóricas.
int min
valor mínimo que o parametro pode tomar