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)
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)