def simulate_parallel(config="../data/config/parallel.json", inData=None, params=None, search_space=None, **kwargs): if inData is None: # othwerwise we use what is passed from MaaSSim.data_structures import structures inData = structures.copy() # fresh data if params is None: params = get_config(config, root_path = kwargs.get('root_path')) # load from .json file if len(inData.G) == 0: # only if no graph in input inData = load_G(inData, params, stats=True) # download graph for the 'params.city' and calc the skim matrices if len(inData.passengers) == 0: # only if no passengers in input inData = generate_demand(inData, params, avg_speed=True) if len(inData.vehicles) == 0: # only if no vehicles in input inData.vehicles = generate_vehicles(inData, params.nV) if len(inData.platforms) == 0: # only if no platforms in input inData.platforms = initialize_df(inData.platforms) inData.platforms.loc[0] = empty_series(inData.platforms) inData.platforms.fare = [1] inData.vehicles.platform = 0 inData.passengers.platforms = inData.passengers.apply(lambda x: [0], axis=1) inData = prep_shared_rides(inData, params.shareability) # obligatory to prepare schedules brute(func=single_pararun, ranges=slice_space(search_space, replications=params.parallel.get("nReplications",1)), args=(inData, params, search_space), full_output=True, finish=None, workers=params.parallel.get('nThread',1))
def simulate(config="../data/config/default.json", inData=None, params=None, **kwargs): """ main runner and wrapper loads or uses json config to prepare the data for simulation, run it and process the results :param config: .json file path :param inData: optional input data :param params: loaded json file :param kwargs: optional arguments :return: simulation object with results """ if inData is None: # otherwise we use what is passed from MaaSSim.data_structures import structures inData = structures.copy() # fresh data if params is None: params = get_config( config, root_path=kwargs.get('root_path')) # load from .json file if kwargs.get('make_main_path', False): from MaaSSim.utils import make_config_paths params = make_config_paths(params, main=kwargs.get('make_main_path', False), rel=True) if params.paths.get('requests', False): inData = read_requests_csv(inData, path=params.paths.requests) if params.paths.get('vehicles', False): inData = read_vehicle_positions(inData, path=params.paths.vehicles) if len(inData.G) == 0: # only if no graph in input inData = load_G( inData, params, stats=True ) # download graph for the 'params.city' and calc the skim matrices if len(inData.passengers) == 0: # only if no passengers in input inData = generate_demand(inData, params, avg_speed=True) if len(inData.vehicles) == 0: # only if no vehicles in input inData.vehicles = generate_vehicles(inData, params.nV) if len(inData.platforms) == 0: # only if no platforms in input inData.platforms = initialize_df(inData.platforms) inData.platforms.loc[0] = empty_series(inData.platforms) inData.platforms.fare = [1] inData = prep_shared_rides(inData, params.shareability) # prepare schedules sim = Simulator(inData, params=params, **kwargs) # initialize for day in range(params.get('nD', 1)): # run iterations sim.make_and_run(run_id=day) # prepare and SIM sim.output() # calc results if sim.functions.f_stop_crit(sim=sim): break return sim