예제 #1
0
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()
예제 #2
0
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()
예제 #3
0
            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()