Example #1
0
    def __init__(self, xdim, ydim, world_file = WORLD_FILE):
        """
        Create the environment
        """

        #self.Qlog = open("Qlog", "wb+")
        OpenNero.Environment.__init__(self) 
        OpenNero.getSimContext().delay = 0.0;
        
        self.XDIM = xdim
        self.YDIM = ydim
        self.max_steps = 500       
        self.states = {} # dictionary of agent states

        if WORLD_FILE is None:
            self.crumbs = world_handler.pattern_cluster(500, "Roomba/world_config.txt")
        else: # read external file
            data = world_handler.read_world(WORLD_FILE)
            self.XDIM = data['dims'][0]
            self.YDIM = data['dims'][1]
            self.crumbs = data['pellets']
            print len(self.crumbs)
        # only keep crumbs that are inside the walls
        self.crumbs = [c for c in self.crumbs if in_bounds(c.x,c.y)]

        self.init_list = AgentInit()
        self.init_list.add_type("<class 'Roomba.roomba.RoombaBrain'>")
        self.init_list.add_type("<class 'Roomba.RTNEATAgent.RTNEATAgent'>")
        self.init_list.add_type("<class 'Roomba.RLAgent.TabularRLAgent'>")
        #print self.init_list.types

        roomba_abound = self.init_list.get_action("<class 'Roomba.roomba.RoombaBrain'>")
        roomba_sbound = self.init_list.get_sensor("<class 'Roomba.roomba.RoombaBrain'>")
        roomba_rbound = self.init_list.get_reward("<class 'Roomba.roomba.RoombaBrain'>")
        rtneat_abound = self.init_list.get_action("<class 'Roomba.RTNEATAgent.RTNEATAgent'>")
        rtneat_sbound = self.init_list.get_sensor("<class 'Roomba.RTNEATAgent.RTNEATAgent'>")
        rtneat_rbound = self.init_list.get_reward("<class 'Roomba.RTNEATAgent.RTNEATAgent'>")

       
        ### Bounds for Roomba ###
        # actions
        roomba_abound.add_continuous(-math.pi, math.pi) # amount to turn by
        
        # sensors
        roomba_sbound.add_discrete(0,1)    # wall bump
        roomba_sbound.add_continuous(0,xdim)   # self.x
        roomba_sbound.add_continuous(0,ydim)   # self.y
        roomba_sbound.add_continuous(0,xdim)   # closest.x
        roomba_sbound.add_continuous(0,ydim)   # closest.y
        
        # rewards
        roomba_rbound.add_continuous(-100,100) # range for reward

        ### End Bounds for Roomba ####

        ### Bounds for RTNEAT ###
        # actions
        rtneat_abound.add_continuous(-math.pi, math.pi) # amount to turn by
        #rtneat_abound.add_continuous(0, 1) # signal
       
        # sensors
        rtneat_sbound.add_continuous(-math.pi, math.pi) # nearest crumb angle
        rtneat_sbound.add_continuous(0, 1) # proportion of crumb nearby

	# angle and distance sensors for (up to) 8  nearest neighbors
        rtneat_sbound.add_continuous(-math.pi, math.pi)
        rtneat_sbound.add_continuous(0, 1)
        rtneat_sbound.add_continuous(-math.pi, math.pi)
        rtneat_sbound.add_continuous(0, 1)
        rtneat_sbound.add_continuous(-math.pi, math.pi)
        rtneat_sbound.add_continuous(0, 1)
        rtneat_sbound.add_continuous(-math.pi, math.pi)
        rtneat_sbound.add_continuous(0, 1)

        rtneat_sbound.add_continuous(-math.pi, math.pi)
        rtneat_sbound.add_continuous(0, 1)
        rtneat_sbound.add_continuous(-math.pi, math.pi)
        rtneat_sbound.add_continuous(0, 1)
        rtneat_sbound.add_continuous(-math.pi, math.pi)
        rtneat_sbound.add_continuous(0, 1)
        rtneat_sbound.add_continuous(-math.pi, math.pi)
        rtneat_sbound.add_continuous(0, 1)
    
        # rewards
        rtneat_rbound.add_continuous(-math.pi, math.pi)
        ### End Bounds for RTNEAT ###

        #------------------------------------------------------------------------
        rltabular_abound = self.init_list.get_action("<class 'Roomba.RLAgent.TabularRLAgent'>")
        rltabular_sbound = self.init_list.get_sensor("<class 'Roomba.RLAgent.TabularRLAgent'>")
        rltabular_rbound = self.init_list.get_reward("<class 'Roomba.RLAgent.TabularRLAgent'>")

        ### Bounds for RLTabular ###
        # actions
        rltabular_abound.add_continuous(-math.pi, math.pi) # amount to turn by
        
        # sensors
        rltabular_sbound.add_continuous(-1, 1)
        rltabular_sbound.add_continuous(-1, 1)
        rltabular_sbound.add_continuous(-1, 1)
        rltabular_sbound.add_continuous(-1, 1)
        rltabular_sbound.add_continuous(-1, 1)
        rltabular_sbound.add_continuous(-1, 1)
    
        # rewards
        rltabular_rbound.add_continuous(-1, 1)
        ### End Bounds for RLTabular ###
        #------------------------------------------------------------------------


        # set up shop
        # Add Wayne's Roomba room with experimentally-derived vertical offset to match crumbs.
        common.addObject("data/terrain/RoombaRoom.xml", OpenNero.Vector3f(xdim/2,ydim/2, -1), OpenNero.Vector3f(0,0,0), OpenNero.Vector3f(xdim/245.0, ydim/245.0, constants.HEIGHT/24.5), type = constants.OBJECT_TYPE_WALLS)

        # OpenNero.getSimContext().addAxes()
        self.add_crumbs()
        for crumb in self.crumbs:
            self.add_crumb_sensors(roomba_sbound)        
