This repository has been archived on 2026-03-28. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
eodev/eo/src/pyeo/test/maxone.py
2011-05-05 16:54:00 +02:00

88 lines
1.8 KiB
Python

import sys
sys.path.append('..')
print 'importing pyeo'
from PyEO import *
print 'done'
from copy import copy
class MinimFit(float):
def __cmp__(self, other):
if other == None: # I seem to be getting None's, don't know why
return 1
return float.__cmp__(other, self)
class EvalFunc(eoEvalFunc):
def __call__(self, eo):
eo.fitness = reduce(lambda x,y: x+y, eo.genome, 0)
class MinEvalFunc(eoEvalFunc):
def __call__(self, eo):
f = reduce(lambda x,y: x+y, eo.genome, 0 )
eo.fitness = MinimFit(f)
class Init(eoInit):
def __init__(self, genome_length = 10):
eoInit.__init__(self)
self.length = genome_length
def __call__(self, eo):
eo.genome = [rng().flip(0.5) for x in range(self.length)]
class Mutate(eoMonOp):
def __call__(self, eo):
eo.genome = copy(eo.genome)
prob = 1. / len(eo.genome)
for i in range(len(eo.genome)):
if rng().flip(0.5):
eo.genome[i] = 1-eo.genome[i];
return 1
class Crossover(eoQuadOp):
def __call__(self, eo1, eo2):
eo1.genome = copy(eo1.genome);
eo2.genome = copy(eo2.genome);
point = rng().random( len(eo1.genome) );
eo1.genome[:point] = eo2.genome[:point];
eo2.genome[point:] = eo1.genome[point:];
return 1
evaluate = EvalFunc()
init = Init(3)
mutate = Mutate()
xover = Crossover()
if __name__ == '__main__':
eo = EO()
eo1 = EO()
init(eo1)
init(eo)
evaluate(eo)
print eo
for i in range(10):
xover(eo, eo1)
mutate(eo)
evaluate(eo)
print eo, eo1
print
print
print
pop = eoPop(1, init)
pop[0] = eo;
mutate(pop[0])
pop[0].invalidate()
evaluate(pop[0])
print pop[0], eo