TProcura
Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização
Loading...
Searching...
No Matches
TCodificacaoBinaria.cpp
Go to the documentation of this file.
2
3// número de elementos binários na codificação
5
10
12 int n = (nElementos + 63) / 64;
13 estado.Count(n);
14 for (int i = 0; i < n; i++)
15 estado[i] = ((uint64_t)TRand::rand()) << 32 | ((uint64_t)TRand::rand());
16 custo = -1;
17}
18
19// métodos que podem ser redefinidos
20void TCodificacaoBinaria::Debug(bool completo) {
21 for (int i = 0; i < nElementos; i++)
22 printf("%d", Bit(i) ? 1 : 0);
23
24 // utilização de TBits (experimental):
25 //TBits novoEstado;
26 //for (auto& palavra : estado)
27 // novoEstado += palavra;
28
29 // mostrar todos os modos
30 //for (int modo = 0; modo <= 2; modo++)
31 // printf("%s", *novoEstado.String(modo));
32}
33
36
37 // parâmetros da codificação binária
38 parametro += {
39 { "TIPO_CRUZAR", 1, 0, 10, "TIPO_CRUZAR: 1 - um ponto, >=2 N-pontos, 0 - uniforme", {
40 "uniforme", "2-pontos", "3-pontos", "4-pontos", "5-pontos",
41 "6-pontos", "7-pontos", "8-pontos", "9-pontos", "10-pontos" }},
42 { "TIPO_MUTAR", 0,0,100, "TIPO_MUTAR: 0 - aplica um vizinho aleatório (seja 1 só elemento ou segmento), 1 a 100, probabilidade de mutação de cada bit, em percentagem (1 a 100)" },
43 { "TIPO_VIZINHO", 1,1,1000, "Troca segmento: 1 - apenas 1 bit de cada vez, >=2 troca um segmento de N bits" }
44 };
45}
46
47
49 // inverter segmento de N bits
51 if (tamanho < 1)
52 tamanho = 1;
53 Debug(EXTRA_DEBUG, false, " vizinhança %d bits", tamanho);
54 for (int i = 0; i < nElementos - tamanho + 1; i++) {
56 if (vizinho != NULL) {
57 for (int j = 0; j < tamanho; j++)
58 vizinho->Troca(i + j);
59 vizinho->custo = -1;
61 }
62 else
63 memoriaEsgotada = true;
64 }
66}
67
69 // mutação com probabilidade p de trocar cada bit
71 if (p == 0) {
72 // um vizinho aleatório
74 if (tamanho < 1)
75 tamanho = 1;
76 if (tamanho > nElementos - 1)
77 tamanho = nElementos - 1;
78 int i = TRand::rand() % (nElementos - tamanho + 1);
79 Debug(EXTRA_DEBUG, false, " mutar vizinho #bits %d (%d)",
80 tamanho, i);
81 for (int j = 0; j < tamanho; j++)
82 Troca(i + j);
83 custo = -1;
84 }
85 else {
86 Debug(EXTRA_DEBUG, false, " mutar prob p(%d)", p);
87 // cada bit com probabilidade p
88 for (int i = 0; i < nElementos; i++)
89 if (TRand::rand() % 100 < (unsigned)p)
90 Troca(i);
91 custo = -1;
92 }
93}
94
98 if (pontos > nElementos / 2)
99 pontos = nElementos / 2;
100 while (divisoes.Count() < pontos) {
103 }
104 if (divisoes.Empty()) { // cruzamento uniforme
105 Debug(EXTRA_DEBUG, false, " cruzamento uniforme");
106 for (int i = 0; i < nElementos; i++)
107 Bit(i) = ((TCodificacaoBinaria*)(TRand::rand() % 2 == 0 ? a : b))->Bit(i);
108 }
109 else { // cruzamento em N pontos
110 int i = 0;
111 bool copiaPai = true;
113 Debug(EXTRA_DEBUG, false, " cruzamento %d-ponto(s): ", divisoes.Count());
114 for (auto ponto : divisoes)
115 Debug(EXTRA_DEBUG, false, "%d ", ponto);
116 }
117 divisoes += nElementos; // ponto final
118 for (auto ponto : divisoes) {
119 while (i < ponto) {
120 Bit(i) = ((TCodificacaoBinaria*)(copiaPai ? a : b))->Bit(i);
121 i++;
122 }
124 }
125 }
126 custo = -1;
127
129}
130
131int TCodificacaoBinaria::Distancia(TPonto a) { // distância de Hamming
132 int dist = 0;
133 for (int i = 0; i < nElementos; i++)
134 if (Bit(i) != ((TCodificacaoBinaria*)a)->Bit(i))
135 dist++;
136 return dist;
137}
@ TIPO_VIZINHO_CB
@ TIPO_CRUZAR_CB
@ TIPO_MUTAR_CB
@ EXTRA_DEBUG
Nível extra para debug muito detalhado (uso interno).
Definition TProcura.h:96
@ NIVEL_DEBUG
Nível de debug, de reduzido a completo.
Definition TProcura.h:71
void Vizinhanca(TVector< TPonto > &vizinhos)
void ResetParametros()
Inicializa os parâmetros, indicadores e instâncias.
void Copiar(TPonto objeto)
Fica com uma cópia do objeto.
void Debug(bool completo=true) override
Mostra o estado no ecrã, para debug.
TVector< uint64_t > estado
void Cruzamento(TPonto a, TPonto b)
TPonto Duplicar(void)=0
Cria um objeto que é uma cópia deste.
virtual void Cruzamento(TPonto a, TPonto b)
int custo
Custo total, atualizada após Avaliar()
virtual void Vizinhanca(TVector< TPonto > &vizinhos)
void ResetParametros() override
Inicializa os parâmetros, indicadores e instâncias.
static bool memoriaEsgotada
Flag indicando problemas de memória esgotada.
Definition TProcura.h:583
int Parametro(int id) const
Definition TProcura.h:610
static int resultado
Resultado retornado pelo algoritmo na última execução.
Definition TProcura.h:575
static TVector< TParametro > parametro
Parâmetros a serem utilizados na configuração atual.
Definition TProcura.h:567
TVector< Item > & BeASet()
Converte o vetor num conjunto: remove duplicados e ordena.
Definition TVector.h:845
int Count() const
Definition TVector.h:230
unsigned int rand(int seq)
Retorna o próximo valor pseudo-aleatório.
Definition TRand.cpp:46