class CarApp(App): scores = [] game_widget = None right_panel = None paused = False current_popup = None config_widget = None top_panel = None stats_widget = None map_dialog = None def __init__(self, **kwargs): super(CarApp, self).__init__(**kwargs) self.painter = PaintWidget() self.self_driving_config = Configuration() self.self_driving_config.load() self.brain = Dqn(6, 3, self.self_driving_config) def build(self): self.game_widget = Game() self.game_widget.driving_config = self.self_driving_config self.game_widget.brain = self.brain self.game_widget.scores = self.scores self.game_widget.serve_car() Clock.schedule_interval(self.game_widget.update, 1.0 / 60.0) self.painter.game = self.game_widget self.game_widget.add_widget(self.painter) self.top_panel = TopPanel() self.top_panel.graph_widget.game_widget = self.game_widget self.game_widget.stats_widget = self.top_panel.stats_widget action_bar = TopMenuWidget() action_bar.pause_btn.bind(on_release=self.pause_resume) action_bar.save_brain_button.bind(on_release=self.save_brain) action_bar.save_map_button.bind(on_release=self.show_save_map) action_bar.load_btn.bind(on_release=self.load) action_bar.load_map_btn.bind(on_release=self.show_load_map) action_bar.clear_btn.bind(on_release=self.clear_canvas) action_bar.config_btn.bind(on_release=self.show_configuration) root = RootWidget() root.add_widget(action_bar) root.add_widget(self.top_panel) root.add_widget(self.game_widget) return root def put_stats(self, dt): print("Checking for stats") if self.top_panel.stats_widget is None: return print("stats widget now available") return False def pause_resume(self, btn=None): self.paused = not self.paused self.game_widget.pause_resume() self.top_panel.graph_widget.pause_resume() if not self.paused: Clock.schedule_interval(self.game_widget.update, 1.0 / 60.0) def clear_canvas(self, obj=None): self.painter.canvas.clear() self.game_widget.reset_sand() def save_brain(self, obj): print("saving brain...") self.brain.save() def show_save_map(self, obj): self.pause_resume() self.map_dialog = MapDialog() self.current_popup = Popup(content=self.map_dialog, auto_dismiss=False, title='Save Map', size_hint=(None, None), size=(400, 200)) self.map_dialog.save_btn.bind(on_release=self.map_dialog_action) self.map_dialog.cancel_btn.bind(on_release=self.close_popup) self.current_popup.open() def show_load_map(self, obj): self.pause_resume() self.map_dialog = MapDialog(save_mode=False) self.current_popup = Popup(content=self.map_dialog, auto_dismiss=False, title='Load Map', size_hint=(None, None), size=(400, 200)) self.map_dialog.save_btn.bind(on_release=self.map_dialog_action) self.map_dialog.cancel_btn.bind(on_release=self.close_popup) self.current_popup.open() def map_dialog_action(self, btn): if self.map_dialog.save_mode: self.painter.save(self.map_dialog.filename_input.text) else: self.clear_canvas() self.painter.load(self.map_dialog.filename_input.text) self.current_popup.dismiss() self.pause_resume() def load(self, obj): print("loading last saved brain...") self.brain.load() def show_configuration(self, btn): self.pause_resume() self.config_widget = ConfigurationWidget() self.config_widget.set_config(self.self_driving_config) self.current_popup = Popup(content=self.config_widget, auto_dismiss=False, title='Configuration') self.current_popup.open() self.config_widget.save_btn.bind(on_release=self.save_configuration) self.config_widget.cancel_btn.bind(on_release=self.close_popup) def save_configuration(self, btn): self.pause_resume() self.self_driving_config.update(self.config_widget.get_dict()) self.game_widget.update_config(self.self_driving_config) self.clear_canvas() self.current_popup.dismiss() def close_popup(self, btn): self.pause_resume() self.current_popup.dismiss()
class CarApp(App): def build(self): self.paused = True self.last_size = [0, 0] self.goals = [] self.parent = Game() parent = self.parent sec_num = 6 box_size = 400 self.brain = Dqn(sec_num * 2 + 2, 3, 0.9) circle = Circle() dest = Destinity() parent.serve_car(circle=circle, dest=dest, sec_num=sec_num, box_size=box_size, brain=self.brain, goals=self.goals) Clock.schedule_interval(self.pauseCheck, 1.0 / 60.0) #Clock.schedule_interval(parent.update, 0) self.painter = MyPaintWidget(self.goals) clearbtn = Button(text='clear') savebtn = Button(text='save', pos=(parent.width, 0)) loadbtn = Button(text='load', pos=(2 * parent.width, 0)) self.pausebtn = Button(text='start', pos=(3 * parent.width, 0)) plotbtn = Button(text='plot', pos=(4 * parent.width, 0)) self.setGoalsbtn = Button(text='drawing', pos=(5 * parent.width, 0)) clearbtn.bind(on_release=self.clear_canvas) savebtn.bind(on_release=self.save) loadbtn.bind(on_release=self.load) self.pausebtn.bind(on_release=self.pauseSwitch) plotbtn.bind(on_release=self.plot) self.setGoalsbtn.bind(on_release=self.setGoals) parent.add_widget(self.painter) parent.add_widget(clearbtn) parent.add_widget(savebtn) parent.add_widget(loadbtn) parent.add_widget(self.pausebtn) parent.add_widget(plotbtn) parent.add_widget(self.setGoalsbtn) parent.add_widget(dest) parent.add_widget(circle) return parent def pauseCheck(self, dt): if self.paused == False: self.parent.update() else: if self.last_size != self.parent.size: print("resized") global longueur global largeur longueur = self.parent.width largeur = self.parent.height self.parent.car.center[0] = longueur * 0.5 self.parent.car.center[1] = largeur * 0.125 self.painter.canvas.clear() init() self.parent.update() del self.goals[:] print('goals cleared') self.last_size[0] = self.parent.size[0] self.last_size[1] = self.parent.size[1] shrink_updated = False def pauseSwitch(self, obj): self.paused = 1 - self.paused if self.paused == True: self.pausebtn.text = 'start' else: self.pausebtn.text = 'pause' self.parent.updateGoal() def setGoals(self, obj): self.painter.setgoals = 1 - self.painter.setgoals if self.painter.setgoals == True: self.setGoalsbtn.text = 'setting goals' else: self.setGoalsbtn.text = 'drawing' del self.goals[:] print('goals cleared') def plot(self, obj): plt.plot(scores) plt.show() def clear_canvas(self, obj): global sand self.painter.canvas.clear() sand = np.zeros((longueur, largeur)) shrink_updated = False def save(self, obj): print("saving brain...") self.brain.save() plt.plot(scores) plt.show() def load(self, obj): print("loading last saved brain...") self.brain.load()
elif (action == 0): last_reward = -1 act(last_reward, last_signal) if (dist_right < 30): if (action == 2): last_reward = -1 elif (action == 0): last_reward = -1 act(last_reward, last_signal) if (dist_left < 40): last_reward = -0.2 elif (dist_right < 40): last_reward = -0.2 act(last_reward, last_signal) print("saving brain...") brain.save() except KeyboardInterrupt: pass print("saving brain...") time.sleep(2) brain.save() print(count) gpio.cleanup()