class_docstr: A CompositeAgent is a group of agents in the same hierarchy level.
  In a CompositeAgent, each agent may take the role of either a controller or an observer.
  Each agent that is defined as observer, gets observations from the environment.
  Each agent that is defined as controller, can potentially also control the environment, in addition to observing it.
  There are several ways to decide on the action from different controller agents:
  1. Ensemble -
      - Take the majority vote (discrete controls)
      - Take the mean action (continuous controls)
      - Round robin between the agents (discrete/continuous)
  2. Skills -
      - At each step a single agent decides (Chosen by the uppoer hierarchy controlling agent)
  
  A CompositeAgent can be controlled using one of the following methods (ActionSpaces):
  1. Goals (in terms of measurements, observation, embedding or a change in those values)
  2. Agent Selection (skills) / Discrete action space.
  3. Attention (a subset of the real environment observation / action space)
class_docstr_tok: ["A","CompositeAgent","is","a","group","of","agents","in","the","same","hierarchy","level",".","In","a","CompositeAgent",",","each","agent","may","take","the","role","of","either","a","controller","or","an","observer",".","Each","agent","that","is","defined","as","observer",",","gets","observations","from","the","environment",".","Each","agent","that","is","defined","as","controller",",","can","potentially","also","control","the","environment",",","in","addition","to","observing","it",".","There","are","several","ways","to","decide","on","the","action","from","different","controller","agents",":","1",".","Ensemble","-","-","Take","the","majority","vote","(","discrete","controls",")","-","Take","the","mean","action","(","continuous","controls",")","-","Round","robin","between","the","agents","(","discrete\/continuous",")","2",".","Skills","-","-","At","each","step","a","single","agent","decides","(","Chosen","by","the","uppoer","hierarchy","controlling","agent",")","A","CompositeAgent","can","be","controlled","using","one","of","the","following","methods","(","ActionSpaces",")",":","1",".","Goals","(","in","terms","of","measurements",",","observation",",","embedding","or","a","change","in","those","values",")","2",".","Agent","Selection","(","skills",")","\/","Discrete","action","space",".","3",".","Attention","(","a","subset","of","the","real","environment","observation","\/","action","space",")"]
docstr: Setup the logger for all the agents in the composite agent
  :return: None
docstr_tok: ["Setup","the","logger","for","all","the","agents","in","the","composite","agent",":","return",":","None"]
code: def setup_logger(self) -> None:
      """
      Setup the logger for all the agents in the composite agent
      :return: None
      """
      [agent.setup_logger() for agent in self.agents.values()]
  
imports: import copy
  import itertools
  from enum import Enum
  from typing import Union, List, Dict
  import numpy
  from rl_coach.agents.agent_interface import AgentInterface
  from rl_coach.base_parameters import AgentParameters, VisualizationParameters
  from rl_coach.core_types import ActionInfo, EnvResponse, ActionType, RunPhase
  from rl_coach.filters.observation.observation_crop_filter import ObservationCropFilter
  from rl_coach.saver import SaverCollection
  from rl_coach.spaces import ActionSpace
  from rl_coach.spaces import AgentSelection, AttentionActionSpace, SpacesDefinition
  from rl_coach.utils import short_dynamic_import
label_desc: Use image node_id 5 for calling the CompositeAgent obj's underlying member method code with example usage: obj.setup_logger() without return types