def _set_walls(self, world, num_room, arena_size): num_wall = 3 * num_room + 1 length = arena_size / num_room window_length = length / 2 #wall_orient = "H" * num_wall wall_orient = ('HVH' * num_room) + 'V' wall_axis_pos = np.zeros((num_wall)) wall_endpoints = [] for i in range(num_room): #wall_orient[3*i:3*i+3] = 'HVH' wall_axis_pos[3 * i:3 * i + 3] = np.array([ arena_size / 2, -arena_size / 2 + length * i, arena_size / 2 - length ]) wall_endpoints.append((-arena_size / 2 + length * i, -arena_size / 2 + length * (i + 1))) wall_endpoints.append((arena_size / 2, arena_size / 2 - length)) wall_endpoints.append( (-arena_size / 2 + length * i, -arena_size / 2 + length * (i + 1) - window_length)) #wall_orient[num_room-1] = 'V' # wall_orient = wall_orient[:num_room - 1] + 'V' + wall_orient[num_room:] wall_axis_pos[num_wall - 1] = arena_size / 2 wall_endpoints.append((arena_size / 2, arena_size / 2 - length)) world.walls = [ Wall(orient=wall_orient[i], axis_pos=wall_axis_pos[i], endpoints=wall_endpoints[i]) for i in range(num_wall) ] for room in world.rooms: world.walls.append(room.window.wall) # boundary_wall_orient = 'VHV' # boundary_wall_axis_pos = np.array([-arena_size/2, -arena_size/2, arena_size/2]) # boundary_wall_endpoints = [] # boundary_wall_endpoints.append((-arena_size/2, arena_size/2 - length)) # boundary_wall_endpoints.append((-arena_size / 2, arena_size / 2)) # boundary_wall_endpoints.append((-arena_size / 2, arena_size / 2 - length)) # for i in range(len(boundary_wall_orient)): # world.walls.append(Wall(orient=boundary_wall_orient[i], axis_pos=boundary_wall_axis_pos[i], endpoints=boundary_wall_endpoints[i])) arena_size_larger = 3 boundary_wall_orient = 'VHVH' boundary_wall_axis_pos = np.array([ -arena_size_larger / 2, -arena_size / 2, arena_size_larger / 2, arena_size / 2 ]) boundary_wall_endpoints = [] boundary_wall_endpoints.append((-arena_size / 2, arena_size / 2)) boundary_wall_endpoints.append( (-arena_size_larger / 2, arena_size_larger / 2)) boundary_wall_endpoints.append((-arena_size / 2, arena_size / 2)) boundary_wall_endpoints.append( (-arena_size_larger / 2, arena_size_larger / 2)) for i in range(len(boundary_wall_orient)): world.walls.append( Wall(orient=boundary_wall_orient[i], axis_pos=boundary_wall_axis_pos[i], endpoints=boundary_wall_endpoints[i]))
def make_world(self, staged=False, set_trap=True, use_dense_rewards=False): world = World() world.use_dense_rewards = use_dense_rewards # set any world properties first self.staged = staged self.set_trap = set_trap num_agents = 2 num_landmarks = 2 * num_agents self.num_walls = 4 + int(self.staged) # add landmarks world.landmarks = [Landmark() for i in range(num_landmarks)] for i, landmark in enumerate(world.landmarks): landmark.name = 'landmark %d' % i landmark.collide = False landmark.movable = False landmark.size *= 4 landmark.is_activated = False # add agents world.agents = [Agent() for i in range(num_agents)] for i, agent in enumerate(world.agents): agent.name = 'agent %d' % i agent.collide = False if i == 0: agent.role = 'imitator' agent.clip_positions = np.array( [[-world.scale, .55 * world.scale], [world.scale, world.scale]]) agent.landmarks = [world.landmarks[2], world.landmarks[3]] self.trap_width = agent.size * 4. elif i == 1: agent.role = 'demonstrator' agent.clip_positions = np.array( [[-world.scale, -world.scale], [world.scale, .45 * world.scale]]) agent.landmarks = [world.landmarks[0], world.landmarks[1]] else: raise ValueError( 'There should only be two agents in this scenario') # add walls to force the "leader" through a longer path world.walls = [Wall() for i in range(self.num_walls)] if self.set_trap: world.trap = Wall() world.walls.append(world.trap) # make initial conditions self.reset_world(world) return world
def make_world(self, config): self.shaping = config.shaping self.predators_comm = config.predators_comm world = World() world.randomPreySpeed = True if config.prey_max_speed == 'random' else False # set any world properties first world.dim_c = config.predators_comm_size if config.predators_comm else 0 num_prey = config.num_prey num_predators = config.num_predators num_agents = num_predators + num_prey num_landmarks = config.num_landmarks # add walls if config.bound_world: world.walls.append(Wall(orient='H', axis_pos=1.3, endpoints=(-2, 2), width=0.2, hard=True)) world.walls.append(Wall(orient='H', axis_pos=-1.3, endpoints=(-2, 2), width=0.2, hard=True)) world.walls.append(Wall(orient='V', axis_pos=1.3, endpoints=(-2, 2), width=0.2, hard=True)) world.walls.append(Wall(orient='V', axis_pos=-1.3, endpoints=(-2, 2), width=0.2, hard=True)) # add agents world.agents = [Agent() for i in range(num_agents)] for i, agent in enumerate(world.agents): agent.name = 'agent %d' % i agent.id = i agent.collide = True agent.adversary = True if i < num_predators else False # if config.predators_comm: # agent.silent = False if agent.adversary else True # Oren # else: # agent.silent = True agent.silent = True agent.size = 0.075 if agent.adversary else 0.05 # agent.accel = 3.0 if agent.adversary else 2.0 # agent.max_speed = 1.0 if agent.adversary else 0.5 agent.accel = config.pred_acc if agent.adversary else config.prey_acc agent.max_speed = config.pred_max_speed if agent.adversary else config.prey_max_speed # add landmarks world.landmarks = [Landmark() for i in range(num_landmarks)] for i, landmark in enumerate(world.landmarks): landmark.name = 'landmark %d' % i landmark.collide = True landmark.movable = False landmark.size = 0.2 landmark.boundary = False # make initial conditions self.reset_world(world) return world
def make_world(self): world = World() # set any world properties world.dim_c = 2 num_agents = 3 num_landmarks = 3 # add agents world.agents = [Agent() for i in range(num_agents)] for i, agent in enumerate(world.agents): agent.name = 'agent %d' % i agent.collide = True agent.silent = True agent.size = 0.1 agent.max_speed = 1 # add landmarks world.landmarks = [Landmark() for i in range(num_landmarks)] for i, landmark in enumerate(world.landmarks): if i < 3: landmark.name = 'landmark %d' % i landmark.collide = False landmark.movable = False else: landmark.name = 'obstacle %d' % i landmark.collide = True landmark.movable = False landmark.size = 0.04 # add walls world.walls = [Wall(*w) for w in walls] # make initial conditions self.reset_world(world) return world
def make_world(self): world = World() wall = Wall() # set any world properties first world.dim_c = 2 num_good_agents = 2 num_adversaries = 2 num_agents = num_adversaries + num_good_agents num_landmarks = 1 # add agents world.agents = [Agent() for i in range(num_agents)] for i, agent in enumerate(world.agents): agent.name = 'agent %d' % i agent.collide = True agent.silent = True agent.adversary = True if i < num_adversaries else False agent.size = 0.05 if agent.adversary else 0.05 agent.accel = 3.0 if agent.adversary else 3.0 # agent.accel = 20.0 if agent.adversary else 25.0 agent.max_speed = 1.0 if agent.adversary else 1.0 # add landmarks world.landmarks = [Landmark() for i in range(num_landmarks)] for i, landmark in enumerate(world.landmarks): landmark.name = 'landmark %d' % i landmark.collide = True landmark.movable = False landmark.size = 0.06 landmark.boundary = False # make initial conditions self.reset_world(world) return world
def __init__(self, p1, p2): #list of two np arrays contain the two end_points of the window self.p1 = p1 self.p2 = p2 if abs(p1.x - p2.x) < 1e-5: wall_orient = 'V' wall_axis_pos = p1.x endpoints = (p1.y, p2.y) if abs(p1.y - p2.y) < 1e-5: wall_orient = 'H' wall_axis_pos = p1.y endpoints = (p1.x, p2.x) self.wall = Wall(orient=wall_orient, axis_pos=wall_axis_pos, endpoints=endpoints) self.wall.color = np.array([0, 0.9, 0.3])
def make_world(self, graph_obs=False): world = World() world.graph_obs = graph_obs # set any world properties first world.dim_c = 2 num_good_agents = 4 num_adversaries = 4 num_agents = num_adversaries + num_good_agents num_landmarks = 2 num_walls = 0 # add agents world.agents = [Agent() for i in range(num_agents)] for i, agent in enumerate(world.agents): agent.name = 'agent %d' % i agent.collide = True agent.silent = True agent.adversary = True if i < num_adversaries else False agent.size = 0.075 if agent.adversary else 0.05 agent.accel = 3.0 if agent.adversary else 4.0 #agent.accel = 20.0 if agent.adversary else 25.0 agent.max_speed = 1.0 if agent.adversary else 1.3 # add landmarks world.landmarks = [Landmark() for i in range(num_landmarks)] for i, landmark in enumerate(world.landmarks): landmark.name = 'landmark %d' % i landmark.collide = True landmark.movable = False landmark.size = 0.2 landmark.boundary = False world.walls = [Wall() for i in range(num_walls)] for i, wall in enumerate(world.walls): wall.name = 'wall %d' % i wall.collide = True wall.movable = False wall.size = 0.0 wall.boundary = False if num_walls != 0: world.walls[0].state.p_pos = np.asarray([1, 0]) world.walls[1].state.p_pos = np.asarray([0, 1]) world.walls[2].state.p_pos = np.asarray([-1, 0]) world.walls[3].state.p_pos = np.asarray([0, -1]) # make initial conditions self.reset_world(world) return world
def make_world(self, n_agents=3, by_stander=False): world = World() # set any world properties first world.dim_c = 0 num_agents = n_agents num_walls = 4 # add landmarks world.landmarks = [] # add agents world.agents = [Agent() for i in range(num_agents)] world.goals = ['top', 'bottom', 'left', 'right'] cm = plt.cm.get_cmap('rainbow') world.colors = [ np.array(cm(float(i) / float(len(world.agents)))[:3]) for i in range(len(world.agents)) ] for i, agent in enumerate(world.agents): if by_stander and i == 0: agent.goal = None else: agent.goal = np.random.choice(world.goals) agent.name = 'agent %d' % i agent.silent = True agent.collide = True agent.size = 0.05 agent.accel = 1.5 agent.max_speed = 1.5 agent.adversary = False agent.clip_positions = np.array([[-1.02, -1.02], [1.02, 1.02]]) agent.is_colliding = { other_agent.name: False for other_agent in world.agents if agent is not other_agent } # add walls to force the "leader" through a longer path world.walls = [Wall() for i in range(num_walls)] # make initial conditions self.reset_world(world) return world
def make_world(self): world = World() # set any world properties first world.dim_c = 2 # add agents num_agents = 6 world.agent_attributes = [] world.other_entities = [] world.observability_mask = np.zeros((6, 28)) world.observable_range = 0.2 # each agent can see this far world.agents = [Agent() for i in range(num_agents)] for i, agent in enumerate(world.agents): agent.i = i agent.alive = True agent.name = 'agent %d' % i agent.collide = True agent.silent = True agent.at = -1 agent.hold = 0 agent.movable = True agent.state.p_pos = np.zeros((2)) agent.state.p_vel = np.zeros((2)) agent.attribute = np.zeros((5)) agent.size = 0.04 # add other objects as landmarks [home, prey1, prey2, prey3, market] num_landmarks = 8 world.landmarks = [Landmark() for i in range(num_landmarks)] for i, landmark in enumerate(world.landmarks): if i == 0: landmark.i = i + num_agents landmark.name = 'home' landmark.alive = True landmark.collide = True landmark.movable = False landmark.size = 0.08 landmark.load = 2 landmark.boundary = False landmark.state.p_pos = np.array([0, 0]) landmark.color = np.array([0, 0, 0]) elif i < 7: landmark.i = i + num_agents landmark.name = str(i) landmark.alive = True landmark.collide = True landmark.movable = False landmark.size = 0.05 landmark.boundary = False landmark.color = np.array([0, 0, 1]) landmark.state.p_pos = self.get_new_respawn_position() elif i == 7: landmark.i = i + num_agents landmark.name = 'invader' landmark.alive = True landmark.collide = True landmark.movable = False landmark.size = 0.03 landmark.color = np.array([0., 0., 0.]) landmark.state.p_pos = np.array([0, 0]) landmark.boundary = False self.invader_respawn_time = 0 self.n_entities = num_agents + num_landmarks # add walls world.walls = [ Wall('H', 1.4, width=1), Wall('H', -1.4, width=1), Wall('V', 1.4, width=1), Wall('V', -1.4, width=1), ] self.all_configurations = np.load("test.npy") self.num_agents = 5 self.t = -1 return world