def __init__(self, n_agents=1, with_finish_zone=True, synchronized_activation=True, dampening=0.75):

        self.n_agents = n_agents
        self.n = n_agents

        """ Environment configuration """
        self.with_finish_zone = with_finish_zone
        self.synchronized_activation = synchronized_activation
        self.dampeding = dampening

        """ Build required entities """
        self.agents = [Entities.Agent() for _ in range(self.n_agents)]
        self.landmarks = [Entities.Landmark() for _ in range(self.n_agents)]

        """ Build per agent action space """
        self.action_space = [gym.spaces.Box(-1.0, 1.0, (2,)) for _ in range(self.n_agents)]

        """
            2 : agent position
            2 : agent velocity
            2 * (n_agents - 1) : relative position to other agents
            2 * n_agents : relative position to landmarks
            n_agents : landmark flags
        """
        obs_dim = 2 + 2 + 2 * (n_agents - 1) + 2 * n_agents + n_agents

        """
            If we are using finish zones :
            2 : relative position to finish zone
            1 : finish zone radius
        """
        if with_finish_zone:
            obs_dim = obs_dim + 2 + 1
            self.finish_zone = Entities.FinishZone()

        """ Build per agent observation space """
        self.observation_space = [gym.spaces.Box(low=0, high=0, shape=(obs_dim,)) for _ in range(self.n_agents)]

        self.render_geoms = None
        self.render_geoms_xform = None
        self.viewer = None
        self.rebuild_geoms = False