-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
128 lines (116 loc) · 3.88 KB
/
main.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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
from funcionAptitud import calcularAptitud
__author__ = 'jramirez'
import random
from cruzamiento import cruzar
from graficadora import *
from seleccionamejor import elitismo
from mutacion import mutar
from salida import escribir
from seleccion import seleccionar,seleccionarMejores
TAM_POBLACION=10
import time
#m=3 #numero de variables.
TAM_INDIVIDUO=2
def crearPoblacion(tam_indi,tam_pob):
poblacion=[]
for i in range(tam_pob):
individuo=[]
for j in range(tam_indi):
#individuo.append(random.uniform(0.000000001,0.000000002))
individuo.append(random.uniform(1,10))
poblacion.append(individuo)
return poblacion
def leerDatos():
fo = open("archivos_de_configuracion/datosconvertidos.txt", "r")
data= [linea.split(",") for linea in fo.readlines()]
fo.close()
for i in range(len(data)):
aux=data[i][-1][-5:-1]
data[i][-1]=float(aux)
return data
def generarPuntosMejor(mejor,muestras):
x=[]
y=[]
x1=muestras[0][0] #punto inicial
x.append(x1)
x2=muestras[-1][0] #punto final
x.append(x2)
suma=float(mejor[0][0])
for i in range(1,len(mejor[0])):
suma+=float(mejor[0][i])*float(x1)
y.append(suma)
#print suma
suma=0
for i in range(1,len(mejor[0])):
suma+=float(mejor[0][i])*float(x2)
y.append(suma)
#print suma
return x,y
def main(start_time):
g=0
outfile=open("Resultados/salida.txt",'w')
#bandera = False #bandera para saber cuando se va mejorando la raza
mejor = [] #nuestro mejor individuo.
mejor.append(-1)
mejor.append(-1)
#leerfechas()
#graficar()
muestras=leerDatos()
n = len(muestras)
#print "numero de muestras: " +str(n)
'''Los datos estan compuestos por Tiempo,latitud,longitud,magnitud '''
padres=crearPoblacion(TAM_INDIVIDUO,TAM_POBLACION)
#una vez creado los valores de Teta aleatorios sigue evaluar.
aptitud_padres=calcularAptitud(padres,n,muestras)
#nos devuelve una lista de aptitudes.
mejor,bandera = elitismo(padres,aptitud_padres,mejor)
selecionados=seleccionar(padres,aptitud_padres)
a="El mejor hasta ahora:"
escribir(outfile,a)
a= "Generacion: " +str(g)
escribir(outfile,a)
a= "Vector: "+str(mejor[0])
escribir(outfile,a)
a="Aptitud: "+str(mejor[1])
escribir(outfile,a)
a="Tiempo: " +str(time.time()-start_time)+" segundos"
escribir(outfile,a)
#x,y=generarPuntosMejor(mejor,muestras)
#graficar(x,y)
'''Proceso de cruza'''
hijos=cruzar(selecionados)
aptitud_hijos=calcularAptitud(hijos,n,muestras)
'''Seleccionar mejores entre padres e hijos'''
mejores=seleccionarMejores(padres,hijos,aptitud_padres,aptitud_hijos)
mutados = mutar(mejores)
aptitud_padres=calcularAptitud(mutados,n,muestras)
mejor,bandera = elitismo(mutados,aptitud_padres,mejor)
padres=mutados[:]
g=1
while True:
selecionados=seleccionar(padres,aptitud_padres)
hijos=cruzar(selecionados)
aptitud_hijos=calcularAptitud(hijos,n,muestras)
'''Seleccionar mejores entre padres e hijos'''
mejores=seleccionarMejores(padres,hijos,aptitud_padres,aptitud_hijos)
mutados = mutar(mejores)
aptitud_padres=calcularAptitud(mutados,n,muestras)
mejor,bandera = elitismo(mutados,aptitud_padres,mejor)
padres=mutados[:]
#print aptitud
if bandera==True:
a="El mejor hasta ahora:"
escribir(outfile,a)
a= "Generacion: " +str(g)
escribir(outfile,a)
a= "Vector: "+str(mejor[0])
escribir(outfile,a)
a="Aptitud: "+str(mejor[1])
escribir(outfile,a)
a="Tiempo: " +str(time.time()-start_time)+" segundos"
escribir(outfile,a)
x,y=generarPuntosMejor(mejor,muestras)
graficar(x,y)
g+=1
start_time = time.time()
main(start_time)