def generate_single_run_time_series_plots(nff_session, csv=True, plot=True): print("Generating single run time series plots...", flush=True) for agent in nff_session.time_series: for var in nff_session.time_series[agent]: print(" " + agent + "." + var, flush=True) for e in nff_session.experiments: for id in nff_session.single_ids: folder = nff_session.plot_folder + "/TIME_SERIES/INDIVIDUAL/" + e + "/" + str(id) + "/" + agent + "/" utils.create_folder(folder) if plot: save_as_png = (folder + var) else: save_as_png = False if csv: save_as_csv = (folder + var) else: save_as_csv = False try: nff_session.generate_time_series_plot(agent, var, [e], [id], save_as_png=save_as_png, save_as_csv=save_as_csv) except: print(" ERROR: ", agent, var, e, id) print(" DONE")
def simulate_model_transient(self, no_cpus, skip=False): utils.create_folder(self.workspace) if not skip: utils.delete_folder(self.transient_folder) job_list = [] for i in range(0, self.no_runs): base_folder = self.transient_folder + "/" + str(i) + "/" if not os.path.exists(base_folder): utils.create_folder(base_folder) shutil.copyfile(self.base_xml, base_folder + "0.xml") if self.transient > 0: job_list.append(str(i)) print("Running transient simulations...") pool = Pool(processes=no_cpus) c = 0.0 for job in job_list: pool.apply_async(self.run_model, (self.transient_folder, job, self.transient, self.transient, c)) c = (c + 1) % no_cpus pool.close() pool.join() print(" DONE")
def compile_model(self): utils.create_folder(self.workspace) print("Compiling model code...", end="", flush=True) os.chdir(self.model_path) with open(self.workspace + "/compiler-out.txt", "wb") as out, open(self.workspace + "/compiler-err.txt", "wb") as err: subprocess.run("make", stdout=out, stderr=err) print(" DONE")
def parse_model(self): print("Parsing model structure...", end="") utils.create_folder(self.workspace) sys.stdout.flush() os.chdir(self.xparser_path) with open(self.workspace + "/xparser-out.txt", "wb") as out, open(self.workspace + "/xparser-err.txt", "wb") as err: subprocess.run(["./xparser", self.model_xml], stdout=out, stderr=err) print(" DONE")
def generate_correlation_barcharts_combined(nff_session): print("Generating combined correlation bar charts...", flush=True) for corr in nff_session.correlation_table: print(" " + corr, flush=True) for corr_pair in nff_session.correlation_table[corr]: folder = nff_session.table_folder + "/CORRELATIONS/COMBINED/BARCHART/" + corr + "/" utils.create_folder(folder) try: nff_session.generate_correlation_barchart(corr_pair, nff_session.experiments, nff_session.single_ids, save_as_png=(folder + utils.get_label_from_corr_pair(corr_pair))) except: print(" ERROR:", corr, corr_pair) print(" DONE")
def generate_mean_correlation_tables_combined(nff_session, csv=True, txt=True): print("Generating combined single run correlation tables...", flush=True) for corr in nff_session.correlation_table: print(" " + corr, flush=True) folder = nff_session.table_folder + "/CORRELATIONS/COMBINED/MEAN/" utils.create_folder(folder) if txt: save_as_txt = (folder + corr) else: save_as_txt = False if csv: save_as_csv = (folder + corr) else: save_as_csv = False try: nff_session.generate_correlation_table(nff_session.correlation_table[corr], nff_session.experiments, nff_session.single_ids, save_as_csv=save_as_csv, save_as_txt=save_as_txt) except: print(" ERROR:", corr) print(" DONE")
def generate_single_run_correlation_tables(nff_session, csv=True, txt=True): print("Generating single run correlation tables...", flush=True) for corr in nff_session.correlation_table: print(" " + corr, flush=True) for e in nff_session.experiments: for id in nff_session.single_ids: folder = nff_session.table_folder + "/CORRELATIONS/INDIVIDUAL/" + e + "/" + str(id) + "/" utils.create_folder(folder) if txt: save_as_txt = (folder + corr) else: save_as_txt = False if csv: save_as_csv = (folder + corr) else: save_as_csv = False try: nff_session.generate_correlation_table(nff_session.correlation_table[corr], [e], [id], save_as_csv=save_as_csv, save_as_txt=save_as_txt) except: print(" ERROR:", corr, e, id) print(" DONE")
def generate_overtime_histograms_aggregated_combined(nff_session, csv=True, plot=True): print("Generating aggregated overtime histograms...", flush=True) for agent in nff_session.overtime_histogram: for var in nff_session.overtime_histogram[agent]: print(" " + agent + "." + var, flush=True) folder = nff_session.plot_folder + "/HISTOGRAM/OVER_TIME/COMBINED/AGG/" + agent + "/" utils.create_folder(folder) if plot: save_as_png = (folder + var) else: save_as_png = False if csv: save_as_csv = (folder + var) else: save_as_csv = False try: nff_session.generate_overtime_histogram_plot(agent, var, nff_session.experiments, nff_session.single_ids, save_as_png=save_as_png, save_as_csv=save_as_csv) except: print(" ERROR: ", agent, var) print(" DONE")
def generate_single_agent_time_series_plots_combined(nff_session, csv=True, plot=True): print("Generating single agent time series plots...", flush=True) for agent in nff_session.agent_time_series: for var in nff_session.agent_time_series[agent]: print(" " + agent + "." + var, flush=True) for id in nff_session.single_ids: folder = nff_session.plot_folder + "/TIME_SERIES/COMBINED/" + str(id) + "/" + agent + "_SINGLE/" utils.create_folder(folder) if plot: save_as_png = (folder + var) else: save_as_png = False if csv: save_as_csv = (folder + var) else: save_as_csv = False try: nff_session.generate_time_series_plot(agent, var, nff_session.experiments, [id], save_as_png=save_as_png, save_as_csv=save_as_csv, agents_aggregated=False, linewidth=0.5) except: print(" ERROR: ", agent, var, id) print(" DONE")
def generate_all_runs_time_series_plots_combined(nff_session, csv=True, plot=True): print("Generating combined all runs time series plots...", flush=True) for agent in nff_session.time_series: for var in nff_session.time_series[agent]: print(" " + agent + "." + var, flush=True) folder = nff_session.plot_folder + "/TIME_SERIES/COMBINED/ALL/" + agent + "/" utils.create_folder(folder) if plot: save_as_png = (folder + var) else: save_as_png = False if csv: save_as_csv = (folder + var) else: save_as_csv = False try: nff_session.generate_time_series_plot(agent, var, nff_session.experiments, nff_session.single_ids, save_as_png=save_as_png, save_as_csv=save_as_csv, linewidth=0.5) except: print(" ERROR: ", agent, var) print(" DONE")
def generate_agent_histograms_aggregated_combined(nff_session, csv=True, plot=True): print("Generating aggregated combined agent histograms...", flush=True) for agent in nff_session.agent_histogram: for var in nff_session.agent_histogram[agent]: print(" " + agent + "." + var, flush=True) for t in map(lambda x: int(x * nff_session.agent_histogram_frequency / nff_session.output_frequency), range(0, int((nff_session.iterations-nff_session.burn_in_its) / nff_session.agent_histogram_frequency))): folder = nff_session.plot_folder + "/HISTOGRAM/AGENT/COMBINED/AGG/" + agent + "/" + var + "/" utils.create_folder(folder) if plot: save_as_png = (folder + str(t * nff_session.output_frequency)) else: save_as_png = False if csv: save_as_csv = (folder + str(t * nff_session.output_frequency)) else: save_as_csv = False try: nff_session.generate_agent_histogram_plot(agent, var, nff_session.experiments, nff_session.single_ids, [t], save_as_png=save_as_png, save_as_csv=save_as_csv) except: print(" ERROR: ", agent, var, t) print(" DONE")
def simulate_model(self, no_cpus, skip=False): utils.create_folder(self.workspace) # Create folder structure and 0.xml files if not skip: utils.delete_folder(self.run_folder) job_list = [] for e in self.experiments: for i in range(0, self.no_runs): base_folder = self.run_folder + e + "/" + str(i) + "/" if not os.path.exists(base_folder): utils.create_folder(base_folder) shutil.copyfile( self.transient_folder + "/" + str(i) + "/" + str(self.transient) + ".xml", base_folder + str(self.transient) + ".xml") filemodification.modify0xml( base_folder + str(self.transient) + ".xml", self.experiments[e]) job_list.append(e + "/" + str(i)) # Run model print("Running Experiments...", flush=True) pool = Pool(processes=no_cpus) c = 0.0 for job in job_list: pool.apply_async( self.run_model, (self.run_folder, job, self.iterations, self.output_frequency, c, str(self.transient) + ".xml")) c = (c + 1) % no_cpus pool.close() pool.join() print(" DONE")
def generate_overtime_histograms_single_runs(nff_session, csv=True, plot=True): print("Generating single run overtime histograms...", flush=True) for agent in nff_session.overtime_histogram: for var in nff_session.overtime_histogram[agent]: print(" " + agent + "." + var, flush=True) for e in nff_session.experiments: for id in nff_session.single_ids: folder = nff_session.plot_folder + "/HISTOGRAM/OVER_TIME/INDIVIDUAL/" + e + "/" + str(id) + "/" + agent + "/" utils.create_folder(folder) if plot: save_as_png = (folder + var) else: save_as_png = False if csv: save_as_csv = (folder + var) else: save_as_csv = False try: nff_session.generate_overtime_histogram_plot(agent, var, [e], [id], save_as_png=save_as_png, save_as_csv=save_as_csv) except: print(" ERROR: ", agent, var, e, id) print(" DONE")
def generate_agent_histograms_single_runs(nff_session, csv=True, plot=True): print("Generating single run agent histograms...", flush=True) for agent in nff_session.agent_histogram: for var in nff_session.agent_histogram[agent]: print(" " + agent + "." + var, flush=True) for e in nff_session.experiments: for id in nff_session.single_ids: for t in map(lambda x: int(x * nff_session.agent_histogram_frequency / nff_session.output_frequency), range(0, int((nff_session.iterations-nff_session.burn_in_its) / nff_session.agent_histogram_frequency))): folder = nff_session.plot_folder + "/HISTOGRAM/AGENT/INDIVIDUAL/" + e + "/" + str(id) + "/" + agent + "/" + var + "/" utils.create_folder(folder) if plot: save_as_png = (folder + str(t * nff_session.output_frequency)) else: save_as_png = False if csv: save_as_csv = (folder + str(t * nff_session.output_frequency)) else: save_as_csv = False try: nff_session.generate_agent_histogram_plot(agent, var, [e], [id], [t], save_as_png=save_as_png, save_as_csv=save_as_csv) except: print(" ERROR: ", agent, var, e, id, t) print(" DONE")