code: def run(ns_3_path, results_dir, script, no_optimization, parameters,
          max_processes):
      
  
      sem.parallelrunner.MAX_PARALLEL_PROCESSES = max_processes
  
      # Create a campaign
      campaign = sem.CampaignManager.new(ns_3_path,
                                         script,
                                         results_dir,
                                         overwrite=False,
                                         optimized=not no_optimization)
  
      # Print campaign info
      click.echo(campaign)
  
      # Run the simulations
      [params, defaults] = zip(*get_params_and_defaults(campaign.db.get_params(),
                                                        campaign.db))
  
      # Check whether we need to read parameters from the command line
      if not parameters:
          # Substitute non-None defaults with their string representation
          # This will be then converted back to a Python data structure in
          # query_parameters
          string_defaults = list()
          for idx, d in enumerate(defaults):
              if d is not None:
                  string_defaults.append(str(d))
              else:
                  string_defaults.append(d)
          script_params = query_parameters(params, defaults=string_defaults)
      else:
          script_params = import_parameters_from_file(parameters)
  
      # Finally, run the simulations
      campaign.run_missing_simulations(script_params,
                                       runs=click.prompt("Total runs", type=int))
docs: Run multiple simulations.