adjustements
This commit is contained in:
16
car.py
16
car.py
@@ -62,6 +62,7 @@ class Car(pygame.sprite.Sprite):
|
||||
self.run = True
|
||||
self.distance_run = 0
|
||||
self.creation_dt = datetime.datetime.now()
|
||||
self.run_time = 0
|
||||
|
||||
def reset_car_pos(self):
|
||||
self.rect.center = (
|
||||
@@ -109,10 +110,9 @@ class Car(pygame.sprite.Sprite):
|
||||
-self.speed * vec[1] / 2 + old_center[1],
|
||||
)
|
||||
self.update_sensors()
|
||||
self.distance_run += int(distance(old_center, self.rect.center))
|
||||
self.brain.fitness = int(
|
||||
math.sqrt(self.distance_run)
|
||||
) # - 2 # penalize jittering
|
||||
if self.run:
|
||||
self.distance_run += int(distance(old_center, self.rect.center))
|
||||
self.brain.fitness = math.sqrt(self.distance_run)
|
||||
|
||||
def probe_lines_proximity(self, lines):
|
||||
# print(self.center_sensor, lines[0])
|
||||
@@ -150,16 +150,16 @@ class Car(pygame.sprite.Sprite):
|
||||
self.rect = self.image.get_rect()
|
||||
self.rect.center = old_center
|
||||
self.update_position()
|
||||
run_time = (datetime.datetime.now() - self.creation_dt).seconds
|
||||
if run_time > MAX_RUN_TIME:
|
||||
self.run_time = (datetime.datetime.now() - self.creation_dt).seconds
|
||||
if self.run_time > MAX_RUN_TIME:
|
||||
print("RUNTIME EXCEEDED")
|
||||
if (
|
||||
self.speed < 0.01
|
||||
or self.brain.fitness > CAR_MAX_FITNESS
|
||||
or run_time > MAX_RUN_TIME
|
||||
or self.run_time > MAX_RUN_TIME
|
||||
):
|
||||
self.run = False
|
||||
print(f"Car {id(self)} crashed")
|
||||
# print(f"Car {id(self)} crashed")
|
||||
# print(
|
||||
# 'id', id(self),
|
||||
# 'Speed', self.speed,
|
||||
|
||||
@@ -34,7 +34,7 @@ def genetic_selection(brains):
|
||||
# proportionnally to its relative fitness
|
||||
wheel = []
|
||||
for b in brains:
|
||||
wheel += [b] * b.fitness
|
||||
wheel += [b] * int(b.fitness)
|
||||
|
||||
tot_fitness = len(wheel)
|
||||
|
||||
|
||||
20
main.py
20
main.py
@@ -13,11 +13,13 @@ from params import CELL_COLOR, GX, GY, screen
|
||||
# https://medium.com/intel-student-ambassadors/demystifying-genetic-algorithms-to-enhance-neural-networks-cde902384b6e
|
||||
clock = pygame.time.Clock()
|
||||
font = pygame.font.SysFont("hack", 24)
|
||||
|
||||
small_font = pygame.font.SysFont("hack", 12)
|
||||
map_lines = map1
|
||||
|
||||
|
||||
all_cars = pygame.sprite.Group()
|
||||
loop = 0
|
||||
max_fitness = 0
|
||||
avg_fitness = 0
|
||||
|
||||
|
||||
for x in range(100):
|
||||
car = Car()
|
||||
@@ -25,6 +27,8 @@ for x in range(100):
|
||||
|
||||
|
||||
def run_round(all_cars):
|
||||
global max_fitness
|
||||
global avg_fitness
|
||||
running_cars = True
|
||||
while running_cars:
|
||||
running_cars = False
|
||||
@@ -40,8 +44,12 @@ def run_round(all_cars):
|
||||
|
||||
for line in map_lines:
|
||||
pygame.draw.line(screen, (255, 255, 255), line[0], line[1])
|
||||
text = font.render(f"Generation {loop}", True, (128, 128, 128))
|
||||
text = font.render(f"Gen # : {loop}", True, (128, 128, 128))
|
||||
mft = small_font.render(f"max fitness : {max_fitness}", True, (128, 128, 128))
|
||||
aft = small_font.render(f"avg fitness : {avg_fitness}", True, (128, 128, 128))
|
||||
screen.blit(text, (GX - 50 - text.get_width(), text.get_height() // 2))
|
||||
screen.blit(mft, (GX - 50 - text.get_width(), text.get_height() // 2 + 30))
|
||||
screen.blit(aft, (GX - 50 - text.get_width(), text.get_height() // 2 + 50))
|
||||
|
||||
pygame.display.flip()
|
||||
clock.tick(48)
|
||||
@@ -51,6 +59,9 @@ def run_round(all_cars):
|
||||
|
||||
print("Collecting brains")
|
||||
brains = [c.brain for c in all_cars]
|
||||
|
||||
max_fitness = round(max([b.fitness for b in brains]), 2)
|
||||
avg_fitness = round(sum([b.fitness for b in brains]) / len(brains), 2)
|
||||
print(f"Max fitness = {max([b.fitness for b in brains])}")
|
||||
print(f"Avg fitness = {sum([b.fitness for b in brains])/len(brains)}")
|
||||
print("selecting")
|
||||
@@ -68,7 +79,6 @@ def run_round(all_cars):
|
||||
pygame.display.flip()
|
||||
|
||||
|
||||
loop = 0
|
||||
while True:
|
||||
loop += 1
|
||||
run_round(all_cars)
|
||||
|
||||
Reference in New Issue
Block a user