Beispiel #1
0
def evalEvoSN(individual, dimension):
    network = sn.SortingNetwork(dimension, individual)
    return network.assess(), network.length, network.depth
Beispiel #2
0
def main():
    random.seed(64)

    population = toolbox.population(n=300)
    hof = tools.ParetoFront()

    stats = tools.Statistics(lambda ind: ind.fitness.values)
    stats.register("avg", numpy.mean, axis=0)
    stats.register("std", numpy.std, axis=0)
    stats.register("min", numpy.min, axis=0)
    stats.register("max", numpy.max, axis=0)

    logbook = tools.Logbook()
    logbook.header = "gen", "evals", "std", "min", "avg", "max"

    CXPB, MUTPB, ADDPB, DELPB, NGEN = 0.5, 0.2, 0.01, 0.01, 40

    # Evaluate every individuals
    fitnesses = toolbox.map(toolbox.evaluate, population)
    for ind, fit in zip(population, fitnesses):
        ind.fitness.values = fit

    hof.update(population)
    record = stats.compile(population)
    logbook.record(gen=0, evals=len(population), **record)
    print(logbook.stream)

    # Begin the evolution
    for g in range(1, NGEN):
        offspring = [toolbox.clone(ind) for ind in population]

        # Apply crossover and mutation
        for ind1, ind2 in zip(offspring[::2], offspring[1::2]):
            if random.random() < CXPB:
                toolbox.mate(ind1, ind2)
                del ind1.fitness.values
                del ind2.fitness.values

        # Note here that we have a different sheme of mutation than in the
        # original algorithm, we use 3 different mutations subsequently.
        for ind in offspring:
            if random.random() < MUTPB:
                toolbox.mutate(ind)
                del ind.fitness.values
            if random.random() < ADDPB:
                toolbox.addwire(ind)
                del ind.fitness.values
            if random.random() < DELPB:
                toolbox.delwire(ind)
                del ind.fitness.values

        # Evaluate the individuals with an invalid fitness
        invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
        fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)
        for ind, fit in zip(invalid_ind, fitnesses):
            ind.fitness.values = fit

        population = toolbox.select(population + offspring, len(offspring))
        hof.update(population)
        record = stats.compile(population)
        logbook.record(gen=g, evals=len(invalid_ind), **record)
        print(logbook.stream)

    best_network = sn.SortingNetwork(INPUTS, hof[0])
    print(stats)
    print(best_network)
    print(best_network.draw())
    print("%i errors, length %i, depth %i" % hof[0].fitness.values)

    return population, logbook, hof
Beispiel #3
0
def main():
    # test if file is ok before starting the test
    if args.filename:
        open(args.filename).close()
    random.seed(64)

    beginTime = time.time()
    evaluationTime = 0

    population = toolbox.population(n=args.population)
    hof = tools.ParetoFront()

    stats = tools.Statistics(lambda ind: ind.fitness.values)
    stats.register("avg", tools.mean)
    stats.register("std", tools.std)
    stats.register("min", min)
    stats.register("max", max)

    logger = tools.EvolutionLogger(["gen", "evals", "time"] +
                                   [str(k) for k in stats.functions.keys()])
    logger.logHeader()

    CXPB, MUTPB, ADDPB, DELPB, NGEN = 0.5, 0.2, 0.01, 0.01, args.generations

    evalBegin = time.time()
    # Evaluate every individuals
    fitnesses = toolbox.map(toolbox.evaluate, population)

    for ind, fit in zip(population, fitnesses):
        ind.fitness.values = fit

    evaluationTime += (time.time() - evalBegin)

    hof.update(population)
    stats.update(population)

    logger.logGeneration(gen=0,
                         evals=len(population),
                         stats=stats,
                         time=evaluationTime)

    # Begin the evolution
    for g in range(1, NGEN):
        offspring = [toolbox.clone(ind) for ind in population]

        # Apply crossover and mutation
        for ind1, ind2 in zip(offspring[::2], offspring[1::2]):
            if random.random() < CXPB:
                toolbox.mate(ind1, ind2)
                del ind1.fitness.values
                del ind2.fitness.values

        # Note here that we have a different sheme of mutation than in the
        # original algorithm, we use 3 different mutations subsequently.
        for ind in offspring:
            if random.random() < MUTPB:
                toolbox.mutate(ind)
                del ind.fitness.values
            if random.random() < ADDPB:
                toolbox.addwire(ind)
                del ind.fitness.values
            if random.random() < DELPB:
                toolbox.delwire(ind)
                del ind.fitness.values

        # Evaluate the individuals with an invalid fitness
        invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
        evalBegin = time.time()
        fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)
        for ind, fit in zip(invalid_ind, fitnesses):
            ind.fitness.values = fit
        evaluationTime += (time.time() - evalBegin)

        population = toolbox.select(population + offspring, len(offspring))
        hof.update(population)
        stats.update(population)
        logger.logGeneration(gen=g,
                             evals=len(invalid_ind),
                             stats=stats,
                             time=evaluationTime)

    best_network = sn.SortingNetwork(INPUTS, hof[0])
    print(best_network)
    print(best_network.draw())
    print("%i errors, length %i, depth %i" % hof[0].fitness.values)
    totalTime = time.time() - beginTime

    print("Total time: {0}\nEvaluation time: {1}".format(
        totalTime, evaluationTime))
    if args.filename:
        f = open(args.filename, "a")
        f.write("{0};{1};{2};{3}\n".format(args.cores, INPUTS, totalTime,
                                           evaluationTime))
        f.close()

    return population, stats, hof