-
Notifications
You must be signed in to change notification settings - Fork 1
/
__init__.py
64 lines (55 loc) · 2.03 KB
/
__init__.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
from população import População
from individuo import Individuo
import tools
import os
from datetime import datetime
from multiprocessing import cpu_count
from multiprocessing import freeze_support
__author__ = '@arthurj'
entrada_crua = tools.ler('caso_cea.csv')
entrada = tools.processar_entrada(entrada_crua)
res = None
somos = set()
maxi = 100
count = 0
while len(somos) < 5 * cpu_count() + 1:
count += 1
if count > 1000:
print("[ATENÇÃO!] Atingiu o limite de tentativas de criar somos")
break
try:
s = Individuo(*entrada)
somos.add(s)
except Exception as e:
tools.should_raise(e)
print('Quantidade de somos iniciais:', len(somos), '\n' + '.' * 60)
@tools.temporizador
def iterar(g, max_wait_4_new_fitness=16):
melhor_passado = list()
for i in range(1, 1000):
print('--', str(i) + 'ª', 'Geração --')
g.next()
print(g)
melhor_passado.append(g.somos[0].nota)
if melhor_passado[-1] == 10:
max_wait_4_new_fitness = int(max_wait_4_new_fitness)/2
print('[' + str(melhor_passado.count(g.somos[0].nota)) +
'ª ocorrência desta nota]', '\n' + '.' * 60 + '\n')
if melhor_passado.count(g.somos[0].nota) >= max_wait_4_new_fitness:
break
return g
if __name__ == '__main__':
freeze_support()
populacao = População(entrada[0], entrada[1], entrada[2], list(somos),
max_somos=maxi)
populacao = iterar(populacao)
pasta_resultados = 'Resultados obtidos em ' + str(datetime.now()) \
.split('.')[0].replace(':', '_')
os.mkdir(pasta_resultados)
os.chdir(pasta_resultados)
for contador, somo in enumerate(populacao.somos):
with open('Organização {0} (Nota:{1:.2f}).txt'
.format(contador + 1, somo.nota), 'w') as saida:
tools.relatorio(somo, entrada,
descrições_de_horario=[x[0].split('!')[1]
for x in entrada_crua[1:]], f=saida)