from pyrobot.brain.gp import *
from math import pi

share.env = Environment(env)
share.env.update( {'i1':0, 'i2':0} )

class GP(GA):
    def __init__(self, cnt, **args):
        GA.__init__(self, Population( cnt, GPGene, bias =.6, 
                                      elitePercent = .1, verbose = 1),
                    maxGeneration = 100,
                    verbose = 1)
    
    def fitnessFunction(self, pos):
        outputs = [ 0, 1, 1, 0 ] # outputs for XOR
        inputs = [ {'i1' : 0, 'i2' : 0},
                   {'i1' : 0, 'i2' : 1},
                   {'i1' : 1, 'i2' : 0},
                   {'i1' : 1, 'i2' : 1} ]
        diff = 0
        for i in range(len(inputs)):
            set, goal = inputs[i], outputs[i]
            retval = self.pop.individuals[pos].eval(set)
            item  = retval - goal
            diff += abs(item)
        return max(4 - diff, 0)
    
    def isDone(self):
        fit = self.pop.bestMember.fitness
        self.pop.bestMember.display()
        print 
        return fit == 4
    
gp = GP(50)
gp.evolve()


