The Pyevolve Interactive Mode on Mac OS
The Interactive Mode of Pyevolve is the only part of Pyevolve which is platform dependant, I’ve created the platform dependant code for Win and Linux, but not yet for Mac, I’m working on that issue for the next release 0.6 of Pyevolve, but there is a way to enter in the Interactive Mode on the Mac, it’s a workaround for a while, this is the code:
from pyevolve import G1DList
from pyevolve import GSimpleGA
from pyevolve import Selectors
import pyevolve
import code
# The generation that Pyevolve will enter on
# the interactive mode
INTERACTIVE_STOP = 50
def evolve_callback(ga_engine):
""" The callback function to enter on interactive mode"""
generation = ga_engine.getCurrentGeneration()
if generation == INTERACTIVE_STOP:
from pyevolve import Interaction
interact_banner = "## Pyevolve v.%s - Interactive Mode ##" \
% (pyevolve.__version__,)
session_locals = { "ga_engine" : ga_engine,
"population" : ga_engine.getPopulation(),
"pyevolve" : pyevolve,
"it" : Interaction}
print
code.interact(interact_banner, local=session_locals)
return False
def eval_func(chromosome):
""" The evaluation function """
score = 0.0
for value in chromosome:
if value==0:
score += 0.1
return score
genome = G1DList.G1DList(30)
genome.setParams(rangemin=0, rangemax=10)
genome.evaluator.set(eval_func)
ga = GSimpleGA.GSimpleGA(genome)
ga.setGenerations(500)
ga.stepCallback.set(evolve_callback)
ga.evolve(freq_stats=10)
print ga.bestIndividual()
This workaround will force the Pyevolve to enter on the Interactive Mode when the generation is equal to INTERACTIVE_STOP variable, on your example, it will enter in the Interactive Mode in the generation 50.
Thanks to Jay for reporting this issue.
Thanks Christian, that worked great!
You could also maybe do something like this;
Based on this post: http://code.activestate.com/recipes/134892/
It ‘eats’ every keystroke though (including Ctrl-C) so it would need some tweaking!