docs: def run_simulations(self, parameter_list, data_folder):
          """
          Run several simulations using a certain combination of parameters.
  
          Yields results as simulations are completed.
  
          Args:
              parameter_list (list): list of parameter combinations to simulate.
              data_folder (str): folder in which to save subfolders containing
                  simulation output.
          """
  
          for idx, parameter in enumerate(parameter_list):
  
              current_result = {
                  'params': {},
                  'meta': {}
                  }
              current_result['params'].update(parameter)
  
              command = [self.script_executable] + ['--%s=%s' % (param, value)
                                                    for param, value in
                                                    parameter.items()]
  
              # Run from dedicated temporary folder
              current_result['meta']['id'] = str(uuid.uuid4())
              temp_dir = os.path.join(data_folder, current_result['meta']['id'])
              os.makedirs(temp_dir)
  
              start = time.time()  # Time execution
              stdout_file_path = os.path.join(temp_dir, 'stdout')
              stderr_file_path = os.path.join(temp_dir, 'stderr')
              with open(stdout_file_path, 'w') as stdout_file, open(
                      stderr_file_path, 'w') as stderr_file:
                  return_code = subprocess.call(command, cwd=temp_dir,
                                                env=self.environment,
                                                stdout=stdout_file,
                                                stderr=stderr_file)
              end = time.time()  # Time execution
  
              if return_code > 0:
                  complete_command = [self.script]
                  complete_command.extend(command[1:])
                  complete_command = "python waf --run \"%s\"" % (
                      ' '.join(complete_command))
  
                  with open(stdout_file_path, 'r') as stdout_file, open(
                          stderr_file_path, 'r') as stderr_file:
                      raise Exception(('Simulation exited with an error.\n'
                                       'Params: %s\n'
                                       '\nStderr: %s\n'
                                       'Stdout: %s\n'
                                       'Use this command to reproduce:\n'
                                       '%s'
                                       % (parameter, stderr_file.read(),
                                          stdout_file.read(), complete_command)))
  
              current_result['meta']['elapsed_time'] = end-start
  
              yield current_result