Escolar Documentos
Profissional Documentos
Cultura Documentos
1 Introdução
Este relatório tem como objetivo apresentar os resultado obtidos na implementação da
solução do problema das N-Rainhas utilizando algoritmos evolucionários, especificamente os
algoritmos genéticos. O problema das N-Rainhas consiste em posicionar N rainhas em um
tabuleiro retangular NxN de maneira que nenhuma das rainhas se coloque em xeque.
1
Figura 2: Ilustração da representação genotı́pica do posicionamento das rainhas no tabuleiro.
2
Figura 3: Pseudo código utilizado no algoritmo genético das N-Rainhas.
2 Código MatLab
2.1 Parametrização e criação da população inicial
No código acima o número de rainhas (N), o tamanho da população (M) e número máximo
de gerações são informados. Uma matriz MxN de zeros é gerada e na sequência é preenchida
com soluções aleatórias criadas pela função randperm. Essas soluções são avaliadas e essa
informação é armazenada em uma coluna extra na matriz da população, onde a informação
da N+1 coluna é a qualidade da solução. A partir dessa coluna a população é ordenada em
forma crescente de qualidade, lembrando que tão melhor é uma solução quanto mais próximo
de zero for sua avaliação.
3
2.2 Verificação de solução ótima na população inicial
No trecho acima é feita uma verificação inicial, onde é checada a possibilidade de algum
indivı́duo da população já ser solução do problema, interrompendo o algoritmo é informando
qual a solução inicial que já resolve o problema.
4
Como definido na especificação do problema, a mutação pode ocorrer com uma probabi-
lidade 80%. Para isso é gerado um número aleatório entre 0 e 10. Caso o valor seja maior
do que 2, o processo de mutação ocorre. São gerados dois novos números aleatórios entre 1
e N, que representam as posições dos vetores que sofrerão a troca simples entre si, gerando
uma pertubação ao acaso nos filhos que ajuda no processo de refinamento da solução.
Após serem avaliados, os filhos são inseridos na população inicial e passam a ser encarados
como uma solução comum dentre as outras. É realizado um novo ranqueamento entre todos
os indivı́duos da nova população, que passa a ter M+2 possı́veis soluções. O próximo passo
é excluir do espaço de busca os dois piores indivı́duos, retornando o espaço à M indivı́duos.
5
2.7 Evolução do processo de busca
Esse processo de seleção de cinco indivı́duos aleatoriamente na população e, dentre eles,
a escolha dos dois melhores, realização de Crossover para a geração de duas novas possı́veis
soluções, ocorrência – ou não – de mutação, inserção na população inicial e exclusão dos dois
piores candidatos ocorre até que a solução ótima seja encontrada ou que o número máximo
de gerações permitidas seja alcançado.
No primeiro caso é informada qual a solução ótima e em qual geração ela foi encontrada,
conforme demonstrado pelo código acima. Já o trecho abaixo é responsável por informar
que o algoritmo chegou no limite máximo de gerações permitidas e que não existe solução
entre os indivı́duos da população.
6
3 Resultados
Foram realizados testes com o número de rainhas N = 10, 20 e 50 e com valores do
tamanho da população M = N, 2N, 5N, 10N e 100N e número de máximo de gerações
igual à 500N, afim de observar qual a correlação entre esses parâmetros e o convergência do
algoritmo para a solução ótima.
Os resultados encontram-se nos gráficos abaixo, nos quais estão representados a evolução
do fitness (avaliação) médio da população – representado com uma linha vermelha – e o
melhor fitness (avaliação) – representado com pontos azuis – ao longo das gerações.
A partir desses resultados obtidos, graficamente será possı́vel fazer uma análise a respeito
da relação entre o número de rainhas, o tamanho da população, o número de iterações e a
convergência do algoritmo para a solução ótima.
7
Figura 5: Resultado computacional obtido com N = 10, M = 20.
8
Figura 7: Resultado computacional obtido com N = 10, M = 100.
9
3.2 Resultados para N = 20
10
Figura 11: Resultado computacional obtido com N = 20, M = 100.
11
Figura 13: Resultado computacional obtido com N = 20, M = 2000.
12
Figura 15: Resultado computacional obtido com N = 50, M = 100.
13
Figura 17: Resultado computacional obtido com N = 50, M = 500.
14
4 Discussão dos resultados
Ao analisar os resultados obtidos dos gráficos acima podemos gerar uma tabela compa-
rativa entre o número de gerações necessárias para convergência do algoritmo em função do
número de rainhas – N – e da população inicial – M.
HH
M
H N 2N 5N 10N 100N
N HH
H
10 40 85 260 1000 850
20 810 820 200 2800 ∅
50 3600 18000 8200 ∅ ∅
15
Figura 19: Resultado computacional obtido com N = 50, M = 5000, e o número máximo de
gerações de 2.500.000 e dados da execução do algoritmo.
16
Anexos
17
18
Figura 21: Código desenvolvido para a resolução do problema das N-Rainhas na ı́ntegra.
19