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()
Example #2
0
    plt.savefig('progression.png')


last_reward = 0
memo = []
brain = Dqn((1, 80, 80), 3, 0.9)
condition = True
last_state = np.zeros((1, 80, 80))
counter = 0
steps_count = 0
mean_steps = 0
scores = []
up_pressed = False
dino = cv2.cvtColor(cv2.imread('game_over.png'), cv2.COLOR_BGR2GRAY)
w, h = dino.shape[:2]
brain.load()
while (condition):

    action = brain.update(last_reward, last_state)

    if action == 2:
        pyautogui.keyUp('down')
        pyautogui.keyDown('up')
    elif action == 0:
        pyautogui.keyUp('up')
        pyautogui.keyUp('down')
    else:
        pyautogui.keyUp('up')
        pyautogui.keyDown('down')
#
    screen = np.array(ImageGrab.grab(bbox=(5, 155, 600, 296)))
Example #3
0
class AgentRealistic:

    def __init__(self,agent_host,agent_port, mission_type, mission_seed, solution_report, state_space_graph):
        """ Constructor for the realistic agent """
        self.AGENT_MOVEMENT_TYPE = 'Discrete' #This can be varied between the following -  {Absolute, Discrete, Continuous}
        self.AGENT_NAME = 'Realistic'
        self.AGENT_ALLOWED_ACTIONS = ["movenorth 1", "movesouth 1", "movewest 1", "moveeast 1"]

        self.agent_host = agent_host
        self.agent_port = agent_port
        self.mission_seed = mission_seed
        self.mission_type = mission_type
        self.state_space = None; # Note - To be a true Realistic Agent, it can not know anything about the state_space a priori!
        self.solution_report = solution_report;
        self.solution_report.setMissionType(self.mission_type)
        self.solution_report.setMissionSeed(self.mission_seed)
        self.last_reward = 0
        self.accumulative_reward = 0
        self.brain = Dqn(2, len(self.AGENT_ALLOWED_ACTIONS), 0.9)
        self.brain.load()


    #----------------------------------------------------------------------------------------------------------------#
    def __ExecuteActionForRealisticAgentWithNoisyTransitionModel__(self, idx_requested_action, noise_level):
        """ Creates a well-defined transition model with a certain noise level """
        n = len(self.AGENT_ALLOWED_ACTIONS)
        pp = noise_level/(n-1) * np.ones((n,1))
        pp[idx_requested_action] = 1.0 - noise_level
        idx_actual = np.random.choice(n, 1, p=pp.flatten()) # sample from the distribution of actions
        actual_action = self.AGENT_ALLOWED_ACTIONS[int(idx_actual)]
        self.agent_host.sendCommand(actual_action)
        return actual_action

    #----------------------------------------------------------------------------------------------------------------#
    def run_agent(self):
        """ Run the Realistic agent and log the performance and resource use """

        partialReward = 0
        #-- Load and initiate mission --#
        print('Generate and load the ' + self.mission_type + ' mission with seed ' + str(self.mission_seed) + ' allowing ' +  self.AGENT_MOVEMENT_TYPE + ' movements')
        mission_xml = init_mission(self.agent_host, self.agent_port, self.AGENT_NAME, self.mission_type, self.mission_seed, self.AGENT_MOVEMENT_TYPE)
        self.solution_report.setMissionXML(mission_xml)

        self.solution_report.start()
        time.sleep(1)

        state_t = self.agent_host.getWorldState()
        first = True
        # -- Get a state-space model by observing the Orcale/GridObserver--#
        while state_t.is_mission_running:
            if first:
                time.sleep(2)
                first = False
             # -- Basic map --#
            state_t = self.agent_host.getWorldState()  
            if state_t.number_of_observations_since_last_state > 0:
                msg = state_t.observations[-1].text  # Get the details for the last observed state
                oracle_and_internal = json.loads(msg)  # Parse the Oracle JSON
                grid = oracle_and_internal.get(u'grid', 1)
                xpos = oracle_and_internal.get(u'XPos', 1)
                zpos = oracle_and_internal.get(u'ZPos', 1)
                ypos = oracle_and_internal.get(u'YPos', 1)
                yaw = oracle_and_internal.get(u'Yaw', 1)  
                pitch = oracle_and_internal.get(u'Pitch', 1)

            #last_signal = [xpos, zpos, ypos, yaw, pitch]
            last_signal = [xpos, ypos]


            action = self.brain.update(self.last_reward, last_signal)
            print("Requested Action:", self.AGENT_ALLOWED_ACTIONS[action])
            self.__ExecuteActionForRealisticAgentWithNoisyTransitionModel__(action, 0.1)
            time.sleep(0.02)
            self.solution_report.action_count = self.solution_report.action_count + 1
            for reward_t in state_t.rewards:
                partialReward += reward_t.getValue()
                #self.last_reward = reward_t.getValue()

                self.accumulative_reward += reward_t.getValue()
                self.solution_report.addReward(reward_t.getValue(), datetime.datetime.now())
                print("Reward_t:",reward_t.getValue())
                print("Cummulative reward so far:", self.accumulative_reward)

            print("Last Reward:{0}".format(partialReward))
            self.last_reward = partialReward
            partialReward = 0


        return
Example #4
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()