working , rc release !
This commit is contained in:
22
car.py
22
car.py
@@ -1,3 +1,4 @@
|
||||
import datetime
|
||||
import math
|
||||
import numpy as np
|
||||
import random
|
||||
@@ -10,6 +11,7 @@ from params import (
|
||||
CAR_MAX_FITNESS,
|
||||
CAR_SIZE,
|
||||
CAR_STEERING_FACTOR,
|
||||
MAX_RUN_TIME,
|
||||
VISION_LENGTH,
|
||||
VISION_SPAN,
|
||||
THROTTLE_POWER,
|
||||
@@ -59,6 +61,7 @@ class Car(pygame.sprite.Sprite):
|
||||
self.probe_brain()
|
||||
self.run = True
|
||||
self.distance_run = 0
|
||||
self.creation_dt = datetime.datetime.now()
|
||||
|
||||
def reset_car_pos(self):
|
||||
self.rect.center = (
|
||||
@@ -107,7 +110,9 @@ class Car(pygame.sprite.Sprite):
|
||||
)
|
||||
self.update_sensors()
|
||||
self.distance_run += int(distance(old_center, self.rect.center))
|
||||
self.brain.fitness = int(math.sqrt(self.distance_run))
|
||||
self.brain.fitness = int(
|
||||
math.sqrt(self.distance_run)
|
||||
) # - 2 # penalize jittering
|
||||
|
||||
def probe_lines_proximity(self, lines):
|
||||
# print(self.center_sensor, lines[0])
|
||||
@@ -123,7 +128,7 @@ class Car(pygame.sprite.Sprite):
|
||||
pygame.draw.circle(screen, (125, 125, 255), ip, 4, 2)
|
||||
dist = int(distance(ip, self.rect.center))
|
||||
self.probes[idx] = min(dist, self.probes[idx])
|
||||
if dist < 1.2 * self.speed or self.speed < 0.01:
|
||||
if dist < 1 * self.speed or self.speed < 0.01:
|
||||
self.run = False
|
||||
self.speed = 0
|
||||
# print(f'Car {id(self)} crashed')
|
||||
@@ -135,8 +140,8 @@ class Car(pygame.sprite.Sprite):
|
||||
|
||||
def probe_brain(self):
|
||||
res = self.brain.predict(np.array(self.probes))
|
||||
self.heading_change = res[0] * 15
|
||||
self.throttle = res[1] * 10
|
||||
self.heading_change = res[0] * 30
|
||||
self.throttle = res[1] * 5
|
||||
|
||||
def update(self):
|
||||
# rotate
|
||||
@@ -145,7 +150,14 @@ class Car(pygame.sprite.Sprite):
|
||||
self.rect = self.image.get_rect()
|
||||
self.rect.center = old_center
|
||||
self.update_position()
|
||||
if self.speed < 0.01 or self.brain.fitness > CAR_MAX_FITNESS:
|
||||
run_time = (datetime.datetime.now() - self.creation_dt).seconds
|
||||
if 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
|
||||
):
|
||||
self.run = False
|
||||
print(f"Car {id(self)} crashed")
|
||||
# print(
|
||||
|
||||
Reference in New Issue
Block a user