Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy
- from PIL import Image
- from sys import argv
- from random import random
- from math import exp
- def liminf(g):
- return 0.5-0.05/exp(g/300.)
- def limsup(g):
- return 0.5+0.05/exp(g/300.)
- def genpoblacion(n):
- poblacion=[]
- for i in range(n):
- poblacion.append([int(round(random()*255)),\
- int(round(random()*255)),\
- int(round(random()*255))])
- return poblacion
- n=200
- fname=open(argv[1].split('\\')[-1],'r')
- bloques=[]
- generacion=[]
- colores=[]
- areas=[]
- for linea in fname:
- b=[]
- l=linea.split(',')
- print (len(l)-2)/7,'bloques'
- for i in range(len(l)):
- if i==0:
- width=int(l[i])
- elif i==1:
- height=int(l[i])
- # print (width,height)
- img=Image.new("RGB",(width,height))
- imgarr=numpy.array(img)
- else:
- try:b.append(int(l[i]))
- except:print 'invlit:',l[i]
- if (i-1)%7==0 and i>5:
- # bloques.append(b)
- # print i,len(l)
- imgarr[b[1]:b[1]+b[3],\
- b[0]:b[0]+b[2]]=b[4:]
- bloques.append(b)
- areas.append([b[2]*b[3]]*3)
- colores.append(b[4:])
- b=[]
- generaciones=10
- def evalua(sujeto):
- grissujeto=sujeto[0]*.547+sujeto[1]*.339+sujeto[2]*.114
- grismeta=meta[0]*.547+meta[1]*.339+meta[2]*.114
- return 1.-abs(grissujeto-grismeta)/255.
- def evoluciona(padre,madre,g):
- # print evalua(padre)
- while 1:
- hijo=[]
- for i in range(len(padre)):
- r=random()
- if r<.495:
- hijo.append(padre[i])
- elif r>.505:
- hijo.append(madre[i])
- else:
- hijo.append(int(round(random()*255)))
- if evalua(hijo)>evalua(padre) or evalua(hijo)>.95:
- # print "Generacion:",generaciones-g
- if g==0:
- print "EVALUACION:",evalua(hijo)
- return hijo
- else:
- return evoluciona(hijo,padre,g-1)
- for i in range(len(colores)):
- print 100.*i/len(colores),'%%'
- poblacion=genpoblacion(n)
- max=0
- madre=None
- padre=None
- meta=colores[i]
- for p in poblacion:
- if evalua(p)>max:
- madre=padre
- padre=p
- hijo=evoluciona(padre,madre,generaciones)
- imgarr[bloques[i][1]:bloques[i][1]+bloques[i][3],\
- bloques[i][0]:bloques[i][0]+bloques[i][2]]=hijo
- Image.fromarray(imgarr).show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement