def revive_simulation(rev_parameters, sim_functions): print('\n[' + rev_parameters["simulation_name"].upper() + ' REVIVAL SIMULATION]') Populations = {} if "sim_folder" in rev_parameters: print('Accessing simulation files directory...') print('Excavating World entity: ' + rev_parameters['eco_file'] + '...') World = excavate_world(rev_parameters['sim_folder'] + \ rev_parameters['eco_file']) print('Updating parameters with World dimensions...') rev_parameters["world_z"] = len(World.ecosystem[0][0][0]) rev_parameters["world_y"] = len(World.ecosystem[0][0]) rev_parameters["world_x"] = len(World.ecosystem[0]) for i in range(len(rev_parameters["pop_files"])): print('\nReviving population file: ' + \ rev_parameters["pop_files"][i] + '...') pop_file = rev_parameters["sim_folder"] + \ rev_parameters["pop_files"][i] Populations[rev_parameters["population_names"][i]] = \ revive_population(pop_file) print('\nUpdating revival generation start in simulation parameters...') rev_parameters["rev_start"] = [Populations[pop_name].generation for pop_name in Populations] elif "database_source" in rev_parameters: print('Constructing database directory...') dbpath = os.sep.join([os.getcwd(), 'Simulations', rev_parameters["database_source"]]) print('Connecting to database file: ' + \ rev_parameters["database_source"] + '...') (con, cur) = connect_database(dbpath, None) if rev_parameters["simulation_time"] == 'default': print('Acquiring simulation starting time...') rev_parameters["simulation_time"] = db_list_simulations(cur)[0][0] print('Reconstructing old simulation parameters...') temp_parameters = db_reconstruct_simulation_parameters(cur, rev_parameters["simulation_time"]) print('Assimilating old simulation parameters with new simulation parameters...') for key in temp_parameters: if key not in rev_parameters: rev_parameters[key] = temp_parameters[key] print('Reconstructing World entity...') World = db_reconstruct_world(cur, rev_parameters["simulation_time"], rev_parameters["rev_start"][0]) print('\nUpdating population names parameter...') for pop_name in rev_parameters["population_names"]: print('Reconstructing population: ' + pop_name + '...') Populations[pop_name] = db_reconstruct_population(cur, rev_parameters["simulation_time"], pop_name, rev_parameters["rev_start"][rev_parameters["population_names"].index(pop_name)]) print('Terminating database connection...') con.close() print('Updating last generation revival and population size simulation parameters...') rev_parameters["rev_finish"] = [(Populations[pop_name].generation + \ rev_parameters["extend_gen"]) for pop_name in Populations] rev_parameters["rev_pop_size"] = [len(Populations[pop_name].agents) for pop_name in Populations] print('\nStarting simulation core...') simulation_core(sim_functions, rev_parameters, Populations, World)
def revive_simulation(rev_parameters, sim_functions, eb = event_broker()): eb.log("[" + rev_parameters["simulation_name"].upper() + " REVIVAL SIMULATION]") populations = {} world = None eb.log("Accessing simulation files directory") if "sim_folder" in rev_parameters: eb.log('Excavating World entity: ' + rev_parameters['eco_file']) world = excavate_world(rev_parameters['sim_folder'] + rev_parameters['eco_file']) eb.log('Updating parameters with World dimensions') rev_parameters["world_z"] = len(world.ecosystem[0][0][0]) rev_parameters["world_y"] = len(world.ecosystem[0][0]) rev_parameters["world_x"] = len(world.ecosystem[0]) for i in range(len(rev_parameters["pop_files"])): eb.log('Reviving population file: ' + rev_parameters["pop_files"][i]) pop_file = rev_parameters["sim_folder"] + rev_parameters["pop_files"][i] populations[rev_parameters["population_names"][i]] = revive_population(pop_file) eb.log('Updating revival generation start in simulation parameters') rev_parameters["rev_start"] = [populations[pop_name].generation for pop_name in populations] elif "database_source" in rev_parameters: eb.log('Constructing database directory') dbpath = os.sep.join([os.getcwd(), 'Simulations', rev_parameters["database_source"]]) eb.log('Connecting to database file: ' + rev_parameters["database_source"]) (con, cur) = connect_database(dbpath, None) if rev_parameters["simulation_time"] == 'default': eb.log('Acquiring simulation starting time') rev_parameters["simulation_time"] = db_list_simulations(cur)[0][0] eb.log('Reconstructing old simulation parameters') temp_parameters = db_reconstruct_simulation_parameters(cur, rev_parameters["simulation_time"]) eb.log('Assimilating old simulation parameters with new simulation parameters') for key in temp_parameters: if key not in rev_parameters: rev_parameters[key] = temp_parameters[key] eb.log('Reconstructing World entity') world = db_reconstruct_world(cur, rev_parameters["simulation_time"], rev_parameters["rev_start"][0]) eb.log('Updating population names parameter') for pop_name in rev_parameters["population_names"]: eb.log('Reconstructing population: ' + pop_name) populations[pop_name] = db_reconstruct_population(cur, rev_parameters["simulation_time"], pop_name, rev_parameters["rev_start"][rev_parameters ["population_names"].index(pop_name)]) eb.log('Terminating database connection') con.close() eb.log('Updating last generation revival and population size simulation parameters') rev_parameters["rev_finish"] = [(populations[pop_name].generation + rev_parameters["extend_gen"]) for pop_name in populations] rev_parameters["rev_pop_size"] = [len(populations[pop_name].agents) for pop_name in populations] eb.log('Starting simulation core') simulation_core(sim_functions, rev_parameters, populations, world)
# needed to run this example without prior # installation of DOSE into Python site-packages import run_examples_without_installation # Example codes starts from here import dose, genetic, random, os import simulation_calls as helper import database_calls dbpath = os.sep.join([os.getcwd(), 'Simulations', "case_study_01"]) (con, cur) = database_calls.connect_database(dbpath, None) World = database_calls.db_reconstruct_world(cur, '2013-10-19-1382200534.1', 1000)