From a49f03248f159899bbfeb242ccb19ed8f66b8537 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Thu, 4 Jan 2024 18:42:43 +0200 Subject: [PATCH] feat(ai): add genome evaluation function --- src/ai/evaluation.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/ai/evaluation.py diff --git a/src/ai/evaluation.py b/src/ai/evaluation.py new file mode 100644 index 0000000..ae7d0f7 --- /dev/null +++ b/src/ai/evaluation.py @@ -0,0 +1,33 @@ +import neat +from game import Main + +from .fitness import calculate_fitness +from .log import log + + +def eval_genomes(genomes, config: neat.Config) -> None: + app = Main() + app.run() + for genome_id, genome in genomes: + genome.fitness = calculate_fitness(app) + net = neat.nn.FeedForwardNetwork.create(genome, config) + while not app.game.game_over(): + output = net.activate(app.game.field) + + decision = output.index(max(output)) + + decisions = { + 0: app.game.move_left, + 1: app.game.move_right, + 2: app.game.rotate, + 3: app.game.rotate_reverse, + 4: app.game.drop, + } + + decisions[decision]() + + genome.fitness = calculate_fitness(app) + log.info( + f"{genome_id=}\t{genome.fitness=}\t{app.game.score=}\t{app.game.lines=}\t{app.game.level=}" + ) + app.game.restart()