One Max Problem: Short VersionΒΆ
The short one max genetic algorithm example is very similar to one max
example. The only difference is that it makes use of the
algorithms
module that implements some basic evolutionary
algorithms. The initialization are the same so we will skip this phase. The
algorithms impemented use specific functions from the toolbox, in this case
evaluate()
, mate()
, mutate()
and select()
must be registered.
toolbox.register("evaluate", evalOneMax)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
toolbox.register("select", tools.selTournament, tournsize=3)
The toolbox is then passed to the algorithm and the algorithm uses the registered function.
def main():
pop = toolbox.population(n=300)
hof = tools.HallOfFame(1)
stats = tools.Statistics(lambda ind: ind.fitness.values)
stats.register("avg", numpy.mean)
stats.register("std", numpy.std)
stats.register("min", numpy.min)
stats.register("max", numpy.max)
pop, log = algorithms.eaSimple(pop, toolbox, cxpb=0.5, mutpb=0.2, ngen=40,
stats=stats, halloffame=hof, verbose=True)
The short GA One max example makes use of a
HallOfFame
in order to keep track of the best
individual to appear in the evolution (it keeps it even in the case it
extinguishes), and a Statistics
object to compile
the population statistics during the evolution.
Every algorithms from the algorithms
module can take
these objects. Finally, the verbose keyword indicate wheter we
want the algorithm to output the results after each generation or
not.
The complete source code: examples/ga/onemax_short.