/
AlgoritmoGenetico.py
107 lines (91 loc) · 2.8 KB
/
AlgoritmoGenetico.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu May 4 09:28:13 2017
@author: joao
"""
from Reproducao import Reproducao
from Check import Check
from Arquivo import Arquivo
from Mutacao import Mutacao
from random import randint
class AlgoritmoGenetico(object):
def __init__(self , path):
self.estadoInicial = [1,2,3,4,5,6,7,8]
self.tamanhoPopulacao = 40
self.variacao = [4,14]
self.morte = 0.40
self.morteLimite = self.morte * self.tamanhoPopulacao
self.path = path
self.arquivo = Arquivo()
self.linha = []
self.coluna = []
self.populacao=[]
self.fitness=[]
self.melhorResultado = False
self.check = Check()
self.executavel()
def imprimeMatriz(self , matriz):
print("------Matriz inicial-------")
for i in range(len(matriz)):
linha = matriz[i]
print(linha)
def executavel(self):
S0 = self.arquivo.getMatrizArquivo(self.path)
self.imprimeMatriz(S0)
for i in range(0 , self.tamanhoPopulacao):
self.populacao.append([1,2,3,4,5,6,7,8])
a = 0
while a < randint(self.variacao[0] , self.variacao[1]):
a += 1
self.populacao[i] = Mutacao(self.populacao[i]).Mutacao()
fitness_final = self.check.fitness(self.populacao[i] , self.estadoInicial)
self.fitness.append(fitness_final)
maxi = 0
geracao = 1
while maxi != 8:
morto = 0
x = 0
while morto < self.morteLimite:
for i in range(0 , self.tamanhoPopulacao):
try:
if self.fitness[i] == x:
self.populacao.pop(i)
self.fitness.pop(i)
morto += 1
if morto == self.morteLimite:
break
except:
break
x += 1
filhos = 0
cpop = len(self.populacao)-1
while filhos < morto:
reproducao = Reproducao(self.populacao[randint(0,cpop)],self.populacao[randint(0,cpop)] , self.populacao , self.fitness , self.estadoInicial)
reproducao.reproduzirFilho1()
reproducao.reproduzirFilho2()
filhos += 2
geracao += 1
maxi = 0
for i in range(0 , self.tamanhoPopulacao):
if self.fitness[i] > maxi:
maxi = self.fitness[i]
if maxi == 8:
print("Algoritmo Genetico")
self.printarMatricial(self.populacao[i])
self.melhorResultado = True
break
if self.melhorResultado == True:
break
def printarMatricial(self , vetor):
for i in range(8):
valor = vetor[i]
for j in range(8):
if j == valor:
self.coluna.append(1)
else:
self.coluna.append(0)
self.linha.append(self.coluna)
self.coluna = []
for i in range(8):
print(self.linha[i])