-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathevolution.py
More file actions
48 lines (39 loc) · 1.63 KB
/
Copy pathevolution.py
File metadata and controls
48 lines (39 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import copy
from player import Player
class Evolution:
def __init__(self):
self.game_mode = "Neuroevolution"
def next_population_selection(self, players, num_players):
"""
Gets list of previous and current players (μ + λ) and returns num_players number of players based on their
fitness value.
:param players: list of players in the previous generation
:param num_players: number of players that we return
"""
# TODO (Implement top-k algorithm here)
# TODO (Additional: Implement roulette wheel here)
# TODO (Additional: Implement SUS here)
# TODO (Additional: Learning curve)
return players[: num_players]
def generate_new_population(self, num_players, prev_players=None):
"""
Gets survivors and returns a list containing num_players number of children.
:param num_players: Length of returning list
:param prev_players: List of survivors
:return: A list of children
"""
first_generation = prev_players is None
if first_generation:
return [Player(self.game_mode) for _ in range(num_players)]
else:
# TODO ( Parent selection and child generation )
new_players = prev_players # DELETE THIS AFTER YOUR IMPLEMENTATION
return new_players
def clone_player(self, player):
"""
Gets a player as an input and produces a clone of that player.
"""
new_player = Player(self.game_mode)
new_player.nn = copy.deepcopy(player.nn)
new_player.fitness = player.fitness
return new_player