예제 #1
0
def finish_simulation(simulation_setting, repetitions, logDir):
    analyzers = [rep['analyzer'] for rep in repetitions]

    cnf.save_config(simulation_setting, logDir + 'settings.yaml')

    # write graph metrics to csv
    for ind, analyser in enumerate(analyzers):
        analyser.write(logDir + 'graph_' + str(ind) + '.csv')

    # build mean and std over all analyzers
    metrics_mean = []
    metrics_std = []
    metrics_mean.append(analyzers[0].results['Version'])
    metrics_std.append(analyzers[0].results['Version'])
    for metric in analyzers[0].metrics:
        if metric.getMetricName() is not 'Version':
            metric_combined = np.array([
                analyser.results[metric.getMetricName()]
                for analyser in analyzers
            ])  # a row is an analyzer
            metrics_mean.append(np.mean(metric_combined, axis=0))
            metrics_std.append(np.std(metric_combined, axis=0))

    for suffix, contents in zip(['mean', 'std'], [metrics_mean, metrics_std]):
        combinedCsv = csv.writer(
            open(logDir + 'metrics_' + suffix + '.csv', 'w'))
        combinedCsv.writerow(
            [metric.getMetricName() for metric in analyzers[0].metrics])
        for i in range(len(analyzers[0].results['Version'])):
            row = []
            for row_contents in contents:
                row.append(row_contents[i])
            combinedCsv.writerow(row)

    mean = {
        metric.getMetricName(): metrics_mean[i]
        for i, metric in enumerate(analyzers[0].metrics)
    }
    std = {
        metric.getMetricName(): metrics_std[i]
        for i, metric in enumerate(analyzers[0].metrics)
    }

    return {
        'mean': mean,
        'std': std,
    }
예제 #2
0
def main():
    pool = mp.Pool()

    log.info("Loading Config.")
    settings = cnf.load_config()
    results = {}
    for simulation_setting in settings:
        simulation_dir = './experiment/' + simulation_setting['sim_name'] + '/'
        try:
            os.makedirs(simulation_dir)
        except (FileExistsError):
            pass
        cnf.save_config(simulation_setting, simulation_dir + 'settings.yaml')

        stepConfigs = cnf.get_iteration_steps(simulation_setting)
        results[simulation_setting['sim_name']] = {
            'dir': simulation_dir,
            'steps': [],
        }
        for ind, stepConfig in enumerate(stepConfigs):
            stepDir = simulation_dir + str(ind) + '/'
            try:
                os.mkdir(stepDir)
            except (FileExistsError):
                pass

            stepResult = pool.apply_async(run_simulation,
                                          args=(stepConfig.copy(), stepDir))

            results[simulation_setting['sim_name']]['steps'].append({
                'settings':
                stepConfig,
                'result':
                stepResult,
                'stepDir':
                stepDir,
            })

    pool.close()
    # monitor progress
    ready = False
    while not ready:
        all = sum([
            step['settings']['sim_repetitions'] for sim in results.values()
            for step in sim['steps']
        ])
        finished = sum([
            step['settings']['sim_repetitions'] for sim in results.values()
            for step in sim['steps'] if step['result'].ready()
        ])
        print(str(finished) + ' of ' + str(all) + ' jobs finished')
        ready = (all <= finished)
        try:
            time.sleep(1)
        except:
            pass

    if sum([
            not step['result'].successful() for sim in results.values()
            for step in sim['steps']
    ]) > 0:
        log.error('an exception occurrent in a simulation')

    pool.join()