コード例 #1
0
    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]))
コード例 #2
0
    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
コード例 #3
0
ファイル: simple_tag.py プロジェクト: orenpeer12/torch_maddpg
    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
コード例 #4
0
 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
コード例 #6
0
 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])
コード例 #7
0
ファイル: Predator_prey_4v4.py プロジェクト: WangQHui/MPE
    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
コード例 #8
0
 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
コード例 #9
0
    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