#!/usr/bin/python3 import os import subprocess from concurrent.futures import ThreadPoolExecutor abs_path = os.getcwd() slippery_configs=[f"{abs_path}/slippery_prob_075.yaml", # f"{abs_path}/slippery_prob_08.yaml", f"{abs_path}/slippery_prob_085.yaml", # f"{abs_path}/slippery_prob_09.yaml", f"{abs_path}/slippery_prob_095.yaml", # f"{abs_path}/slippery_prob_1.yaml" ] slippery_probs=[[0.25, 0.75], # 0.75 #[0.1, 0.2, 0.8], # 0.8 [0.15,0.85], # 0.85 #[0.05, 0.1, 0.9], # 0.9 [0.05, 0.95], # 0.95 # [0.01, 0.02, 0.98], # 0.98 # [0.005,0.01, 0.99], # 0.99 #[0, 0, 1] # 1 ] prob_turn_intended = 1 #shield_values = [0.85, 0.9, 0.95, 0.98, 0.99, 1] shield_values = [0.85, .95, 1] prob_confs = list(zip(slippery_probs, slippery_configs)) counter = 1 shielding = ["full", "none"] comparison_type = ["relative", "absolute"] comps = ["relative", "absolute"] NUM_TIMESTEPS=250000 LOGDIR="../logresults/" ENV="MiniGrid-LavaSlipperyCliffS12-v0" tasks = list() NUM_WORKER=2 def run_command(command, logname): log = open(f"{logname}.log", "w") print(f"running {command}") subprocess.call(command, shell=True, stdout=log)#.decode("utf-8").split('\n') close(log) # matrix for shielded runs for shield_value in shield_values: for sh_comp in comparison_type: for probs, config in prob_confs: command = f"echo \"Running experiment with shielding full, sh_value:{shield_value}, sh_comp:{sh_comp}, probvalues:{probs}, config{config}\"" execute_command = f'./syncscript.sh {NUM_TIMESTEPS} {LOGDIR} {"70"} {ENV} full {sh_comp} {config} {probs[0]} {probs[1]} {0} {shield_value} {prob_turn_intended}' print(execute_command) logname = f"shielded_comp_{sh_comp}_value_{shield_value}_probvalues{'_'.join(format(p, '10.3f') for p in probs)}_{config.split('/')[-1]}".replace(" ", "") tasks.append((execute_command, logname)) # loop for unshielded runs for probs, config in prob_confs: command = f"echo \"Running experiment with shielding none, sh_value:0.0, sh_comp:{sh_comp}, probvalues:{probs}, config{config}\"" execute_command = f'./syncscript.sh {NUM_TIMESTEPS} {LOGDIR} {"70"} {ENV} none {sh_comp} {config} {probs[0]} {probs[1]} {0} {shield_value} {prob_turn_intended}' logname = f"unshielded_probvalues{'_'.join(format(p, '10.3f') for p in probs)}_{config.split('/')[-1]}".replace(" ", "") print(execute_command) tasks.append((execute_command, logname)) print(f"Going to execute {len(tasks)} with {NUM_WORKER} threads... press Enter to start") input("") with ThreadPoolExecutor(max_workers=NUM_WORKER) as e: for task in tasks: print(f"submitted {task}") e.submit(run_command, task[0], task[1])