|
TProcura
Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização
|
| TesteTVector | Aspirador 1 | Aspirador 2 | Puzzle 8 | 8 Damas | Partição | 8 Damas CI | 8 Damas CP | Partição CB |
Execução de exemplo com base no problema das 8 damas, com codificação por permutação. Pode acompanhar o teste executando as ações localmente.
No Visual Studio, selecione o projeto TProcuraMelhorativa, e execute-o. No Linux na pasta .../TProcura/Melhorativa/Teste execute make seguido de ./bin/Release/TProcuraMelhorativa
┌─ Teste TProcuraMelhorativa ──┐
│ 1 - 8 Damas (Inteira) │
│ 2 - 8 Damas (Permutacao) │
│ 3 - Partição (Binária) │
└──────────────────────────────┘
Opção: 2
Vamos entrar no problema 8 Damas Permutação, insira: 2.
8 Damas (Permutação) ┌─ ⚙ Parâmetros ────────────────────────────────────────────────────── │ P1(ALGORITMO): Algoritmo Evolutivo | P2(NIVEL_DEBUG): NADA | P3(SEMENTE): 1 │ P4(LIMITE_TEMPO): 10 | P5(LIMITE_ITERACOES): 1000000 | P6(POPULACAO): 20 │ P7(PROB_CRUZAR): 100 | P8(PROB_MUTAR): 50 | P9(SELECAO): Roleta | P10(PRESSAO): 150 │ P13(SOBREVIVENCIA): Idade | P14(PERC_DESCENDENTES): 100 | P16(ELITISMO): 1 │ P17(IMIGRANTES): 1 | P18(DIVERSIDADE): Limpeza | P19(DIST_MINIMA): 0 │ P20(TIPO_CRUZAR): Order | P21(TIPO_MUTAR): 0 | P22(TIPO_VIZINHO): inserir │ P23(LIMITE_VIZINHOS): 0 | P24(TIPO_DISTANCIA): Hamming └────────────────────────────────────────────────────────────────────── :: :: :: ::♛ :: ::♛ :: :: :: ::♛ :: :: ♛ :: :: :: :: :: ♛ :: :: :: :: ♛ :: ::♛ :: :: :: :: :: ::♛ :: ┌─ ☰ Menu ─────────┬────────────────┬─────────────────────┬──────────────┐ │ 1 📄 Instância │ 2 🔍 Explorar │ 3 ⚙ Parâmetros │ 4 ✔ Solução │ │ 5 ⚖ Indicadores │ 6 ► Executar │ 7 🛠️ Configurações │ 8 🧪 Teste │ └───────────────────┴────────────────┴─────────────────────┴──────────────┘ Opção:
Vamos seguir o exemplo das 8 damas, codificação inteira, e alterar para uma instância mais pequena, de tamanho 4. Insira: 1; 4.
Opção: 1 ┌─ 📄 Instância ─────────────────────────────────────────────────────── │ ID atual: 8 Intervalo: [4–40] │ Prefixo atual: 'instancia_' └────────────────────────────────────────────────────────────────────── Novo ID (ENTER mantém) ou novo prefixo (texto): 4 8 Damas (Permutação) ... ♛ :: :: ♛ ::♛ :: ::♛ :: ... Opção:
A solução inicial usada na codificação inteira (onde podem ocorrer duas damas na mesma coluna) não tem representação na codificação por permutação, em que apenas se permutam posições sem repetições
Vamos resolver a instância manualmente. Insira: 2
Opção: 2 │ 🏆 ⏱ 💰 g:0 ─┴─────────────────── :: ♛ ♛ :: :: :: ::♛ ♛ :: ─┬─────────────────── ├─┬─ 📆 0 ⏱ ──── 💰 g0-6 │ ├───── 🧍🧑🤝🧑🚶 ───── │ │ 🧍 1 1 2 3 0 💰 g:4 │ │ 🧍 2 3 2 1 0 💰 g:6 │ │ 🧍 3 2 0 3 1 💰 g:0 │ ├───── 📏 ───── │ │ 🧍 1 2 3 │ │ ────┼────┼────┼────┼ │ │ 1 │ │ 2│ 3│ │ │ 2 │ 2│ │ 4│ │ │ 3 │ 3│ 4│ │ │ │ ────┴────┴────┴────┴ │ └─■ ⚡ Operação (1 🦠 Mutar, 2 🧬 Cruzar, 3 🧍🧍Vizinhos):
Ao gerar a população inicial foi encontrada de imediato uma solução de custo 0; por isso não foi necessário gerar uma população de tamanho 4.
Assim, vamos sair e colocar uma dimensão maior para poder ver os operadores. Insira: 0; 1; 6; 2.
│ └─■ ⚡ Operação (1 🦠 Mutar, 2 🧬 Cruzar, 3 🧍🧍Vizinhos): 0 └──────────────── 8 Damas (Permutação) ... :: ♛ ♛ :: :: :: ::♛ ♛ :: ... Opção: 1 ┌─ 📄 Instância ─────────────────────────────────────────────────────── │ ID atual: 4 Intervalo: [4–40] │ Prefixo atual: 'instancia_' └────────────────────────────────────────────────────────────────────── Novo ID (ENTER mantém) ou novo prefixo (texto): 6 8 Damas (Permutação) ... :: :: ♛ ♛ :: :: :: :: :: ::♛ :: ♛ :: ::♛ :: :: ::♛ :: :: ... Opção: 2 ├─┬─ 📆 0 ⏱ ──── 💰 g2-4 │ ├───── 🧍🧑🤝🧑🚶 ───── │ │ 🧍 1 2 1 4 3 5 0 💰 g:4 │ │ 🧍 2 0 2 4 5 3 1 💰 g:2 │ │ 🧍 3 5 0 2 3 1 4 💰 g:3 │ │ 🧍 4 0 4 5 2 3 1 💰 g:4 │ ├───── 📏 ───── │ │ 🧍 1 2 3 4 │ │ ────┼────┼────┼────┼────┼ │ │ 1 │ │ 5│ 5│ 6│ │ │ 2 │ 5│ │ 6│ 3│ │ │ 3 │ 5│ 6│ │ 6│ │ │ 4 │ 6│ 3│ 6│ │ │ │ ────┴────┴────┴────┴────┴ │ └─■ ⚡ Operação (1 🦠 Mutar, 2 🧬 Cruzar, 3 🧍🧍Vizinhos):
Agora sim, temos uma população de 4 elementos com custos de 2 a 4. Vamos começar por testar o operador de mutação. Insira: 1; 1.
│ └─■ ⚡ Operação (1 🦠 Mutar, 2 🧬 Cruzar, 3 🧍🧍Vizinhos): 1 │ ┌───── 🦠 ───── │ │ 🧍 [1-4]: 1 │ │ 🧍 2 1 4 3 5 0 mutar vizinho inserir (0,0) │ │ 🦠 2 1 4 3 5 0 │ │ :: ♛ :: │ │ ♛ :: :: │ │ :: :: ♛ │ │ :: ♛ :: │ │ :: :: ::♛ │ │ ♛ :: :: :: │ └────────────── ├─┬─ 📆 1 ⏱ ──── 💰 g2-4 │ ├───── 🧍🧑🤝🧑🚶 ───── │ │ 🧍 1 2 1 4 3 5 0 💰 g:4 │ │ 🧍 2 0 2 4 5 3 1 💰 g:2 │ │ 🧍 3 5 0 2 3 1 4 💰 g:3 │ │ 🧍 4 0 4 5 2 3 1 💰 g:4 │ ├───── 📏 ───── │ │ 🧍 1 2 3 4 │ │ ────┼────┼────┼────┼────┼ │ │ 1 │ │ 5│ 5│ 6│ │ │ 2 │ 5│ │ 6│ 3│ │ │ 3 │ 5│ 6│ │ 6│ │ │ 4 │ 6│ 3│ 6│ │ │ │ ────┴────┴────┴────┴────┴ │ └─■ ⚡ Operação (1 🦠 Mutar, 2 🧬 Cruzar, 3 🧍🧍Vizinhos):
Aqui o operador de mutação é uma inserção: o elemento removido acabou por ser inserido na mesma posição (0), pelo que a permutação não sofreu alterações. Vamos repetir. Insira: 1; 1.
│ └─■ ⚡ Operação (1 🦠 Mutar, 2 🧬 Cruzar, 3 🧍🧍Vizinhos): 1 │ ┌───── 🦠 ───── │ │ 🧍 [1-4]: 1 │ │ 🧍 2 1 4 3 5 0 mutar vizinho inserir (1,3) │ │ 🦠 2 4 3 1 5 0 │ │ :: ♛ :: │ │ :: ::♛ :: │ │ :: ::♛ :: │ │ ♛ :: :: │ │ :: :: ::♛ │ │ ♛ :: :: :: │ └────────────── ├─┬─ 📆 2 ⏱ ──── 💰 g2-4 │ ├───── 🧍🧑🤝🧑🚶 ───── │ │ 🧍 1 2 4 3 1 5 0 💰 g:4 │ │ 🧍 2 0 2 4 5 3 1 💰 g:2 │ │ 🧍 3 5 0 2 3 1 4 💰 g:3 │ │ 🧍 4 0 4 5 2 3 1 💰 g:4 │ ├───── 📏 ───── │ │ 🧍 1 2 3 4 │ │ ────┼────┼────┼────┼────┼ │ │ 1 │ │ 6│ 6│ 5│ │ │ 2 │ 6│ │ 6│ 3│ │ │ 3 │ 6│ 6│ │ 6│ │ │ 4 │ 5│ 3│ 6│ │ │ │ ────┴────┴────┴────┴────┴ │ └─■ ⚡ Operação (1 🦠 Mutar, 2 🧬 Cruzar, 3 🧍🧍Vizinhos):
Tal como na representação inteira, há vários operadores de mutação, sendo o mesmo verdade para os restantes operadores de cruzamento e vizinhança.
Desta vez inserimos o elemento na posição 1 (segundo na ordem), na posição 3 (quarto na ordem). Todos os outros elementos ficaram iguais. Em termos de custos ficou igual, continuam 4 pares de damas a atacarem-se, embora sejam pares distintos.
Vamos agora ao operador de cruzamento, vamos cruzar os dois melhores elementos. Insira: 2; 2; 3; 4.
│ └─■ ⚡ Operação (1 🦠 Mutar, 2 🧬 Cruzar, 3 🧍🧍Vizinhos): 2 │ ┌───── 🧬 ───── │ │ 🧍 Pai [1-4]: 2 │ │ 🧍 Mãe [1-4]: 3 │ │ 🧍 Filho [1-4]: 4 │ │ │ │ 🧍 Pai 0 2 4 5 3 1 │ │ 🧍 Mãe 5 0 2 3 1 4 cruzamento OX 4 - 5 │ │ 🧬 Filho 5 0 2 4 3 1 │ │ :: :: ::♛ │ │ ♛ :: :: :: │ │ :: ♛ :: │ │ :: ::♛ :: │ │ :: ::♛ :: │ │ ♛ :: :: │ └────────────── ├─┬─ 📆 3 ⏱ ──── 💰 g2-4 │ ├───── 🧍🧑🤝🧑🚶 ───── │ │ 🧍 1 2 4 3 1 5 0 💰 g:4 │ │ 🧍 2 0 2 4 5 3 1 💰 g:2 │ │ 🧍 3 5 0 2 3 1 4 💰 g:3 │ │ 🧍 4 5 0 2 4 3 1 💰 g:2 │ ├───── 📏 ───── │ │ 🧍 1 2 3 4 │ │ ────┼────┼────┼────┼────┼ │ │ 1 │ │ 6│ 6│ 6│ │ │ 2 │ 6│ │ 6│ 4│ │ │ 3 │ 6│ 6│ │ 3│ │ │ 4 │ 6│ 4│ 3│ │ │ │ ────┴────┴────┴────┴────┴ │ └─■ ⚡ Operação (1 🦠 Mutar, 2 🧬 Cruzar, 3 🧍🧍Vizinhos):
Neste caso o filho herdou os três primeiros elementos da mãe; os restantes elementos mantiveram a ordem em que aparecem no pai. Há apenas 2 pares de damas que se atacam, tal como na mãe.
Podemos agora testar o operador de vizinhança, tendo como ponto de partida o estado 4 com custo 2. Insira: 3; 4.
│ └─■ ⚡ Operação (1 🦠 Mutar, 2 🧬 Cruzar, 3 🧍🧍Vizinhos): 3 │ ┌───── 🧍🧍 ───── │ │ 🧍 [1-4]: 4 │ │ 🧍 5 0 2 4 3 1 vizinhança inserir (limite 0) │ ├───── Vizinhos ───── │ │ 🧍 1 0 5 2 4 3 1 💰 g:3 │ │ 🧍 2 0 2 5 4 3 1 💰 g:4 │ │ 🧍 3 0 2 4 5 3 1 💰 g:2 │ │ 🧍 4 0 2 4 3 5 1 💰 g:5 │ │ 🧍 5 0 2 4 3 1 5 💰 g:4 │ │ 🧍 6 0 5 2 4 3 1 💰 g:3 │ │ 🧍 7 5 2 0 4 3 1 💰 g:2 │ │ 🧍 8 5 2 4 0 3 1 💰 g:2 │ │ 🧍 9 5 2 4 3 0 1 💰 g:4 │ │ 🧍 10 5 2 4 3 1 0 💰 g:4 │ │ 🧍 11 2 5 0 4 3 1 💰 g:3 │ │ 🧍 12 5 2 0 4 3 1 💰 g:2 │ │ 🧍 13 5 0 4 2 3 1 💰 g:5 │ │ 🧍 14 5 0 4 3 2 1 💰 g:6 │ │ 🧍 15 5 0 4 3 1 2 💰 g:3 │ │ 🧍 16 4 5 0 2 3 1 💰 g:3 │ │ 🧍 17 5 4 0 2 3 1 💰 g:4 │ │ 🧍 18 5 0 4 2 3 1 💰 g:5 │ │ 🧍 19 5 0 2 3 4 1 💰 g:4 │ │ 🧍 20 5 0 2 3 1 4 💰 g:3 │ │ 🧍 21 3 5 0 2 4 1 💰 g:1 │ │ 🧍 22 5 3 0 2 4 1 💰 g:1 │ │ 🧍 23 5 0 3 2 4 1 💰 g:4 │ │ 🧍 24 5 0 2 3 4 1 💰 g:4 │ │ 🧍 25 5 0 2 4 1 3 💰 g:1 │ │ 🧍 26 1 5 0 2 4 3 💰 g:2 │ │ 🧍 27 5 1 0 2 4 3 💰 g:5 │ │ 🧍 28 5 0 1 2 4 3 💰 g:5 │ │ 🧍 29 5 0 2 1 4 3 💰 g:4 │ │ 🧍 30 5 0 2 4 1 3 💰 g:1 │ │ 🧍 [1-30]:
Há 30 vizinhos, existindo vários com custo 1. Vamos escolher um deles e repetir o processo. Insira: 30; 3; 4;
│ │ 🧍 [1-30]: 30 │ │ │ 🏆 ⏱ 💰 g:1 ─┴─────────────────── │ │ :: :: ::♛ │ │ ♛ :: :: :: │ │ :: ♛ :: │ │ :: ::♛ :: │ │ ::♛ :: :: │ │ :: ♛ :: ─┬─────────────────── │ └────────────── ├─┬─ 📆 4 ⏱ ──── 💰 g1-4 │ ├───── 🧍🧑🤝🧑🚶 ───── │ │ 🧍 1 2 4 3 1 5 0 💰 g:4 │ │ 🧍 2 0 2 4 5 3 1 💰 g:2 │ │ 🧍 3 5 0 2 3 1 4 💰 g:3 │ │ 🧍 4 5 0 2 4 1 3 💰 g:1 │ ├───── 📏 ───── │ │ 🧍 1 2 3 4 │ │ ────┼────┼────┼────┼────┼ │ │ 1 │ │ 6│ 6│ 6│ │ │ 2 │ 6│ │ 6│ 6│ │ │ 3 │ 6│ 6│ │ 2│ │ │ 4 │ 6│ 6│ 2│ │ │ │ ────┴────┴────┴────┴────┴ │ └─■ ⚡ Operação (1 🦠 Mutar, 2 🧬 Cruzar, 3 🧍🧍Vizinhos): 3 │ ┌───── 🧍🧍 ───── │ │ 🧍 [1-4]: 4 │ │ 🧍 5 0 2 4 1 3 vizinhança inserir (limite 0) │ ├───── Vizinhos ───── │ │ 🧍 1 0 5 2 4 1 3 💰 g:1 │ │ 🧍 2 0 2 5 4 1 3 💰 g:2 │ │ 🧍 3 0 2 4 5 1 3 💰 g:2 │ │ 🧍 4 0 2 4 1 5 3 💰 g:2 │ │ 🧍 5 0 2 4 1 3 5 💰 g:1 │ │ 🧍 6 0 5 2 4 1 3 💰 g:1 │ │ 🧍 7 5 2 0 4 1 3 💰 g:3 │ │ 🧍 8 5 2 4 0 1 3 💰 g:3 │ │ 🧍 9 5 2 4 1 0 3 💰 g:2 │ │ 🧍 10 5 2 4 1 3 0 💰 g:1 │ │ 🧍 11 2 5 0 4 1 3 💰 g:2 │ │ 🧍 12 5 2 0 4 1 3 💰 g:3 │ │ 🧍 13 5 0 4 2 1 3 💰 g:4 │ │ 🧍 14 5 0 4 1 2 3 💰 g:4 │ │ 🧍 15 5 0 4 1 3 2 💰 g:2 │ │ 🧍 16 4 5 0 2 1 3 💰 g:3 │ │ 🧍 17 5 4 0 2 1 3 💰 g:7 │ │ 🧍 18 5 0 4 2 1 3 💰 g:4 │ │ 🧍 19 5 0 2 1 4 3 💰 g:4 │ │ 🧍 20 5 0 2 1 3 4 💰 g:4 │ │ 🧍 21 1 5 0 2 4 3 💰 g:2 │ │ 🧍 22 5 1 0 2 4 3 💰 g:5 │ │ 🧍 23 5 0 1 2 4 3 💰 g:5 │ │ 🧍 24 5 0 2 1 4 3 💰 g:4 │ │ 🧍 25 5 0 2 4 3 1 💰 g:2 │ │ 🧍 26 3 5 0 2 4 1 💰 g:1 │ │ 🧍 27 5 3 0 2 4 1 💰 g:1 │ │ 🧍 28 5 0 3 2 4 1 💰 g:4 │ │ 🧍 29 5 0 2 3 4 1 💰 g:4 │ │ 🧍 30 5 0 2 4 3 1 💰 g:2 │ │ 🧍 [1-30]:
Neste caso temos novamente vários vizinhos de custo 1, mas nenhum de custo 0. Vamos escolher o primeiro e terminar. Insira: 1; 0.
│ │ 🧍 [1-30]: 1 │ │ │ │ ♛ :: :: │ │ :: :: ♛ │ │ :: ♛ :: │ │ :: ::♛ :: │ │ ::♛ :: :: │ │ :: ♛ :: │ └────────────── ├─┬─ 📆 5 ⏱ ──── 💰 g1-4 │ ├───── 🧍🧑🤝🧑🚶 ───── │ │ 🧍 1 2 4 3 1 5 0 💰 g:4 │ │ 🧍 2 0 2 4 5 3 1 💰 g:2 │ │ 🧍 3 5 0 2 3 1 4 💰 g:3 │ │ 🧍 4 0 5 2 4 1 3 💰 g:1 │ ├───── 📏 ───── │ │ 🧍 1 2 3 4 │ │ ────┼────┼────┼────┼────┼ │ │ 1 │ │ 6│ 6│ 6│ │ │ 2 │ 6│ │ 6│ 5│ │ │ 3 │ 6│ 6│ │ 4│ │ │ 4 │ 6│ 5│ 4│ │ │ │ ────┴────┴────┴────┴────┴ │ └─■ ⚡ Operação (1 🦠 Mutar, 2 🧬 Cruzar, 3 🧍🧍Vizinhos): 0 └──────────────── 8 Damas (Permutação) ... :: :: ::♛ ♛ :: :: :: :: ♛ :: :: ::♛ :: ::♛ :: :: :: ♛ :: ... Opção:
Vamos agora ver os algoritmos evolutivos nos diferentes níveis de debug, para esta instância de tamanho 6.
Insira: 1; 6; 3; 2; 1; ENTER;6.
Opção: 6 ═╤═ ► Execução iniciada ═══. │ 🏆 ⏱ 💰 g:1 ─┴─────────────────── ♛ :: :: :: :: ♛ :: ::♛ :: ♛ :: :: :: :: ♛ ::♛ :: :: ─┬─────────────────── │ 🏆 ⏱ 💰 g:0 ─┴─────────────────── :: ::♛ :: ♛ :: :: :: :: :: ♛ ♛ :: :: :: :: ::♛ ::♛ :: :: ─┬─────────────────── ├─ Parâmetros ─ P1=1 P2=1 P3=1 P4=10 P5=1000000 P6=20 P7=100 P8=50 P9=1 P10=150 P13=1 ├─ ⚙ ─ P14=100 P16=1 P17=1 P18=3 P19=0 P20=3 P21=0 P22=1 P23=0 P24=1 ═╧═ 🏁 Execução terminada ⏱ ═══ 8 Damas (Permutação) ┌─ ⚙ Parâmetros ────────────────────────────────────────────────────── │ P1(ALGORITMO): Algoritmo Evolutivo | P2(NIVEL_DEBUG): ATIVIDADE | P3(SEMENTE): 1 │ P4(LIMITE_TEMPO): 10 | P5(LIMITE_ITERACOES): 1000000 | P6(POPULACAO): 20 │ P7(PROB_CRUZAR): 100 | P8(PROB_MUTAR): 50 | P9(SELECAO): Roleta | P10(PRESSAO): 150 │ P13(SOBREVIVENCIA): Idade | P14(PERC_DESCENDENTES): 100 | P16(ELITISMO): 1 │ P17(IMIGRANTES): 1 | P18(DIVERSIDADE): Limpeza | P19(DIST_MINIMA): 0 │ P20(TIPO_CRUZAR): Order | P21(TIPO_MUTAR): 0 | P22(TIPO_VIZINHO): inserir │ P23(LIMITE_VIZINHOS): 0 | P24(TIPO_DISTANCIA): Hamming └────────────────────────────────────────────────────────────────────── :: ::♛ :: ♛ :: :: :: :: :: ♛ ♛ :: :: :: :: ::♛ ::♛ :: :: ┌─ ⚖ Indicadores ───────────────────────────────────────────────────── │ I1(Resultado): 0 | I2(Tempo(ms)): 0 | I3(Iterações): 169 | I4(Épocas): 7 | │ I5(Gerações): 174 └────────────────────────────────────────────────────────────────────── ... Opção:
Esta execução sabemos que há 7 épocas, pelo que este exemplo é bom para ser visto com maior detalhe. Vamos passar para o modo de detalhe seguinte. Insira: 1; 6; 3; 2; 2; ENTER;6.
Opção: 6 ═╤═ ► Execução iniciada ═══ │ 🏆 ⏱ 💰 g:1 ─┴─────────────────── ♛ :: :: :: :: ♛ :: ::♛ :: ♛ :: :: :: :: ♛ ::♛ :: :: ─┬─────────────────── ├─── 📆 0 ⏱ ──── 💰 g1-8 ├─── 📆 1 ⏱ ──── 💰 g1-6 ├─── 📆 2 ⏱ ──── 💰 g1-9 ├─── 📆 3 ⏱ ──── 💰 g1-9 ├─── 📆 4 ⏱ ──── 💰 g1-8 ├─── 📆 5 ⏱ ──── 💰 g1-7 ├─── 📆 6 ⏱ ──── 💰 g1-11 │ 🏆 ⏱ 💰 g:0 ─┴─────────────────── :: ::♛ :: ♛ :: :: :: :: :: ♛ ♛ :: :: :: :: ::♛ ::♛ :: :: ─┬─────────────────── ├─ Parâmetros ─ P1=1 P2=2 P3=1 P4=10 P5=1000000 P6=20 P7=100 P8=50 P9=1 P10=150 P13=1 ├─ ⚙ ─ P14=100 P16=1 P17=1 P18=3 P19=0 P20=3 P21=0 P22=1 P23=0 P24=1 ═╧═ 🏁 Execução terminada ⏱ ═══ 8 Damas (Permutação) ┌─ ⚙ Parâmetros ────────────────────────────────────────────────────── │ P1(ALGORITMO): Algoritmo Evolutivo | P2(NIVEL_DEBUG): PASSOS | P3(SEMENTE): 1 │ P4(LIMITE_TEMPO): 10 | P5(LIMITE_ITERACOES): 1000000 | P6(POPULACAO): 20 │ P7(PROB_CRUZAR): 100 | P8(PROB_MUTAR): 50 | P9(SELECAO): Roleta | P10(PRESSAO): 150 │ P13(SOBREVIVENCIA): Idade | P14(PERC_DESCENDENTES): 100 | P16(ELITISMO): 1 │ P17(IMIGRANTES): 1 | P18(DIVERSIDADE): Limpeza | P19(DIST_MINIMA): 0 │ P20(TIPO_CRUZAR): Order | P21(TIPO_MUTAR): 0 | P22(TIPO_VIZINHO): inserir │ P23(LIMITE_VIZINHOS): 0 | P24(TIPO_DISTANCIA): Hamming └────────────────────────────────────────────────────────────────────── :: ::♛ :: ♛ :: :: :: :: :: ♛ ♛ :: :: :: :: ::♛ ::♛ :: :: ┌─ ⚖ Indicadores ───────────────────────────────────────────────────── │ I1(Resultado): 0 | I2(Tempo(ms)): 0 | I3(Iterações): 169 | I4(Épocas): 7 | │ I5(Gerações): 174 └────────────────────────────────────────────────────────────────────── ... Opção:
Podemos observar que os custos vão de 1 até à volta de 10. Confirma-se que a melhor solução nunca é degradada com a atual configuração. Vamos avançar no nível de debug. Insira: 1; 6; 3; 2; 3; ENTER;6.
Opção: 6 ═╤═ ► Execução iniciada ═══ │ 🏆 ⏱ 💰 g:1 ─┴─────────────────── ♛ :: :: :: :: ♛ :: ::♛ :: ♛ :: :: :: :: ♛ ::♛ :: :: ─┬─────────────────── ├─┬─ 📆 0 ⏱ ──── 💰 g1-8 [📏 0-6 (μ=4, melhor/pior 4)] │ │🧍 1 2 3 4 5 6 7 8 9 10 │ │────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ 0│ 4│ 2│ 3│ 4│ 6│ 6│ 4│ 2│ 5│ 4│ │ │ 10│ 2│ 3│ 2│ 5│ 6│ 8│ 2│ 2│ 1│ 3│ │ └──────────────────────────────────── ├─┬─ 📆 1 ⏱ ──── 💰 g1-6 [📏 2-6 (μ=5, melhor/pior 6)] │ │🧍 1 2 3 4 5 6 7 8 9 10 │ │────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ 0│ 4│ 2│ 2│ 6│ 1│ 2│ 3│ 5│ 4│ 2│ │ │ 10│ 4│ 2│ 4│ 4│ 2│ 5│ 1│ 3│ 6│ 5│ │ └──────────────────────────────────── ├─┬─ 📆 2 ⏱ ──── 💰 g1-9 [📏 2-6 (μ=4, melhor/pior 4)] │ │🧍 1 2 3 4 5 6 7 8 9 10 │ │────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ 0│ 4│ 4│ 9│ 3│ 5│ 4│ 3│ 1│ 3│ 3│ │ │ 10│ 9│ 3│ 4│ 7│ 1│ 1│ 3│ 4│ 4│ 2│ │ └──────────────────────────────────── ├─┬─ 📆 3 ⏱ ──── 💰 g1-9 [📏 2-6 (μ=5, melhor/pior 6)] │ │🧍 1 2 3 4 5 6 7 8 9 10 │ │────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ 0│ 1│ 1│ 3│ 2│ 3│ 3│ 2│ 9│ 2│ 2│ │ │ 10│ 7│ 7│ 3│ 2│ 7│ 3│ 4│ 3│ 3│ 4│ │ └──────────────────────────────────── ├─┬─ 📆 4 ⏱ ──── 💰 g1-8 [📏 2-6 (μ=4, melhor/pior 3)] │ │🧍 1 2 3 4 5 6 7 8 9 10 │ │────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ 0│ 8│ 3│ 3│ 1│ 2│ 2│ 1│ 1│ 7│ 3│ │ │ 10│ 3│ 4│ 5│ 6│ 3│ 3│ 2│ 7│ 1│ 5│ │ └──────────────────────────────────── ├─┬─ 📆 5 ⏱ ──── 💰 g1-7 [📏 2-6 (μ=5, melhor/pior 6)] │ │🧍 1 2 3 4 5 6 7 8 9 10 │ │────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ 0│ 5│ 1│ 5│ 4│ 2│ 2│ 1│ 2│ 3│ 4│ │ │ 10│ 2│ 5│ 2│ 6│ 7│ 5│ 4│ 4│ 4│ 2│ │ └──────────────────────────────────── ├─┬─ 📆 6 ⏱ ──── 💰 g1-11 [📏 2-6 (μ=5, melhor/pior 5)] │ │🧍 1 2 3 4 5 6 7 8 9 10 │ │────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ 0│ 7│ 5│ 1│ 4│ 2│ 5│ 2│ 5│ 3│ 2│ │ │ 10│ 3│ 3│ 2│ 11│ 2│ 7│ 4│ 2│ 7│ 3│ │ └──────────────────────────────────── │ 🏆 ⏱ 💰 g:0 ─┴─────────────────── :: ::♛ :: ♛ :: :: :: :: :: ♛ ♛ :: :: :: :: ::♛ ::♛ :: :: ─┬─────────────────── ├─ Parâmetros ─ P1=1 P2=3 P3=1 P4=10 P5=1000000 P6=20 P7=100 P8=50 P9=1 P10=150 P13=1 ├─ ⚙ ─ P14=100 P16=1 P17=1 P18=3 P19=0 P20=3 P21=0 P22=1 P23=0 P24=1 ═╧═ 🏁 Execução terminada ⏱ ═══ 8 Damas (Permutação) ┌─ ⚙ Parâmetros ────────────────────────────────────────────────────── │ P1(ALGORITMO): Algoritmo Evolutivo | P2(NIVEL_DEBUG): DETALHE | P3(SEMENTE): 1 │ P4(LIMITE_TEMPO): 10 | P5(LIMITE_ITERACOES): 1000000 | P6(POPULACAO): 20 │ P7(PROB_CRUZAR): 100 | P8(PROB_MUTAR): 50 | P9(SELECAO): Roleta | P10(PRESSAO): 150 │ P13(SOBREVIVENCIA): Idade | P14(PERC_DESCENDENTES): 100 | P16(ELITISMO): 1 │ P17(IMIGRANTES): 1 | P18(DIVERSIDADE): Limpeza | P19(DIST_MINIMA): 0 │ P20(TIPO_CRUZAR): Order | P21(TIPO_MUTAR): 0 | P22(TIPO_VIZINHO): inserir │ P23(LIMITE_VIZINHOS): 0 | P24(TIPO_DISTANCIA): Hamming └────────────────────────────────────────────────────────────────────── :: ::♛ :: ♛ :: :: :: :: :: ♛ ♛ :: :: :: :: ::♛ ::♛ :: :: ┌─ ⚖ Indicadores ───────────────────────────────────────────────────── │ I1(Resultado): 0 | I2(Tempo(ms)): 0 | I3(Iterações): 169 | I4(Épocas): 7 | │ I5(Gerações): 174 └────────────────────────────────────────────────────────────────────── ... Opção:
Podemos observar que a diversidade mantém-se, sendo a distância média de 4 a 5 unidades. Já sabiamos a variação do melhor e pior custo, mas ao ver o mapa completo podemos ter a noção de que o pior custo é apenas de um ou outro elemento. A maior parte dos elementos têm um custo baixo. Há épocas que têm mais que um elemento com custo 1, mas a população não fica dominada por soluções todas do mesmo custo. Vamos ver agora o detalhe completo. Insira: 1; 6; 3; 2; 4; ENTER; 6.
Opção: 6 ═╤═ ► Execução iniciada ═══ │ 🏆 ⏱ 💰 g:1 ─┴─────────────────── ♛ :: :: :: :: ♛ :: ::♛ :: ♛ :: :: :: :: ♛ ::♛ :: :: ─┬─────────────────── ├─┬─ 📆 0 ⏱ ──── 💰 g1-8 │ ├───── 🧍🧑🤝🧑🚶 ───── │ │ 🧍 1 2 1 4 3 5 0 💰 g:4 │ │ 🧍 2 0 2 4 5 3 1 💰 g:2 │ │ 🧍 3 5 0 2 3 1 4 💰 g:3 │ │ 🧍 4 0 4 5 2 3 1 💰 g:4 │ │ 🧍 5 1 2 5 4 3 0 💰 g:6 │ │ 🧍 6 4 0 1 2 3 5 💰 g:6 │ │ 🧍 7 2 5 4 0 3 1 💰 g:4 │ │ 🧍 8 2 4 1 0 3 5 💰 g:2 │ │ 🧍 9 4 0 2 1 3 5 💰 g:5 │ │ 🧍 10 0 5 4 2 3 1 💰 g:4 │ │ 🧍 11 1 5 3 0 4 2 💰 g:2 │ │ 🧍 12 2 1 3 0 5 4 💰 g:3 │ │ 🧍 13 1 2 0 5 3 4 💰 g:2 │ │ 🧍 14 0 2 4 3 5 1 💰 g:5 │ │ 🧍 15 4 0 1 2 3 5 💰 g:6 │ │ 🧍 16 1 0 3 4 5 2 💰 g:8 │ │ 🧍 17 4 2 1 5 3 0 💰 g:2 │ │ 🧍 18 1 4 5 0 2 3 💰 g:2 │ │ 🧍 19 0 5 3 1 4 2 💰 g:1 │ │ 🧍 20 4 3 0 5 1 2 💰 g:3 │ ├───── 📏 ───── │ │ 🧍 🧍 📏 │ │ ────┼────┼────┼ │ │ 1 │2 │ 5│ │ │ 3 │4 │ 6│ │ │ 5 │6 │ 5│ │ │ 7 │8 │ 3│ │ │ 9 │10 │ 5│ │ │ 11 │12 │ 4│ │ │ 13 │14 │ 5│ │ │ 15 │16 │ 5│ │ │ 17 │18 │ 6│ │ │ 19 │20 │ 5│ │ │ ────┴────┴────┴ │ ├─┬─── FASE 🧩 Selecionar 20 🧑🤝🧑 pais ───── │ │ ├───── Roleta, pressão 150 ───── │ │ │ 100% 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 41│ 62│ 57│ 43│ 30│ 28│ 46│ 72│ 38│ 49│ │ │ │ 10│ 67│ 54│ 70│ 36│ 33│ 25│ 64│ 59│ 75│ 51│ │ │ ├───── Número de seleções ───── │ │ │ #Pai 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 1│ 2│ 1│ 1│ 0│ 1│ 1│ 1│ 1│ 1│ │ │ │ 10│ 1│ 1│ 2│ 0│ 1│ 0│ 2│ 1│ 1│ 1│ │ │ └──────────────────────────────────── │ ├─┬─── FASE 🧬 Reproduzir 20 pais ───── │ │ ├───── Pais (🧑🤝🧑 ) ───── │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 2⇄ 17│ 19⇄ 4│ 3⇄ 17│ 7⇄ 20│ 2⇄ 13│ │ │ │ 10│ 1⇄ 13│ 12⇄ 9│ 10⇄ 11│ 6⇄ 15│ 18⇄ 8│ │ │ ├───── Pais (💰 ) ───── │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 2⇄ 2│ 1⇄ 4│ 3⇄ 2│ 4⇄ 3│ 2⇄ 2│ │ │ │ 10│ 4⇄ 2│ 3⇄ 5│ 4⇄ 2│ 6⇄ 6│ 2⇄ 2│ │ │ ├───── Filhos (💰 ) 🧬 10 🦠 10 ───── 📈 3 🟰 10 📉 7 │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 6⇄ 3│ 1⇄ 5│ 2⇄ 4│ 4⇄ 2│ 4⇄ 2│ │ │ │ 10│ 4⇄ 5│ 3⇄ 5│ 2⇄ 1│ 6⇄ 2│ 2⇄ 4│ │ │ └──────────────────────────────────── │ ├─┬─── FASE ⚔️ Sobrevivência ───── │ │ ├───── ⏳ Idade ───── │ │ ├───── 🚶🌍 Imigrantes 7✖ →🆕 ───── │ │ └──────────────────────────────────── │ └───── FASE 🌈 Diversidade - limpeza ───── ├─┬─ 📆 1 ⏱ ──── 💰 g1-6 │ ├───── 🧍🧑🤝🧑🚶 ───── │ │ 🧍 1 0 4 5 2 3 1 💰 g:4 │ │ 🧍 2 4 0 5 2 1 3 💰 g:2 │ │ 🧍 3 2 4 0 1 3 5 💰 g:2 │ │ 🧍 4 4 0 1 2 3 5 💰 g:6 │ │ 🧍 5 0 2 5 3 1 4 💰 g:1 │ │ 🧍 6 0 5 4 2 1 3 💰 g:2 │ │ 🧍 7 2 1 3 0 5 4 💰 g:3 │ │ 🧍 8 2 1 0 5 3 4 💰 g:5 │ │ 🧍 9 1 2 4 3 5 0 💰 g:4 │ │ 🧍 10 1 2 0 5 3 4 💰 g:2 │ │ 🧍 11 1 0 2 4 5 3 💰 g:4 │ │ 🧍 12 4 0 3 5 1 2 💰 g:2 │ │ 🧍 13 4 0 5 1 2 3 💰 g:4 │ │ 🧍 14 3 2 1 5 4 0 💰 g:4 │ │ 🧍 15 5 0 2 4 3 1 💰 g:2 │ │ 🧍 16 5 3 4 1 2 0 💰 g:5 │ │ 🧍 17 0 5 3 1 4 2 💰 g:1 │ │ 🧍 18 4 1 5 3 0 2 💰 g:3 │ │ 🧍 19 1 4 5 2 3 0 💰 g:6 │ │ 🧍 20 0 4 5 3 2 1 💰 g:5 │ ├───── 📏 ───── │ │ 🧍 🧍 📏 │ │ ────┼────┼────┼ │ │ 1 │2 │ 4│ │ │ 3 │4 │ 4│ │ │ 5 │6 │ 4│ │ │ 7 │8 │ 3│ │ │ 9 │10 │ 4│ │ │ 11 │12 │ 5│ │ │ 13 │14 │ 6│ │ │ 15 │16 │ 5│ │ │ 17 │18 │ 5│ │ │ 19 │20 │ 4│ │ │ ────┴────┴────┴ │ ├─┬─── FASE 🧩 Selecionar 20 🧑🤝🧑 pais ───── │ │ ├───── Roleta, pressão 150 ───── │ │ │ 100% 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 43│ 62│ 59│ 28│ 75│ 64│ 51│ 36│ 41│ 67│ │ │ │ 10│ 38│ 57│ 46│ 49│ 70│ 30│ 72│ 54│ 25│ 33│ │ │ ├───── Número de seleções ───── │ │ │ #Pai 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 1│ 1│ 2│ 0│ 2│ 1│ 1│ 1│ 0│ 2│ │ │ │ 10│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 0│ │ │ └──────────────────────────────────── │ ├─┬─── FASE 🧬 Reproduzir 20 pais ───── │ │ ├───── Pais (🧑🤝🧑 ) ───── │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 10⇄ 12│ 13⇄ 3│ 15⇄ 5│ 2⇄ 16│ 18⇄ 19│ │ │ │ 10│ 11⇄ 10│ 17⇄ 14│ 5⇄ 6│ 3⇄ 8│ 1⇄ 7│ │ │ ├───── Pais (💰 ) ───── │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 2⇄ 2│ 4⇄ 2│ 2⇄ 1│ 2⇄ 5│ 3⇄ 6│ │ │ │ 10│ 4⇄ 2│ 1⇄ 4│ 1⇄ 2│ 2⇄ 5│ 4⇄ 3│ │ │ ├───── Filhos (💰 ) 🧬 10 🦠 14 ───── 📈 1 🟰 12 📉 7 │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 4⇄ 4│ 1⇄ 3│ 1⇄ 1│ 7⇄ 4│ 3⇄ 9│ │ │ │ 10│ 3⇄ 3│ 1⇄ 3│ 4⇄ 5│ 3⇄ 9│ 4⇄ 4│ │ │ └──────────────────────────────────── │ ├─┬─── FASE ⚔️ Sobrevivência ───── │ │ ├───── ⏳ Idade ───── │ │ ├───── 🚶🌍 Imigrantes 18✖ →🆕 ───── │ │ └──────────────────────────────────── │ └───── FASE 🌈 Diversidade - limpeza ───── ├─┬─ 📆 2 ⏱ ──── 💰 g1-9 ├─┬─ 📆 3 ⏱ ──── 💰 g1-9 ├─┬─ 📆 4 ⏱ ──── 💰 g1-8 ├─┬─ 📆 5 ⏱ ──── 💰 g1-7 │ ├───── 🧍🧑🤝🧑🚶 ───── │ │ 🧍 1 4 0 2 1 3 5 💰 g:5 │ │ 🧍 2 4 0 1 3 5 2 💰 g:1 │ │ 🧍 3 0 3 2 1 5 4 💰 g:5 │ │ 🧍 4 5 4 3 1 0 2 💰 g:4 │ │ 🧍 5 3 2 5 1 4 0 💰 g:2 │ │ 🧍 6 2 1 5 3 0 4 💰 g:2 │ │ 🧍 7 5 4 1 3 0 2 💰 g:1 │ │ 🧍 8 0 2 5 1 3 4 💰 g:2 │ │ 🧍 9 0 3 4 2 1 5 💰 g:3 │ │ 🧍 10 4 5 1 3 2 0 💰 g:4 │ │ 🧍 11 0 5 3 1 2 4 💰 g:2 │ │ 🧍 12 4 1 2 5 0 3 💰 g:5 │ │ 🧍 13 1 4 2 5 0 3 💰 g:2 │ │ 🧍 14 1 4 5 2 3 0 💰 g:6 │ │ 🧍 15 2 3 4 5 1 0 💰 g:7 │ │ 🧍 16 3 2 4 0 5 1 💰 g:5 │ │ 🧍 17 1 3 2 5 0 4 💰 g:4 │ │ 🧍 18 1 3 0 4 5 2 💰 g:4 │ │ 🧍 19 4 2 1 0 5 3 💰 g:4 │ │ 🧍 20 4 3 5 0 2 1 💰 g:2 │ ├───── 📏 ───── │ │ 🧍 🧍 📏 │ │ ────┼────┼────┼ │ │ 1 │2 │ 4│ │ │ 3 │4 │ 5│ │ │ 5 │6 │ 5│ │ │ 7 │8 │ 6│ │ │ 9 │10 │ 6│ │ │ 11 │12 │ 6│ │ │ 13 │14 │ 4│ │ │ 15 │16 │ 5│ │ │ 17 │18 │ 4│ │ │ 19 │20 │ 4│ │ │ ────┴────┴────┴ │ ├─┬─── FASE 🧩 Selecionar 20 🧑🤝🧑 pais ───── │ │ ├───── Roleta, pressão 150 ───── │ │ │ 100% 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 33│ 75│ 38│ 41│ 57│ 62│ 72│ 67│ 54│ 46│ │ │ │ 10│ 59│ 30│ 64│ 28│ 25│ 36│ 49│ 51│ 43│ 70│ │ │ ├───── Número de seleções ───── │ │ │ #Pai 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 0│ 2│ 1│ 0│ 1│ 2│ 1│ 2│ 1│ 1│ │ │ │ 10│ 1│ 0│ 2│ 0│ 1│ 0│ 1│ 1│ 1│ 2│ │ │ └──────────────────────────────────── │ ├─┬─── FASE 🧬 Reproduzir 20 pais ───── │ │ ├───── Pais (🧑🤝🧑 ) ───── │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 2⇄ 17│ 15⇄ 13│ 2⇄ 8│ 11⇄ 6│ 8⇄ 9│ │ │ │ 10│ 10⇄ 13│ 5⇄ 20│ 18⇄ 7│ 19⇄ 3│ 6⇄ 20│ │ │ ├───── Pais (💰 ) ───── │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 1⇄ 4│ 7⇄ 2│ 1⇄ 2│ 2⇄ 2│ 2⇄ 3│ │ │ │ 10│ 4⇄ 2│ 2⇄ 2│ 4⇄ 1│ 4⇄ 5│ 2⇄ 2│ │ │ ├───── Filhos (💰 ) 🧬 10 🦠 10 ───── 📈 0 🟰 14 📉 6 │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 2⇄ 4│ 7⇄ 2│ 11⇄ 2│ 3⇄ 3│ 2⇄ 3│ │ │ │ 10│ 5⇄ 2│ 5⇄ 2│ 4⇄ 1│ 5⇄ 5│ 7⇄ 2│ │ │ └──────────────────────────────────── │ ├─┬─── FASE ⚔️ Sobrevivência ───── │ │ ├───── ⏳ Idade ───── │ │ ├───── 🚶🌍 Imigrantes 1✖ →🆕 ───── │ │ └──────────────────────────────────── │ └───── FASE 🌈 Diversidade - limpeza ───── 🧹 3 ├─┬─ 📆 6 ⏱ 1ms ──── 💰 g1-11 │ ├───── 🧍🧑🤝🧑🚶 ───── │ │ 🧍 1 4 5 3 2 1 0 💰 g:7 │ │ 🧍 2 0 3 2 1 5 4 💰 g:5 │ │ 🧍 3 0 4 1 3 5 2 💰 g:1 │ │ 🧍 4 1 3 0 4 5 2 💰 g:4 │ │ 🧍 5 4 3 5 0 2 1 💰 g:2 │ │ 🧍 6 5 3 2 1 4 0 💰 g:5 │ │ 🧍 7 4 2 5 0 3 1 💰 g:2 │ │ 🧍 8 4 5 3 1 2 0 💰 g:5 │ │ 🧍 9 4 0 3 2 5 1 💰 g:3 │ │ 🧍 10 0 2 4 1 5 3 💰 g:2 │ │ 🧍 11 1 2 3 5 0 4 💰 g:3 │ │ 🧍 12 3 0 5 4 2 1 💰 g:3 │ │ 🧍 13 0 2 5 1 3 4 💰 g:2 │ │ 🧍 14 5 0 1 2 3 4 💰 g:11 │ │ 🧍 15 1 4 2 5 0 3 💰 g:2 │ │ 🧍 16 2 3 4 5 1 0 💰 g:7 │ │ 🧍 17 3 1 2 5 4 0 💰 g:4 │ │ 🧍 18 2 5 1 3 0 4 💰 g:2 │ │ 🧍 19 4 3 5 1 0 2 💰 g:7 │ │ 🧍 20 0 4 2 5 1 3 💰 g:3 │ ├───── 📏 ───── │ │ 🧍 🧍 📏 │ │ ────┼────┼────┼ │ │ 1 │2 │ 6│ │ │ 3 │4 │ 4│ │ │ 5 │6 │ 5│ │ │ 7 │8 │ 5│ │ │ 9 │10 │ 5│ │ │ 11 │12 │ 6│ │ │ 13 │14 │ 4│ │ │ 15 │16 │ 5│ │ │ 17 │18 │ 6│ │ │ 19 │20 │ 6│ │ │ ────┴────┴────┴ │ ├─┬─── FASE 🧩 Selecionar 20 🧑🤝🧑 pais ───── │ │ ├───── Roleta, pressão 150 ───── │ │ │ 100% 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 33│ 38│ 75│ 43│ 64│ 36│ 70│ 41│ 49│ 72│ │ │ │ 10│ 54│ 57│ 67│ 25│ 62│ 28│ 46│ 59│ 30│ 51│ │ │ ├───── Número de seleções ───── │ │ │ #Pai 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 1│ 1│ 1│ 1│ 1│ 1│ 2│ 0│ 1│ 2│ │ │ │ 10│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 1│ 0│ 1│ │ │ └──────────────────────────────────── │ ├─┬─── FASE 🧬 Reproduzir 20 pais ───── │ │ ├───── Pais (🧑🤝🧑 ) ───── │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 15⇄ 6│ 5⇄ 14│ 3⇄ 2│ 10⇄ 1│ 10⇄ 12│ │ │ │ 10│ 9⇄ 20│ 7⇄ 16│ 13⇄ 18│ 7⇄ 11│ 4⇄ 17│ │ 🏆 ⏱ 1ms 💰 g:0 ─┴─────────────────── :: ::♛ :: ♛ :: :: :: :: :: ♛ ♛ :: :: :: :: ::♛ ::♛ :: :: ─┬─────────────────── │ │ ├───── Pais (💰 ) ───── │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 2⇄ 5│ 2⇄ 11│ 1⇄ 5│ 2⇄ 7│ 2⇄ 3│ │ │ │ 10│ 3⇄ 3│ 2⇄ 7│ 2⇄ 2│ 2⇄ 3│ 4⇄ 4│ │ │ ├───── Filhos (💰 ) 🧬 10 🦠 9 ───── 📈 4 🟰 13 📉 3 │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 4⇄ 6│ 4⇄ 11│ 2⇄ 3│ 5⇄ 5│ 2⇄ 0│ │ │ │ 10│ 2⇄ 1│ 2⇄ 7│ 3⇄ 2│ 2⇄ 5│ 3⇄ 4│ │ │ └──────────────────────────────────── ├─ Parâmetros ─ P1=1 P2=4 P3=1 P4=10 P5=1000000 P6=20 P7=100 P8=50 P9=1 P10=150 P13=1 ├─ ⚙ ─ P14=100 P16=1 P17=1 P18=3 P19=0 P20=3 P21=0 P22=1 P23=0 P24=1 ═╧═ 🏁 Execução terminada ⏱ 1ms ═══ 8 Damas (Permutação) ┌─ ⚙ Parâmetros ────────────────────────────────────────────────────── │ P1(ALGORITMO): Algoritmo Evolutivo | P2(NIVEL_DEBUG): COMPLETO | P3(SEMENTE): 1 │ P4(LIMITE_TEMPO): 10 | P5(LIMITE_ITERACOES): 1000000 | P6(POPULACAO): 20 │ P7(PROB_CRUZAR): 100 | P8(PROB_MUTAR): 50 | P9(SELECAO): Roleta | P10(PRESSAO): 150 │ P13(SOBREVIVENCIA): Idade | P14(PERC_DESCENDENTES): 100 | P16(ELITISMO): 1 │ P17(IMIGRANTES): 1 | P18(DIVERSIDADE): Limpeza | P19(DIST_MINIMA): 0 │ P20(TIPO_CRUZAR): Order | P21(TIPO_MUTAR): 0 | P22(TIPO_VIZINHO): inserir │ P23(LIMITE_VIZINHOS): 0 | P24(TIPO_DISTANCIA): Hamming └────────────────────────────────────────────────────────────────────── :: ::♛ :: ♛ :: :: :: :: :: ♛ ♛ :: :: :: :: ::♛ ::♛ :: :: ┌─ ⚖ Indicadores ───────────────────────────────────────────────────── │ I1(Resultado): 0 | I2(Tempo(ms)): 1 | I3(Iterações): 169 | I4(Épocas): 7 | │ I5(Gerações): 174 └────────────────────────────────────────────────────────────────────── ... Opção:
Podemos identificar na última época o filho 10 com custo 0, gerado por pais de custo 2 e 3. Vamos colocar os pais, que são os elementos 10 e 12, junto com o filho com a solução:
0 2 4 1 5 33 0 5 4 2 13 0 4 1 5 2É visível que os dois primeiros elementos do filho provêm de um dos pais, enquanto os restantes provêm do outro. Nenhum dos pais tinha custo 1. Se a população estivesse dominada por elementos de custo 1, a probabilidade de selecionar simultaneamente estes dois pais seria menor, reduzindo a hipótese de gerar a solução por cruzamento
Atendendo ao volume de parâmetros nos algoritmos evolutivos, estes testes vão utilizar desde logo um cluster (Deucalion).
Neste estudo foi identificada a melhor parametrização para este problema e codificação: P6=10 P7=0 P8=100 P9=2 P11=10 P12=100 P13=3 P14=100 P15=2 P16=3 P17=1 P18=3 P19=0 P24=1 P21=0 P22=2 P23=0.
Podemos ver como a alteração da parametrização afeta este exemplo:
Opção: 6 ═╤═ ► Execução iniciada ═══ ├─┬─ 📆 0 ⏱ ──── 💰 g2-6 │ ├───── 🧍🧑🤝🧑🚶 ───── │ │ 🧍 1 2 1 4 3 5 0 💰 g:4 │ │ 🧍 2 0 2 4 5 3 1 💰 g:2 │ │ 🧍 3 5 0 2 3 1 4 💰 g:3 │ │ 🧍 4 0 4 5 2 3 1 💰 g:4 │ │ 🧍 5 1 2 5 4 3 0 💰 g:6 │ │ 🧍 6 4 0 1 2 3 5 💰 g:6 │ │ 🧍 7 2 5 4 0 3 1 💰 g:4 │ │ 🧍 8 2 4 1 0 3 5 💰 g:2 │ │ 🧍 9 4 0 2 1 3 5 💰 g:5 │ │ 🧍 10 0 5 4 2 3 1 💰 g:4 │ ├───── 📏 ───── │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ 1 │ │ 5│ 5│ 6│ 5│ 6│ 4│ 5│ 6│ 5│ │ │ 2 │ 5│ │ 6│ 3│ 4│ 5│ 3│ 5│ 5│ 2│ │ │ 3 │ 5│ 6│ │ 6│ 6│ 5│ 6│ 6│ 4│ 6│ │ │ 4 │ 6│ 3│ 6│ │ 4│ 4│ 4│ 4│ 5│ 2│ │ │ 5 │ 5│ 4│ 6│ 4│ │ 5│ 5│ 5│ 5│ 5│ │ │ 6 │ 6│ 5│ 5│ 4│ 5│ │ 5│ 3│ 2│ 4│ │ │ 7 │ 4│ 3│ 6│ 4│ 5│ 5│ │ 3│ 5│ 2│ │ │ 8 │ 5│ 5│ 6│ 4│ 5│ 3│ 3│ │ 4│ 5│ │ │ 9 │ 6│ 5│ 4│ 5│ 5│ 2│ 5│ 4│ │ 5│ │ │ 10 │ 5│ 2│ 6│ 2│ 5│ 4│ 2│ 5│ 5│ │ │ │ ────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴ │ ├─┬─── FASE 🧩 Selecionar 10 🧑🤝🧑 pais ───── │ │ ├───── Torneio, tamanho 10, probabilidade melhor 100 ───── │ │ ├───── Número de seleções ───── │ │ │ #Pai 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 0│ 5│ 1│ 0│ 0│ 0│ 0│ 4│ 0│ 0│ │ │ └──────────────────────────────────── │ ├─┬─── FASE 🧬 Reproduzir 10 pais ───── │ │ ├───── Pais (🧑🤝🧑 ) ───── │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 8⇄ 2│ 3⇄ 2│ 8⇄ 8│ 8⇄ 2│ 2⇄ 2│ │ 🏆 ⏱ 💰 g:0 ─┴─────────────────── :: :: ♛ ::♛ :: :: ♛ :: :: :: :: ♛ :: ::♛ :: ♛ :: :: ─┬─────────────────── │ │ ├───── Pais (💰 ) ───── │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 2⇄ 2│ 3⇄ 2│ 2⇄ 2│ 2⇄ 2│ 2⇄ 2│ │ │ ├───── Filhos (💰 ) 🧬 0 🦠 10 ───── 📈 1 🟰 4 📉 5 │ │ │ 🧍 1 2 3 4 5 6 7 8 9 10 │ │ │ ────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼ │ │ │ 0│ 4⇄ 0│ 3⇄ 2│ 4⇄ 2│ 5⇄ 6│ 2⇄ 3│ │ │ └──────────────────────────────────── ├─ Parâmetros ─ P1=1 P2=4 P3=1 P4=10 P5=1000000 P6=10 P7=0 P8=100 P9=2 P11=10 P12=100 ├─ ⚙ ─ P13=3 P14=100 P15=2 P16=3 P17=1 P18=3 P19=0 P20=3 P21=0 P22=2 P23=0 P24=1 ═╧═ 🏁 Execução terminada ⏱ ═══ 8 Damas (Permutação) ┌─ ⚙ Parâmetros ────────────────────────────────────────────────────── │ P1(ALGORITMO): Algoritmo Evolutivo | P2(NIVEL_DEBUG): COMPLETO | P3(SEMENTE): 1 │ P4(LIMITE_TEMPO): 10 | P5(LIMITE_ITERACOES): 1000000 | P6(POPULACAO): 10 │ P7(PROB_CRUZAR): 0 | P8(PROB_MUTAR): 100 | P9(SELECAO): Torneio | P11(TAMANHO_TORNEIO): 10 │ P12(PROB_MELHOR_TORNEIO): 100 | P13(SOBREVIVENCIA): round-robin | P14(PERC_DESCENDENTES): 100 │ P15(Q_ROUND_ROBIN): 2 | P16(ELITISMO): 3 | P17(IMIGRANTES): 1 | P18(DIVERSIDADE): Limpeza │ P19(DIST_MINIMA): 0 | P20(TIPO_CRUZAR): Order | P21(TIPO_MUTAR): 0 | P22(TIPO_VIZINHO): trocaPar │ P23(LIMITE_VIZINHOS): 0 | P24(TIPO_DISTANCIA): Hamming └────────────────────────────────────────────────────────────────────── :: :: ♛ ::♛ :: :: ♛ :: :: :: :: ♛ :: ::♛ :: ♛ :: :: ┌─ ⚖ Indicadores ───────────────────────────────────────────────────── │ I1(Resultado): 0 | I2(Tempo(ms)): 0 | I3(Iterações): 21 | I4(Épocas): 1 | │ I5(Gerações): 20 └────────────────────────────────────────────────────────────────────── ... Opção:
Com a configuração otimizada, bastou uma época para encontrar a solução para esta instância. O filho 2 foi gerado de dois pais de custo 2, e tem um irmão de custo 4. Os pais são os elementos 8 e 2. Estes pais têm ambos o melhor custo, e foram escolhidos como pais 4 e 5 vezes. Esta situação ocorre atendendo a que o método de seleção é um torneio de tamanho 10. Acabou por não serem vezes a mais, já que fizeram para também nos elementos 7 e 8, e tiveram filhos de custo 5 e 6.
| TesteTVector | Aspirador 1 | Aspirador 2 | Puzzle 8 | 8 Damas | Partição | 8 Damas CI | 8 Damas CP | Partição CB |