code: 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 scheme 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
  
file_path: deap/examples/ga/evosn.py
imports: import random
  import numpy
  from deap import algorithms
  from deap import base
  from deap import creator
  from deap import tools
  import sortingnetwork
label_desc: Use image node_id 7 for calling a global function with example usage: main() and returns: population,  logbook,  hof