Example #2
0
    def __init__(self, xdim, ydim):
        """
        Create the environment
        """
        OpenNero.Environment.__init__(self) 
        
        self.XDIM = xdim
        self.YDIM = ydim
        self.max_steps = 500       
        self.states = {} # dictionary of agent states
        self.crumbs = world_handler.pattern_cluster(500, "Roomba/world_config.txt")
        # only keep crumbs that are inside the walls
        self.crumbs = [c for c in self.crumbs if in_bounds(c.x,c.y)]

        self.init_list = AgentInit()
        self.init_list.add_type("<class 'Roomba.roomba.RoombaBrain'>")
        self.init_list.add_type("<class 'Roomba.RTNEATAgent.RTNEATAgent'>")
        #print self.init_list.types

        roomba_abound = self.init_list.get_action("<class 'Roomba.roomba.RoombaBrain'>")
        roomba_sbound = self.init_list.get_sensor("<class 'Roomba.roomba.RoombaBrain'>")
        roomba_rbound = self.init_list.get_reward("<class 'Roomba.roomba.RoombaBrain'>")
        rtneat_abound = self.init_list.get_action("<class 'Roomba.RTNEATAgent.RTNEATAgent'>")
        rtneat_sbound = self.init_list.get_sensor("<class 'Roomba.RTNEATAgent.RTNEATAgent'>")
        rtneat_rbound = self.init_list.get_reward("<class 'Roomba.RTNEATAgent.RTNEATAgent'>")

        ### Bounds for Roomba ###
        # actions
        roomba_abound.add_continuous(-math.pi, math.pi) # amount to turn by
        
        # sensors
        roomba_sbound.add_discrete(0,1)    # wall bump
        roomba_sbound.add_continuous(0,xdim)   # self.x
        roomba_sbound.add_continuous(0,ydim)   # self.y
        roomba_sbound.add_continuous(0,xdim)   # closest.x
        roomba_sbound.add_continuous(0,ydim)   # closest.y
        
        # rewards
        roomba_rbound.add_continuous(-100,100) # range for reward

        ### End Bounds for Roomba ####

        ### Bounds for RTNEAT ###
        # actions
        rtneat_abound.add_continuous(-math.pi, math.pi) # amount to turn by
        
        # sensors
        rtneat_sbound.add_continuous(-1, 1)
        rtneat_sbound.add_continuous(-1, 1)
        rtneat_sbound.add_continuous(-1, 1)
        rtneat_sbound.add_continuous(-1, 1)
        rtneat_sbound.add_continuous(-1, 1)
        rtneat_sbound.add_continuous(-1, 1)
    
        # rewards
        rtneat_rbound.add_continuous(-1, 1)
        ### End Bounds for RTNEAT ###

        # set up shop
        # Add Wayne's Roomba room with experimentally-derived vertical offset to match crumbs.
        common.addObject("data/terrain/RoombaRoom.xml", OpenNero.Vector3f(xdim/2,ydim/2, -1), OpenNero.Vector3f(0,0,0), OpenNero.Vector3f(xdim/245.0, ydim/245.0, constants.HEIGHT/24.5), type = constants.OBJECT_TYPE_WALLS)

        # OpenNero.getSimContext().addAxes()
        self.add_crumbs()
        for crumb in self.crumbs:
            self.add_crumb_sensors(roomba_sbound)