elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Algoritmo Genetico Python
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Algoritmo Genetico Python  (Leído 4,985 veces)
Camilo2001

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Algoritmo Genetico Python
« en: 12 Marzo 2017, 04:21 am »

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
  1. import random
  2.  
  3.  
  4. individuos={} #Diccionario de individuos
  5.  
  6.  
  7.  
  8. def distancia(n1,n2):   #Funcion para cualcular la distancia entre dos numeros
  9.        d=n1-n2
  10.        return abs(d)
  11.  
  12.  
  13.  
  14. def poblacion_inicial():  #Genera la poblacion inicial. cada individuo tiene asociado un numero aleatorio entre un rango predeterminado
  15.  
  16. for individuo in range(n_individuos):
  17.  
  18. individuos[individuo]=random.uniform(limite_inferior, limite_superior)
  19.  
  20.  
  21.  
  22.  
  23. def seleccion(): #Selecciona el individuo cuyo numero mas se acerco al objetivo. tambien hace un print con los datos del individuo seleccionado
  24.  
  25.        global numero_seleccionado
  26.  
  27.        distancia_minima=1000000000000000000000000
  28.  
  29.        individuo_seleccionado=0
  30.  
  31.        numero_seleccionado=0
  32.  
  33.        for individuo in individuos:
  34.  
  35.                dis=distancia(individuos[individuo], numero_objetivo)
  36.  
  37.                if dis<distancia_minima:
  38.                        distancia_minima=dis
  39.                        individuo_seleccionado=individuo
  40.                        numero_seleccionado=individuos[individuo]
  41.  
  42.        print("Individuo:", individuo_seleccionado, "Numero del individuo:", individuos[individuo_seleccionado], "Distancia:", distancia_minima)
  43.  
  44.  
  45.  
  46.  
  47. 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
  48.  
  49.        for individuo in individuos:
  50.  
  51.                if not individuo==0:
  52.  
  53.                 individuos[individuo]=random.uniform(numero_seleccionado-rango_mutacion,numero_seleccionado+rango_mutacion)
  54.                else:
  55.                 individuos[individuo]=numero_seleccionado
  56.  
  57.  
  58.  
  59.  
  60.  
  61. #Se ingresan las variables y se da info
  62. print("                              ALGORITMO GENETICO - Camilo2001")
  63. print("")
  64. print("ATENCION!. El programa fue creado por un (muy) principiante.")
  65. print("")
  66. print("Si se insertan datos mal crasheara porque no contemple errores")
  67. print("")
  68. print("Con amor, Camilo2001")
  69. print("")
  70.  
  71. n_individuos=int(input("Seleccione la cantidad de individuos por generacion ->"))
  72. n_generaciones=int(input("Seleccione el numero de generaciones limite ->"))
  73. numero_objetivo=float(input("Seleccione el numero objetivo ->"))
  74. rango_mutacion=float(input("Seleccione el rango de mutacion ->"))
  75. print("Seleccione entre que valores oscilaran los valores iniciales de cada individuo. Se admiten numeros negativos.")
  76. limite_inferior=float(input("Limite inferior ->"))
  77. limite_superior=float(input("Limite superior ->"))
  78.  
  79. #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
  80.  
  81. poblacion_inicial()
  82.  
  83. for generacion in range(n_generaciones):
  84.        print(generacion)
  85.        seleccion()
  86.        if numero_seleccionado==numero_objetivo: #revisa si se alcanzo el numero objetivo. Si es asi lo avisa y rompe el bucle.
  87.                print("Se alcanzo el numero objetivo")
  88.                break
  89.  
  90.        mutacion()
  91.  
  92. print("Resultado final -->", numero_seleccionado)
  93.  
  94. input()
  95.  
  96.  


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
algoritmo genetico « 1 2 »
.NET (C#, VB.NET, ASP)
juanlu16 18 14,248 Último mensaje 26 Abril 2008, 18:48 pm
por krackwar
Algoritmo genetico en VB
Programación Visual Basic
danicasasm 2 7,944 Último mensaje 23 Junio 2010, 03:51 am
por danicasasm
Python - Algoritmo de compresión
Python
h0oke 3 10,818 Último mensaje 28 Diciembre 2021, 17:33 pm
por luu_cuuesta
Python - Duda Algoritmo
Scripting
h0oke 7 5,382 Último mensaje 30 Marzo 2010, 03:12 am
por h0oke
Algoritmo Genetico problema de las n reinas
Programación C/C++
kjg 1 3,275 Último mensaje 24 Noviembre 2018, 22:49 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines