Algoritmo Genetico Python

Iniciado por Camilo2001, 12 Marzo 2017, 04:21 AM

0 Miembros y 1 Visitante están viendo este tema.

Camilo2001

Hola ;D. Llevo unos dias en esto de la programacion. Hice un algoritmo genetico super simple para aproximarse a un numero. Lo hice solo for fun y recien estoy aprendiendo (empece hace una semana mas o menos). Nada, dejaba el codigo porque me pinto compartirlo y si quieren comentar alguna mejora o alguna critica me viene barbaro asi sigo aprendiendo. Salu2



Código (python) [Seleccionar]
import random


individuos={} #Diccionario de individuos



def distancia(n1,n2):   #Funcion para cualcular la distancia entre dos numeros
       d=n1-n2
       return abs(d)



def poblacion_inicial():  #Genera la poblacion inicial. cada individuo tiene asociado un numero aleatorio entre un rango predeterminado

for individuo in range(n_individuos):

individuos[individuo]=random.uniform(limite_inferior, limite_superior)




def seleccion(): #Selecciona el individuo cuyo numero mas se acerco al objetivo. tambien hace un print con los datos del individuo seleccionado

       global numero_seleccionado

       distancia_minima=1000000000000000000000000

       individuo_seleccionado=0

       numero_seleccionado=0

       for individuo in individuos:

               dis=distancia(individuos[individuo], numero_objetivo)

               if dis<distancia_minima:
                       distancia_minima=dis
                       individuo_seleccionado=individuo
                       numero_seleccionado=individuos[individuo]

       print("Individuo:", individuo_seleccionado, "Numero del individuo:", individuos[individuo_seleccionado], "Distancia:", distancia_minima)




def mutacion(): #A cada individuo le asocia un nuevo numero aleatorio, solo que en este caso va a estar oscilando cerca del numero que se selecciono en la seleccion. la magnitud de la oscilacion la determina el usuario

       for individuo in individuos:
               
               if not individuo==0:
               
                individuos[individuo]=random.uniform(numero_seleccionado-rango_mutacion,numero_seleccionado+rango_mutacion)
               else:
                individuos[individuo]=numero_seleccionado

     



#Se ingresan las variables y se da info
print("                              ALGORITMO GENETICO - Camilo2001")
print("")
print("ATENCION!. El programa fue creado por un (muy) principiante.")
print("")
print("Si se insertan datos mal crasheara porque no contemple errores")
print("")
print("Con amor, Camilo2001")
print("")

n_individuos=int(input("Seleccione la cantidad de individuos por generacion ->"))
n_generaciones=int(input("Seleccione el numero de generaciones limite ->"))
numero_objetivo=float(input("Seleccione el numero objetivo ->"))
rango_mutacion=float(input("Seleccione el rango de mutacion ->"))
print("Seleccione entre que valores oscilaran los valores iniciales de cada individuo. Se admiten numeros negativos.")
limite_inferior=float(input("Limite inferior ->"))
limite_superior=float(input("Limite superior ->"))

#BUCLE PRINCIPAL. Genera una poblacion inicial. El bucle se ejecuta una vez para cada generacion. Hace un print del num de la generacion, y ejecuta las funciones

poblacion_inicial()

for generacion in range(n_generaciones):
       print(generacion)
       seleccion()
       if numero_seleccionado==numero_objetivo: #revisa si se alcanzo el numero objetivo. Si es asi lo avisa y rompe el bucle.
               print("Se alcanzo el numero objetivo")
               break

       mutacion()

print("Resultado final -->", numero_seleccionado)
       
input()