-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIndividuo.py
executable file
·54 lines (45 loc) · 1.87 KB
/
Individuo.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
from random import random
class Individuo():
def __init__(self, valores, espacos, limite_espacos, geracao=0):
self.espacos = espacos
self.valores = valores
self.limite_espacos = limite_espacos
self.nota_avaliacao = 0
self.espaco_usado = 0
self.geracao = geracao
self.cromossomo = []
for i in range(self.espacos):
if random() < 0.5:
self.cromossomo.append("0")
else:
self.cromossomo.append("1")
def avaliacao(self):
nota = 0
espacos_ocupados = 0
for i in range(len(self.cromossomo)):
if self.cromossomo[i] == '1':
nota += self.valores[i]
espacos_ocupados += 1
if espacos_ocupados > self.limite_espacos:
nota = 1
self.nota_avaliacao = nota
self.espaco_usado = espacos_ocupados
def crossover(self, outro_individuo):
corte = round(random() * len(self.cromossomo))
filho1 = outro_individuo.cromossomo[0:corte] + self.cromossomo[corte::]
filho2 = self.cromossomo[0:corte] + outro_individuo.cromossomo[corte::]
filhos = [Individuo(self.valores, self.espacos, self.limite_espacos, self.geracao + 1),
Individuo(self.valores, self.espacos, self.limite_espacos, self.geracao + 1)]
filhos[0].cromossomo = filho1
filhos[1].cromossomo = filho2
return filhos
def mutacao(self, taxa_mutacao):
print("Antes %s " % self.cromossomo)
for i in range(len(self.cromossomo)):
if random() < taxa_mutacao:
if self.cromossomo[i] == '1':
self.cromossomo[i] = '0'
else:
self.cromossomo[i] = '1'
print("Depois %s " % self.cromossomo)
return self