8#define BUFFER_SIZE 1024
24 "Profundidade Primeiro",
30 "Algoritmo Genético" };
43 parametro.Add({
"População",20,2,1000000,
"Número de elementos em cada geração, utilizado nos Algoritmos Genéticos",
NULL });
45 parametro.Add({
"Mutação",50,0,100,
"Probabilidade de um estado sofrer uma mutação após gerado, utilizado nos Algoritmos Genéticos",
NULL });
47 parametro.Add({
"Distância",0,0,1000,
"Distância mÃnima imposta entre elementos da população, utilizado nos Algoritmos Genéticos",
NULL });
49 indicador.Add({
"Épocas",
"Número de épocas decorridas num algoritmo evolutivo. Uma época é uma geração única.",
indEpocas });
100 while (!
melhor->Parar()) {
246 while (!
melhor->Parar()) {
321 printf(
"\n Cruzar g %d x %d -> %d%s",
330 printf(
"\nÉpoca %d #%d - %d|%d [%d-%d]",
346 valor -=
pesos[pai++];
401 printf(
"\n%s (TProcuraMelhorativa)", nome);
406_______________________________________________________________________________\n\
407| 1 - Inicializar | 2 - Explorar | 3 - Solução/Caminho |\n\
408| 4 - Parâmetros | 5 - Executar | 6 - Configurações | 7 - Teste");
439 NovoTexto(
"Ficheiro (nada para mostrar no ecrã):"));
442 default:
printf(
"\nOpção não definida.");
break;
468 printf(
"\nTeste da Mutação e Cruzamento:");
485 else if (
opcao == 2) {
501 }
while (
opcao != 0);
504 printf(
"\nTeste da Vizinhança:");
515 printf(
"\nSem vizinhos.");
531 }
while (
opcao != 0);
@ indEpocas
Número de épocas decorridas num algoritmo evolutivo. Uma época é uma geração única.
@ indGeracoes
número de estados gerados durante a procura
TProcuraMelhorativa * TPonto
@ seed
Semente aleatória para inicializar a sequência de números pseudo-aleatórios.
@ nivelDebug
Nível de debug, de reduzido a completo.
@ algoritmo
Algoritmo base a executar.
@ limiteIteracoes
Número máximo de iterações (0 significa sem limite).
virtual void NovaSolucao(void)
bool Acao(const char *acao)
void ObterExtremos(TVector< TPonto > &populacao, int &minCusto, int &maxCusto)
int epocas
Número de épocas decorridas num algoritmo evolutivo. Uma época é uma geração única.
void LibertarVector(TVector< TPonto > &vector, int excepto=-1)
int Indicador(int id) override
Redefinição. Ver TProcura::Indicador().
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)
void TesteManualX(const char *nome)
provavelmente apagar
TPonto MelhorAtual(TPonto &atual, TVector< TPonto > &vizinhos, int indice)
void DebugOptimoLocal(TPonto solucao)
void DebugMelhorEncontrado(TPonto ponto)
provavalmente apagar
void DebugVizinhos(TVector< TPonto > &vizinhos)
void Explorar() override
definir para explorar manualmente os dados (não definido em TProcura, apenas em TProcuraConstrutiva)
virtual void Vizinhanca(TVector< TPonto > &vizinhos)
void LimparEstatisticas(clock_t &inicio)
Chapar antes da execução do algoritmo. Limpa valores estatísticos, e fixa o instante limite de tempo para...
virtual int Avaliar(void)
void DebugPassoEM(TPonto solucao)
void DebugInicioEM(int ID, TPonto solucao)
int custo
Custo total, atualizada após Avaliar()
virtual int Distancia(TPonto a)
TProcuraMelhorativa(void)
void Selecao(int &pai, int &mae, TVector< int > &pesos, int total)
void DebugCruzamentoAG(int gPai, int gMae, int gFilho, int mutou)
~TProcuraMelhorativa(void)
void ResetParametros() override
Inicializa os parametros, indicadores e instâncias.
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.
int geracoes
Número de estados gerados.
virtual void MostrarSolucao()
definir para visualizar a solução
static int Dominio(int &variavel, int min=INT_MIN, int max=INT_MAX)
Limita o domínio de um parâmetro inteiro.
static char * NovoTexto(const char *prompt)
virtual void Inicializar(void)
Coloca o objecto no estado inicial da procura.
static int resultado
Resultado retornado pelo algoritmo na última execução.
virtual int Indicador(int id)
Retorna um indicador, após a execução do algoritmo.
static int iteracoes
Número total de iterações realizadas na última execução.
TVector< int > SolicitaInstancias()
Solicita ao utilizador uma lista de instâncias.
virtual void ResetParametros()
Inicializa os parametros, indicadores e instâncias.
void MostraParametros(int detalhe=1, TVector< int > *idParametros=NULL)
Mostra os parâmetros atuais.
virtual void ExecucaoTerminada(clock_t inicio)
Chamar após a execução do algoritmo. Grava o tempo consumido.
void MostraRelatorio(TVector< TResultado > &resultados, bool ultimo=false)
Mostra um relatório dos resultados.
virtual void Debug(void)
Mostra o estado no ecrã, para debug.
static int NovoValor(const char *prompt)
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 ...
void EditarParametros()
Permite ao utilizador editar os parâmetros.
static TVector< int > indAtivo
static TParametro instancia
ID da instância atual, a ser utilizado em SolucaoVazia().
void InserirRegisto(TVector< TResultado > &resultados, int inst, int conf)
Insere um novo registo de resultados.
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...
static TVector< TParametro > parametro
Parâmetros a serem utilizados na configuração atual.
void EditarConfiguracoes()
Permite ao utilizador editar as configurações.
void SolicitaInstancia()
Solicita ao utilizador o ID da instância a utilizar, permitindo alterar também o prefixo do ficheiro.
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.
TVector< Item > & Sort(TVector< int > *idxvect=nullptr)
Ordena todo o vetor, opcionalmente devolvendo Ãndices ordenados.
TVector< Item > & Add(Item a)
unsigned int rand(int seq)
Retorna o próximo valor pseudo-aleatório.
void srand(unsigned int seed, int seq)
Inicializa a semente da geração pseudo-aleatória.
int valor
valor do parametro