try alternative API for expe module

This commit is contained in:
Johann Dreo 2019-01-21 12:31:46 +01:00
commit 5e48e52941

65
expe.py
View file

@ -1,46 +1,49 @@
import subprocess
import itertools
def batchsplit(axe, njobs):
for i in range(0,len(axe),njobs):
yield axe[i:i+njobs]
def batchrun(key, jobs, params, cmd_tpl):
procs = []
for job in jobs:
params[key] = job
cmd = cmd_tpl.format(**params)
p = subprocess.Popen(cmd, shell=True)
procs.append(p)
for job in procs:
job.wait()
def expe(axes):
for p in itertools.product(*[axes[k] for k in axes]):
params = {}
for i in range(len(axes)):
params[list(axes.keys())[i]] = p[i]
yield params
if __name__ == "__main__": if __name__ == "__main__":
import os import os
import subprocess import subprocess
# can = argparse.ArgumentParser()
#
# can.add_argument("-n", "--nb-sensors", metavar="NB", default=3, type=int,
# help="Number of sensors")
#
# can.add_argument("-r", "--sensor-range", metavar="RATIO", default=0.3, type=float,
# help="Sensors' range (as a fraction of domain width)")
#
# can.add_argument("-w", "--domain-width", metavar="NB", default=30, type=int,
# help="Domain width (a number of cells)")
#
# can.add_argument("-i", "--iters", metavar="NB", default=100, type=int,
# help="Maximum number of iterations")
#
# the = can.parse_args()
const_args=" --nb-sensors 5 --sensor-range 0.2 --domain-width 50 --iters 10000" const_args=" --nb-sensors 5 --sensor-range 0.2 --domain-width 50 --iters 10000"
solvers = ["num_greedy","bit_greedy","num_rand","bit_rand"] solvers = ["num_greedy","bit_greedy","num_rand","bit_rand"]
nbruns = 100 nbruns = 2
outdir = "results" outdir = "results"
if not os.path.exists(outdir): if not os.path.exists(outdir):
os.mkdir(outdir) os.mkdir(outdir)
cmd_tpl = "python3 snp.py --no-plot --dir {outdir} --seed {{seed}} --solver {{solver}}".format(outdir=outdir)
for seed in range(nbruns): for seed in range(nbruns):
procs = [] for params in expe({"seed":[seed]}):
for solver in solvers: for by_four in batchsplit(solvers, 4):
print(seed,solver) batchrun("solver", by_four, params, cmd_tpl)
p = subprocess.Popen(
"python3 snp.py "
+ const_args
+ " --no-plot --dir {} --seed {} --solver {}"
.format(outdir,seed,solver),
shell=True
)
procs.append(p)
for proc in procs:
proc.wait()