-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathservidor.py
94 lines (64 loc) · 2.43 KB
/
servidor.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
# coding: utf-8
import json
import time
from flask import Flask
from flask import jsonify, request, render_template
from modulos import geneticista, graficos
app = Flask(__name__)
@app.route('/')
def index():
'''
Página principal, exibe a interface web para utilização do algoritmo.
'''
return render_template('index.html')
@app.route('/genesis', methods=['POST', 'GET'])
def genesis():
'''
Recebe os parâmetros da interface web e executa o algoritmo genético.
Persiste o estado da última execução e retorna um JSON com o resultado.
'''
if request.method == 'GET':
tamanho_populacao = 100
quantidade_melhores = 10
numero_geracoes = 1000
percentual_mutacao = 0.05
ponto_inicial = 'ni'
elif request.method == 'POST':
tamanho_populacao = int(request.args.post('tamanho_populacao'))
quantidade_melhores = int(request.args.post('quantidade_melhores'))
numero_geracoes = int(request.args.post('numero_geracoes'))
percentual_mutacao = int(request.args.post('percentual_populacao')) / 100.
ponto_inicial = request.args.post('ponto_inicial')
# Tempo de execução
tempo_inicial = time.time()
populacao = geneticista.Populacao(tamanho_populacao, quantidade_melhores, numero_geracoes, percentual_mutacao, ponto_inicial)
tempo_execucao = time.time() - tempo_inicial
evolucao = []
while True:
geracao = populacao.proxima_geracao()
if not geracao:
break
geracao.reverse()
evolucao.append(geracao)
json.dump(evolucao, open('dados/geracoes.json', 'w'))
melhor_individuo = populacao.melhor_da_geracao()
return jsonify(rota=melhor_individuo.copia_rota(), peso=melhor_individuo.peso(), tempo_execucao=tempo_execucao)
@app.route('/grafico/geracoes')
def grafico_geracoes():
AMOSTRAGEM = 20 # Porcentagem
geracoes = json.load(open('dados/geracoes.json'))
marcador = len(geracoes) / AMOSTRAGEM
amostra = []
for i, j in enumerate(geracoes):
if not i % marcador:
amostra.append(j)
graficos.grafico_geracoes(amostra)
return ''
@app.route('/grafico/convergencia')
def grafico_convergencia():
geracoes = json.load(open('dados/geracoes.json'))
evolucao = [g[-1] for g in geracoes]
graficos.grafico_convergencia(evolucao)
return ''
if __name__ == '__main__':
app.run(port=8000)