TProcura
Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização
Loading...
Searching...
No Matches
OitoDamas.h
Go to the documentation of this file.
1#pragma once
2#include "../TProcuraMelhorativa.h"
3
5// COitoDamas class
7// Author: José Coelho
8// Last revision: 2025-01-30
9// Description:
10// Implementa o problema das oito damas. Este problema consiste em colocar
11// oito damas de xadrez (movem-se na horizontal, vertical e diagonal), num
12// tabuleiro de xadrez, sem que estas se ataquem umas as outras.
13// Generalizado para N damas, o ID da instância é o número de damas
15
16#define MAX_DAMAS 40
17
18class COitoDamas :
20{
21public:
24
25 // estrutura de dados: posicao de cada dama
27 static int nDamas; // número de damas desta instância
28
29 // Metodos virtuais redefinidos
32 if (clone != NULL)
33 clone->Copiar(this);
34 else
35 memoriaEsgotada = true;
36 return clone;
37 }
38
44
45 void Inicializar(void);
46 bool SolucaoCompleta(void) { return damas.Count() == nDamas; }
47 void Debug(void);
48 void MostrarSolucao(void) { Debug(); }
49 void TesteManual(const char* nome);
50
51 // metodos virtuais redefinidos de TProcuraMelhorativa
52
53 void NovaSolucao(void);
54 int Avaliar(void);
56 void Mutar(void);
57 void Cruzamento(TPonto a, TPonto b);
58 int Distancia(TPonto a);
59
60private:
61 // métodos de normalização de um estado
62 void Normalizar(TVector<int>& damas); // coloca em damas o estado normalizado
63 int PesoVersao(int tab[MAX_DAMAS][MAX_DAMAS]); // peso da versão do estado
64 void Simetria(int tab[MAX_DAMAS][MAX_DAMAS], int eixo); // aplica uma simetria
65 void Troca(int& a, int& b); // troca dois valores
66};
67
68/* Testes nas procuras cegas (instâncias 8 a 17)
69
70 ID |conf| custo(g) | expansões | gerações | avaliações | tempo(s) |
71----|----|----------|------------|-----------|------------|----------|
72 8 | 1 | 8 | 1665 | 1965 | 0 | 0,002s |
73 9 | 1 | 9 | 6977 | 8042 | 0 | 0,007s |
74 10 | 1 | 10 | 30779 | 34815 | 0 | 0,023s |
75 11 | 1 | 11 | 149131 | 164246 | 0 | 0,133s |
76 12 | 1 | 12 | 773731 | 841989 | 0 | 0,787s |
77 13 | 1 | 13 | 4250877 | 4601178 | 0 | 5,084s |
78 14 | 1 | não res. | 6900138 | 12939175 | 0 | 11,908s |
79 15 | 1 | não res. | 5445913 | 15967696 | 0 | 12,279s |
80 16 | 1 | não res. | 4123889 | 16996518 | 0 | 12,649s |
81 17 | 1 | não res. | 3651739 | 18318707 | 0 | 13,096s |
82 8 | 2 | 8 | 113 | 124 | 0 | 0,000s |
83 9 | 2 | 9 | 41 | 60 | 0 | 0,000s |
84 10 | 2 | 10 | 102 | 124 | 0 | 0,001s |
85 11 | 2 | 11 | 52 | 83 | 0 | 0,000s |
86 12 | 2 | 12 | 261 | 295 | 0 | 0,001s |
87 13 | 2 | 13 | 111 | 154 | 0 | 0,000s |
88 14 | 2 | 14 | 1899 | 1944 | 0 | 0,006s |
89 15 | 2 | 15 | 1359 | 1414 | 0 | 0,005s |
90 16 | 2 | 16 | 10052 | 10112 | 0 | 0,028s |
91 17 | 2 | 17 | 5374 | 5449 | 0 | 0,016s |
92 8 | 3 | 8 | 113 | 120 | 0 | 0,001s |
93 9 | 3 | 9 | 41 | 56 | 0 | 0,000s |
94 10 | 3 | 10 | 102 | 119 | 0 | 0,001s |
95 11 | 3 | 11 | 52 | 78 | 0 | 0,000s |
96 12 | 3 | 12 | 261 | 289 | 0 | 0,001s |
97 13 | 3 | 13 | 111 | 148 | 0 | 0,000s |
98 14 | 3 | 14 | 1899 | 1937 | 0 | 0,006s |
99 15 | 3 | 15 | 1359 | 1407 | 0 | 0,008s |
100 16 | 3 | 16 | 2850 | 2896 | 0 | 0,020s |
101 17 | 3 | 17 | 5206 | 5258 | 0 | 0,030s |
102----|----|----------|------------|-----------|------------|----------| resolvidas
103Total 1 | 63 | 25334839 | 69874331 | 0 | 55,968s | 6
104Total 2 | 125 | 19364 | 19759 | 0 | 0,057s | 10
105Total 3 | 125 | 11994 | 12308 | 0 | 0,067s | 10
106Torneio (#instâncias melhores):
107 |-01-|-02-|-03-|
108 1 | -7 | -7 |-14
109 |----|----|----|
110 2 7 | | 0 | 7
111 |----|----|----|
112 3 7 | 0 | | 7
113 |----|----|----|
114Configuração 1
115P1(Algoritmo): Largura Primeiro | P2(Debug): nada | P3(Ver): 4 | P4(Seed): 1
116P5(Tempo): 10 | P6(Limite): 0 | P7(Repetidos): ignorar | P8(pesoAStar): 100
117P9(ruido): 0 | P10(baralhar): 0 | P11(Max. Avaliações): 1000000 | P12(Move Primeiro): Sim
118P13(População): 20 | P14(Prob. Mutação): 50 | P15(Dist. Mínima): 0
119Configuração 2
120P1(Algoritmo): Profundidade Primeiro | P2(Debug): nada | P3(Ver): 4 | P4(Seed): 1
121P5(Tempo): 10 | P6(Limite): -1 | P7(Repetidos): ignorar | P8(pesoAStar): 100
122P9(ruido): 0 | P10(baralhar): 0 | P11(Max. Avaliações): 1000000 | P12(Move Primeiro): Sim
123P13(População): 20 | P14(Prob. Mutação): 50 | P15(Dist. Mínima): 0
124Configuração 3
125P1(Algoritmo): Profundidade Primeiro | P2(Debug): nada | P3(Ver): 4 | P4(Seed): 1
126P5(Tempo): 10 | P6(Limite): -1 | P7(Repetidos): gerados | P8(pesoAStar): 100
127P9(ruido): 0 | P10(baralhar): 0 | P11(Max. Avaliações): 1000000 | P12(Move Primeiro): Sim
128P13(População): 20 | P14(Prob. Mutação): 50 | P15(Dist. Mínima): 0
129
130*/
#define MAX_DAMAS
Definition OitoDamas.h:16
Representa um estado do problema das 8 damas.
Definition OitoDamas.h:15
void TesteManual(const char *nome)
Inicializa a interação com o utilizador.
Definition OitoDamas.cpp:37
void Cruzamento(TPonto a, TPonto b)
Definition OitoDamas.cpp:82
void Copiar(TPonto objecto)
Fica com uma cópia do objecto.
Definition OitoDamas.h:39
TPonto Duplicar(void)
Cria um objecto que é uma cópia deste.
Definition OitoDamas.h:30
static int nDamas
Definition OitoDamas.h:22
void Inicializar(void)
Coloca o objecto no estado inicial da procura.
void Vizinhanca(TVector< TPonto > &vizinhos)
Definition OitoDamas.cpp:63
void Mutar(void)
Definition OitoDamas.cpp:76
void NovaSolucao(void)
Definition OitoDamas.cpp:43
void Debug(void)
Mostra o estado no ecrã, para debug.
int Distancia(TPonto a)
Definition OitoDamas.cpp:93
bool SolucaoCompleta(void)
Verifica se o estado actual é objectivo (é uma solução completa)
Definition OitoDamas.h:46
~COitoDamas(void)
TVector< int > damas
Definition OitoDamas.h:21
void MostrarSolucao(void)
definir para visualizar a solução
Definition OitoDamas.h:48
int Avaliar(void)
Definition OitoDamas.cpp:51
void Copiar(TProcuraConstrutiva *objecto)
Definition OitoDamas.h:27
COitoDamas(void)
virtual void Copiar(TPonto objecto)
Fica com uma cópia do objecto.
static bool memoriaEsgotada
Flag indicando problemas de memória esgotada.
Definition TProcura.h:467
static int resultado
Resultado retornado pelo algoritmo na última execução.
Definition TProcura.h:459
int Count() const
Definition TVector.h:160