Advertisement
Guest User

algoritmo genetico pixel por pixel

a guest
Aug 5th, 2013
419
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.04 KB | None | 0 0
  1. import numpy
  2. from PIL import Image
  3. from sys import argv
  4. from random import random
  5. from math import exp
  6.  
  7. def liminf(g):
  8.         return 0.5-0.05/exp(g/300.)
  9. def limsup(g):
  10.         return 0.5+0.05/exp(g/300.)
  11. def genpoblacion(n):
  12.         poblacion=[]
  13.         for i in range(n):
  14.                 poblacion.append([int(round(random()*255)),\
  15.                         int(round(random()*255)),\
  16.                         int(round(random()*255))])
  17.         return poblacion
  18. n=200
  19. fname=open(argv[1].split('\\')[-1],'r')
  20. bloques=[]
  21. generacion=[]
  22. colores=[]
  23. areas=[]
  24. for linea in fname:
  25.         b=[]
  26.         l=linea.split(',')
  27.         print (len(l)-2)/7,'bloques'
  28.         for i in range(len(l)):
  29.                 if i==0:
  30.                         width=int(l[i])
  31.                 elif i==1:
  32.                         height=int(l[i])
  33. #                       print (width,height)
  34.                         img=Image.new("RGB",(width,height))
  35.                         imgarr=numpy.array(img)
  36.                 else:
  37.                         try:b.append(int(l[i]))
  38.                         except:print 'invlit:',l[i]
  39.                 if (i-1)%7==0 and i>5:
  40. #                       bloques.append(b)
  41. #                       print i,len(l)
  42.  
  43.                         imgarr[b[1]:b[1]+b[3],\
  44.                                 b[0]:b[0]+b[2]]=b[4:]
  45.                         bloques.append(b)
  46.                         areas.append([b[2]*b[3]]*3)
  47.                         colores.append(b[4:])
  48.  
  49.                         b=[]
  50.  
  51. generaciones=10
  52. def evalua(sujeto):
  53.         grissujeto=sujeto[0]*.547+sujeto[1]*.339+sujeto[2]*.114
  54.         grismeta=meta[0]*.547+meta[1]*.339+meta[2]*.114
  55.         return 1.-abs(grissujeto-grismeta)/255.
  56. def evoluciona(padre,madre,g):
  57. #       print evalua(padre)
  58.         while 1:
  59.                 hijo=[]
  60.                 for i in range(len(padre)):
  61.                         r=random()
  62.                         if r<.495:
  63.                                 hijo.append(padre[i])
  64.                         elif r>.505:
  65.                                 hijo.append(madre[i])
  66.                         else:
  67.                                 hijo.append(int(round(random()*255)))
  68.                 if evalua(hijo)>evalua(padre) or evalua(hijo)>.95:
  69. #                       print "Generacion:",generaciones-g
  70.                         if g==0:
  71.                                 print "EVALUACION:",evalua(hijo)
  72.                                 return hijo
  73.                         else:
  74.                                 return evoluciona(hijo,padre,g-1)
  75. for i in range(len(colores)):
  76.         print 100.*i/len(colores),'%%'
  77.         poblacion=genpoblacion(n)
  78.         max=0
  79.         madre=None
  80.         padre=None
  81.         meta=colores[i]
  82.         for p in poblacion:
  83.                 if evalua(p)>max:
  84.                         madre=padre
  85.                         padre=p
  86.         hijo=evoluciona(padre,madre,generaciones)
  87.         imgarr[bloques[i][1]:bloques[i][1]+bloques[i][3],\
  88.                 bloques[i][0]:bloques[i][0]+bloques[i][2]]=hijo
  89. Image.fromarray(imgarr).show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement