TProcura
Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização
Loading...
Searching...
No Matches
Particao.h
Go to the documentation of this file.
1#pragma once
2
3#include "../TProcuraMelhorativa.h"
4
6// CParticao class
8// Author: José Coelho
9// Last revision: 2025-01-30
10// Description:
11// Implementa o problema da particao. Este problema consiste em dividir
12// um conjunto de numeros naturais em duas partes cuja soma dos numeros em cada
13// parte seja igual.
15class CParticao :
17{
18public:
19 CParticao(void);
21
22 // estrutura de dados (números a colocar, números colocados em cada lado, e total de cada lado)
25 TVector<bool> solCompleta; // codificação de uma solução, na abordagem melhoriativa: vetor binário
26 // na abordagem melhorativa, assume-se que os números estão em "numeros" e não são deslocados para esquerd/direita
27
28 // Metodos virtuais redefinidos
31 if (clone != NULL)
32 clone->Copiar(this);
33 else
34 memoriaEsgotada = true;
35 return clone;
36 }
37
40 numeros = ((CParticao*)objecto)->numeros;
41 esquerda = ((CParticao*)objecto)->esquerda;
42 direita = ((CParticao*)objecto)->direita;
43 totalEsquerda = ((CParticao*)objecto)->totalEsquerda;
44 totalDireita = ((CParticao*)objecto)->totalDireita;
45 solCompleta = ((CParticao*)objecto)->solCompleta;
46 }
47 void Inicializar(void);
48 void Debug(void);
49 void MostrarSolucao(void) { Debug(); }
50 void TesteManual(const char* nome);
51
52 // métodos melhorativos
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};
60
61/* Testes nas procuras cegas (instâncias 20 a 29)
62
63 ID |conf| custo(g) | expansões | gerações | avaliações | tempo(s) |
64----|----|----------|------------|-----------|------------|----------|
65 20 | 1 | 20 | 163979 | 228706 | 0 | 0,249s |
66 21 | 1 | 20 | 97485 | 129560 | 0 | 0,134s |
67 22 | 1 | 21 | 179777 | 243832 | 0 | 0,231s |
68 23 | 1 | sem sol. | 384627 | 384626 | 0 | 0,374s |
69 24 | 1 | sem sol. | 1226523 | 1226522 | 0 | 1,398s |
70 25 | 1 | sem sol. | 3461151 | 3461150 | 0 | 4,136s |
71 26 | 1 | sem sol. | 3731307 | 3731306 | 0 | 4,743s |
72 27 | 1 | não res. | 8559764 | 11039290 | 0 | 15,341s |
73 28 | 1 | não res. | 7480665 | 9616932 | 0 | 14,188s |
74 29 | 1 | não res. | 7859585 | 10463074 | 0 | 14,493s |
75 20 | 2 | 20 | 432100 | 660794 | 0 | 0,408s |
76 21 | 2 | 20 | 274472 | 404018 | 0 | 0,244s |
77 22 | 2 | 21 | 521564 | 765382 | 0 | 0,504s |
78 23 | 2 | não res. | 13574376 | 13958958 | 0 | 10,001s |
79 24 | 2 | não res. | 13623338 | 14849840 | 0 | 10,001s |
80 25 | 2 | não res. | 11727455 | 15188590 | 0 | 10,001s |
81 26 | 2 | não res. | 11099210 | 14830500 | 0 | 10,001s |
82 27 | 2 | não res. | 9276509 | 15074684 | 0 | 10,001s |
83 28 | 2 | não res. | 9712819 | 15076786 | 0 | 10,001s |
84 29 | 2 | não res. | 9693709 | 14481126 | 0 | 10,001s |
85 20 | 3 | 20 | 184 | 192 | 0 | 0,001s |
86 21 | 3 | 20 | 33 | 40 | 0 | 0,001s |
87 22 | 3 | 21 | 34 | 42 | 0 | 0,000s |
88 23 | 3 | sem sol. | 384627 | 384626 | 0 | 0,218s |
89 24 | 3 | sem sol. | 1226523 | 1226522 | 0 | 0,814s |
90 25 | 3 | sem sol. | 3461151 | 3461150 | 0 | 2,372s |
91 26 | 3 | sem sol. | 3731307 | 3731306 | 0 | 2,658s |
92 27 | 3 | 27 | 45 | 54 | 0 | 0,000s |
93 28 | 3 | 27 | 86 | 96 | 0 | 0,000s |
94 29 | 3 | 29 | 50 | 58 | 0 | 0,000s |
95 20 | 4 | 20 | 148 | 155 | 0 | 0,000s |
96 21 | 4 | 20 | 33 | 39 | 0 | 0,000s |
97 22 | 4 | 21 | 34 | 41 | 0 | 0,000s |
98 23 | 4 | sem sol. | 1008 | 1007 | 0 | 0,002s |
99 24 | 4 | sem sol. | 1389 | 1388 | 0 | 0,001s |
100 25 | 4 | sem sol. | 1874 | 1873 | 0 | 0,004s |
101 26 | 4 | sem sol. | 1473 | 1472 | 0 | 0,002s |
102 27 | 4 | 27 | 45 | 53 | 0 | 0,000s |
103 28 | 4 | 27 | 81 | 90 | 0 | 0,000s |
104 29 | 4 | 29 | 50 | 57 | 0 | 0,000s |
105----|----|----------|------------|-----------|------------|----------| resolvidas
106Total 1 | 61 | 33144863 | 40524998 | 0 | 55,287s | 7
107Total 2 | 61 | 79935552 | 105290678 | 0 | 71,163s | 3
108Total 3 | 144 | 8804040 | 8804086 | 0 | 6,064s | 10
109Total 4 | 144 | 6135 | 6175 | 0 | 0,009s | 10
110Torneio (#instâncias melhores):
111 |-01-|-02-|-03-|-04-|
112 1 | 7 |-10 |-10 |-13
113 |----|----|----|----|
114 2 -7 | |-10 |-10 |-27
115 |----|----|----|----|
116 3 10 | 10 | | -4 | 16
117 |----|----|----|----|
118 4 10 | 10 | 4 | | 24
119 |----|----|----|----|
120Configuração 1
121P1(Algoritmo): Largura Primeiro | P2(Debug): nada | P3(Ver): 4 | P4(Seed): 1
122P5(Tempo): 10 | P6(Limite): 0 | P7(Repetidos): ignorar | P8(pesoAStar): 100
123P9(ruido): 0 | P10(baralhar): 0 | P11(Max. Avaliações): 1000000 | P12(Move Primeiro): Sim
124P13(População): 20 | P14(Prob. Mutação): 50 | P15(Dist. Mínima): 0
125Configuração 2
126P1(Algoritmo): Profundidade Primeiro | P2(Debug): nada | P3(Ver): 4 | P4(Seed): 1
127P5(Tempo): 10 | P6(Limite): 0 | P7(Repetidos): ignorar | P8(pesoAStar): 100
128P9(ruido): 0 | P10(baralhar): 0 | P11(Max. Avaliações): 1000000 | P12(Move Primeiro): Sim
129P13(População): 20 | P14(Prob. Mutação): 50 | P15(Dist. Mínima): 0
130Configuração 3
131P1(Algoritmo): Profundidade Primeiro | P2(Debug): nada | P3(Ver): 4 | P4(Seed): 1
132P5(Tempo): 10 | P6(Limite): -1 | P7(Repetidos): ignorar | P8(pesoAStar): 100
133P9(ruido): 0 | P10(baralhar): 0 | P11(Max. Avaliações): 1000000 | P12(Move Primeiro): Sim
134P13(População): 20 | P14(Prob. Mutação): 50 | P15(Dist. Mínima): 0
135Configuração 4
136P1(Algoritmo): Profundidade Primeiro | P2(Debug): nada | P3(Ver): 4 | P4(Seed): 1
137P5(Tempo): 10 | P6(Limite): -1 | P7(Repetidos): gerados | P8(pesoAStar): 100
138P9(ruido): 0 | P10(baralhar): 0 | P11(Max. Avaliações): 1000000 | P12(Move Primeiro): Sim
139P13(População): 20 | P14(Prob. Mutação): 50 | P15(Dist. Mínima): 0
140
141
142*/
Representa um estado do problema da partição.
Definition Particao.h:13
TVector< bool > solCompleta
Definition Particao.h:25
TPonto Duplicar(void)
Cria um objecto que é uma cópia deste.
Definition Particao.h:29
void Mutar(void)
Definition Particao.cpp:142
~CParticao(void)
int Distancia(TPonto a)
Definition Particao.cpp:159
void Copiar(TProcuraConstrutiva *objecto)
Definition Particao.h:24
int Avaliar(void)
Definition Particao.cpp:121
void Copiar(TPonto objecto)
Fica com uma cópia do objecto.
Definition Particao.h:38
void Vizinhanca(TVector< TPonto > &vizinhos)
Definition Particao.cpp:132
TVector< int > direita
Definition Particao.h:19
TVector< int > esquerda
Definition Particao.h:19
void Cruzamento(TPonto a, TPonto b)
Definition Particao.cpp:149
TVector< int > numeros
Definition Particao.h:19
void NovaSolucao(void)
Definition Particao.cpp:114
int totalDireita
Definition Particao.h:20
void Inicializar(void)
Coloca o objecto no estado inicial da procura.
void MostrarSolucao(void)
definir para visualizar a solução
Definition Particao.h:49
void Debug(void)
Mostra o estado no ecrã, para debug.
void TesteManual(const char *nome)
Inicializa a interação com o utilizador.
Definition Particao.cpp:107
int totalEsquerda
Definition Particao.h:20
CParticao(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