TProcura
Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização
Loading...
Searching...
No Matches
TProcuraMelhorativa.h
Go to the documentation of this file.
1#pragma once
2
3#include "../TProcura.h"
4
5// um ponto no espaço de estados das soluções completas, é um apontador para um estado
8
9// nomes dos parâmetros fixos na procura melhorativa
18
24
25
27// TProcuraMelhorativa class
29// Author: José Coelho
30// Last revision: 2025-01-30
31// Description:
32// Superclasse de procuras no espaço das soluções completas (a solução é melhorada).
33// As variaveis da classe devem ser apenas de uma solucao, se existir informação
34// sobre a instancia, esta informação deve ser colocada em variaveis estáticas
35// para não serem duplicadas desnecessariamente.
36// A única variavel é o valor da solução que após ser calculada em Avaliar
37// deve ser actualizada (se o valor não estiver actualizado, deve ter -1)
40 public TProcura
41{
42public:
45
47 int custo = -1;
49 static int lowerBound;
51 static int geracoes;
53 static int epocas;
54
56 // Métodos para redefinir
58
86 virtual TPonto Duplicar(void) = 0;
87
114 virtual void Copiar(TPonto objecto) {}
115
116 virtual void NovaSolucao(void) {}
117 // Retorna o valor da solução completa actual. Atribuir o valor a custo
118 virtual int Avaliar(void);
119 // redefinir, para aceitar ações que sejam operadores
120 bool Acao(const char* acao) { return false; }
121 // Método para inicializar os parâmetros (redefinir se forem adicionados parâmetros específicos)
122 void ResetParametros() override;
123
124 // critrio de paragem adicionado para procuras melhorativas:
125 // - custo nulo, significa obter o ótimo (lowerBound pode ser atualizado, caso exista, de omissão é 0)
126 // - número gerações (ou épocas) sem melhoria - futuro
127 // - diversidade da população - futuro
128 bool Parar(void) { return TProcura::Parar() || custo <= lowerBound; }
129
131 // Operadores a redefinir para Escalada-do-Monte
133
134 // Operador de vizinhanca (apenas em soluções completas)
135 // chamar a função nesta classe para actualizacao de estatisticas
137
139 // Algorithmos Evolutivos
141
142 // Operador mutação, altera o estado actual (de acordo com a parametrizacao global)
143 virtual void Mutar(void) {}
144 // Operador cruzamento, cruza os dois elementos a e b, colocando o resultado no estado atual
145 virtual void Cruzamento(TPonto a, TPonto b) { }
146 // Função distância: distancia deste elemento ao elemento a
147 // (opcional para manter os elementos diversos)
148 virtual int Distancia(TPonto a) { return 0; }
149
151 // Algoritmo de procura local: Escalada do Monte
153 // retorna a avaliação do resultado actual
154 int EscaladaDoMonte();
155
157 // Algoritmo de procura local: Algoritmos Geneticos
159 // retorna a avaliação do resultado final
160 int AlgoritmoGenetico();
161
163 // Algoritmo Evolutivo: Algoritmos Geneticos + Estratégia de Evolução
165 // Implementação em linha com Eiben & Smith, 2015
166 // retorna a avaliação do resultado final
167 int AlgoritmoEvolutivo();
168
169
170
171 // Chamar sempre que uma solução melhor que a actual e encontrada
173
177 int64_t Indicador(int id) override;
178
182 void Inicializar(void) {}
183
184 void LimparEstatisticas();
185
186
187protected:
188 // métodos internos
189 void Selecao(int& pai, int& mae, TVector<int>& pesos, int total);
192 void VerificaMelhor(TPonto& melhor, TPonto atual);
193 bool VerificaMelhor(TPonto atual);
194 int MelhorCusto(TVector<TPonto>& populacao, bool inverter = false);
195 TPonto MelhorAtual(TPonto& atual, TVector<TPonto>& vizinhos, int indice);
196 void ObterExtremos(TVector<TPonto>& populacao, int& minCusto, int& maxCusto);
197 void Explorar() override;
199 int ExecutaAlgoritmo();
200 // Mostrar vizinhos
201 void DebugInicioEM(int ID, TPonto solucao);
202 void DebugOptimoLocal(TPonto solucao);
203 void DebugPassoEM(TPonto solucao);
204 void DebugPassoAG(int pop, int min, int max);
205 void DebugCruzamentoAG(int gPai, int gMae, int gFilho, int mutou);
206 // algoritmo evolutivo
213 void DebugPopulacaoAE(TVector<TPonto>& populacao, const char* titulo); // mostrar toda a população
215 int& minDist, int& maxDist, int& avgDist, int& melhorPior);
216};
EIndicadoresConstrutiva
@ IND_GERACOES
número de estados gerados durante a procura
@ IND_EPOCAS
Número de épocas decorridas num algoritmo evolutivo. Uma época é uma geração única.
@ IND_MELHORATIVA
Marcador para permitir a extensão do enum em subclasses.
@ DIVERSIDADE
@ PROB_CRUZAR
@ DIST_MINIMA
@ PARAMETROS_MELHORATIVA
@ PROB_MUTAR
@ TAMANHO_TORNEIO
@ Q_ROUND_ROBIN
@ IMIGRANTES
@ MOVE_PRIMEIRO
@ PROB_MELHOR_TORNEIO
@ PERC_DESCENDENTES
@ SOBREVIVENCIA
@ POPULACAO
TProcuraMelhorativa * TPonto
@ IND_PROCURA
Marcador para permitir a extensão do enum em subclasses.
Definition TProcura.h:20
@ PARAMETROS_PROCURA
Marcador para permitir a extensão do enum em subclasses.
Definition TProcura.h:47
TVector< TPonto > SelecionarSobreviventesAE(TVector< TPonto > &populacao, TVector< TPonto > &descendentes)
bool Acao(const char *acao)
void ObterExtremos(TVector< TPonto > &populacao, int &minCusto, int &maxCusto)
static int epocas
Número de épocas decorridas num algoritmo evolutivo. Uma época é uma geração única.
virtual void Mutar(void)
void LibertarVector(TVector< TPonto > &vector, int excepto=-1)
TVector< TPonto > SelecionarPaisAE(TVector< TPonto > &populacao)
virtual void Cruzamento(TPonto a, TPonto b)
void DebugPopulacaoAE(TVector< TPonto > &populacao, const char *titulo)
virtual void Copiar(TPonto objecto)
Fica com uma cópia do objecto.
void DebugPassoAG(int pop, int min, int max)
void CalcularAvaliacoes(TVector< TPonto > &vizinhos, int &melhorValor, int &melhorIndice)
virtual void NovaSolucao(void)
TPonto MelhorAtual(TPonto &atual, TVector< TPonto > &vizinhos, int indice)
void DebugOptimoLocal(TPonto solucao)
TVector< TPonto > AplicarDiversidadeAE(TVector< TPonto > &populacao)
TVector< TPonto > CompletarPopulacaoAE(TVector< TPonto > &populacao)
TVector< TPonto > ReproduzirAE(TVector< TPonto > &pais, TVector< TPonto > &populacao)
void DiversidadeAE(TVector< TPonto > &populacao, int &minDist, int &maxDist, int &avgDist, int &melhorPior)
void LimparEstatisticas()
Chapar antes da execução do algoritmo. Limpa valores estatísticos, e fixa o instante limite de tempo para...
void DebugMelhorEncontrado(TPonto ponto)
void Inicializar(void)
Inicializar a instância. No final, chamar NovaSolucao() para inicializar o estado.
void Explorar() override
definir para explorar manualmente os dados (não definido em TProcura, apenas em TProcuraConstrutiva)
virtual int Avaliar(void)
void DebugGeracaoAE(int epoca, TVector< TPonto > &populacao)
int MelhorCusto(TVector< TPonto > &populacao, bool inverter=false)
int64_t Indicador(int id) override
Redefinição. Ver TProcura::Indicador().
void DebugPassoEM(TPonto solucao)
void DebugInicioEM(int ID, TPonto solucao)
int custo
Custo total, atualizada após Avaliar()
static int lowerBound
Lower Bound, se existir.
virtual int Distancia(TPonto a)
void Selecao(int &pai, int &mae, TVector< int > &pesos, int total)
void DebugCruzamentoAG(int gPai, int gMae, int gFilho, int mutou)
virtual void Vizinhanca(TVector< TPonto > &vizinhos)
void ResetParametros() override
Inicializa os parametros, indicadores e instâncias.
bool Parar(void)
Verifica se a procura deve ser interrompida.
void VerificaMelhor(TPonto &melhor, TPonto atual)
void OrdemValor(TVector< TPonto > &populacao, TVector< int > &id)
int ExecutaAlgoritmo()
Executa o algoritmo com os parametros atuais.
virtual TPonto Duplicar(void)=0
Cria um objecto que é uma cópia deste.
static int geracoes
Número de estados gerados.
Classe base para todas as procuras.
Definition TProcura.h:179
static int resultado
Resultado retornado pelo algoritmo na última execução.
Definition TProcura.h:493
virtual bool Parar(void)
Verifica se a procura deve ser interrompida.
Definition TProcura.h:363