class CarGenetic(RaceGame): def __init__(self): self.delta_angle = [ -0.035, -0.03, -0.025, -0.02, -0.015, -0.01, -0.005, 0, 0.005, 0.01, 0.015, 0.02, 0.025, 0.03, 0.035 ] def start(self): self.len_delta = len(self.delta_angle) self.nn_nodes = [5, 8, 5, self.len_delta] self.model = NeuralNetwork(self.nn_nodes) self.step = 0 self.max_step = 0 self.training_group = [] self.best_traning = [] RaceGame.__init__(self) def load(self): self.model = NeuralNetwork() self.model.load('car_model.dat') self.step = 0 self.max_step = 0 self.training_group = [] self.best_traning = [] RaceGame.__init__(self) def update(self): RaceGame.update(self) if self.is_broken: self.training_car() self.car.restart() self.training_group = [] self.step = 0 else: input = self.collision_sight + [self.car.angle] id_output = self.model.train(input) self.training_group.append((input, id_output)) self.step += 1 if self.step == 300: self.model.save('car_model.dat') self.car.update(delta_angle=self.delta_angle[id_output]) def training_car(self): num_last_step = 5 if self.step > self.max_step: self.max_step = self.step self.best_traning = self.training_group[:-num_last_step] for train_data in self.best_traning: self.model.train(train_data[0], expected_id=train_data[1]) for train_data in self.training_group[-num_last_step:]: self.model.train(train_data[0], unexpected_id=train_data[1])
class CarGenetic(RaceGame): def __init__(self): self.delta_angle = [-0.035, -0.03, -0.025, -0.02, -0.015, -0.01, -0.005, 0, 0.005, 0.01, 0.015, 0.02, 0.025, 0.03, 0.035] def start(self): self.len_delta = len(self.delta_angle) self.nn_nodes = [5, 8, 5, self.len_delta] self.model = NeuralNetwork(self.nn_nodes) self.step = 0 self.max_step = 0 self.training_group = [] self.best_traning = [] RaceGame.__init__(self) def load(self): self.model = NeuralNetwork() self.model.load('car_model.dat') self.step = 0 self.max_step = 0 self.training_group = [] self.best_traning = [] RaceGame.__init__(self) def update(self): RaceGame.update(self) if self.is_broken: self.training_car() self.car.restart() self.training_group = [] self.step = 0 else: input = self.collision_sight + [self.car.angle] id_output = self.model.train(input) self.training_group.append((input, id_output)) self.step += 1 if self.step == 300: self.model.save('car_model.dat') self.car.update(delta_angle=self.delta_angle[id_output]) def training_car(self): num_last_step = 5 if self.step > self.max_step: self.max_step = self.step self.best_traning = self.training_group[:-num_last_step] for train_data in self.best_traning: self.model.train(train_data[0], expected_id=train_data[1]) for train_data in self.training_group[-num_last_step:]: self.model.train(train_data[0], unexpected_id=train_data[1])
__author__ = 'sunary' from neural_network.model_nn import NeuralNetwork import pandas as pd import datetime model = NeuralNetwork([50, 20, 10, 2]) model.load('numer_ai.dat') def train(file='/Users/sunary/Downloads/numerai_datasets/numerai_training_data.csv'): df = pd.read_csv(file) for _round in range(100): print 'Round {}: {}'.format(_round, datetime.datetime.now()) for index, row in df.iterrows(): model.train(row[:50].tolist(), int(row['target'])) model.save('numer_ai.dat') def test(file='/Users/sunary/Downloads/numerai_datasets/numerai_training_data.csv'): df = pd.read_csv(file) accuracy = 0 for index, row in df.iterrows(): predict_id = model.train(row[:50].tolist()) if predict_id == int(row['target']): accuracy += 1