code: def create(self, agent_cls=None, n_agents=10, agent_kwargs={},
                 env_cls=Environment, env_kwargs={}, callback=None, conns=0,
                 log_folder=None):
          if not issubclass(env_cls, Environment):
              raise TypeError("Environment class must be derived from ({}"
                              .format(Environment.__class__.__name__))
          if callback is not None and not hasattr(callback, '__call__'):
              raise TypeError("Callback must be callable.")
          if hasattr(agent_cls, '__iter__'):
              for e in agent_cls:
                  if not issubclass(e, CreativeAgent):
                      raise TypeError("All agent classes must be derived from {}"
                                      .format(CreativeAgent.__class__.__name__))
          else:
              if not issubclass(agent_cls, CreativeAgent):
                  raise TypeError("Agent class must be derived from {}"
                                  .format(CreativeAgent.__class__.__name__))
          env = env_cls.create(**env_kwargs)
          agents = []
          if hasattr(agent_cls, '__iter__'):
              for i in range(len(n_agents)):
                  agent_kwargs[i]['environment'] = env
                  agent_kwargs[i]['log_folder'] = log_folder
                  agents = agents + [agent_cls[i](**agent_kwargs[i]) for e in
                                     range(n_agents[i])]
          else:
              agent_kwargs['environment'] = env
              agent_kwargs['log_folder'] = log_folder
              agents = [agent_cls(**agent_kwargs) for e in range(n_agents)]
          if conns > 0:
              env.create_random_connections(n=conns)
          return Simulation(env, callback, log_folder)