code: def run(config_file):
  	
  	# Load configuration.
  	config = neat.Config(neat.DefaultGenome, neat.DefaultReproduction,
  						 neat.DefaultSpeciesSet, neat.DefaultStagnation,
  						 config_file)
  
  	# Create the population, which is the top-level object for a NEAT run.
  	p = neat.Population(config)
  
  	# Add a stdout reporter to show progress in the terminal.
  	p.add_reporter(neat.StdOutReporter(True))
  	stats = neat.StatisticsReporter()
  	p.add_reporter(stats)
  
  	# Run for up to 300 generations.
  	pe = neat.ThreadedEvaluator(4, eval_genome)
  	winner = p.run(pe.evaluate, 300)
  	pe.stop()
  
  	# Display the winning genome.
  	print('\nBest genome:\n{!s}'.format(winner))
  
  	# Show output of the most fit genome against training data.
  	print('\nOutput:')
  	winner_net = neat.nn.FeedForwardNetwork.create(winner, config)
  	for xi, xo in zip(xor_inputs, xor_outputs):
  		output = winner_net.activate(xi)
  		print(
  			"input {!r}, expected output {!r}, got {!r}".format(xi, xo, output)
  			)
  
  	if visualize is not None:
  		node_names = {-1: 'A', -2: 'B', 0: 'A XOR B'}
  		visualize.draw_net(config, winner, True, node_names=node_names)
  		visualize.plot_stats(stats, ylog=False, view=True)
  		visualize.plot_species(stats, view=True)
docs: load the config, create a population, evolve and show the result