diff --git a/expe.py b/expe.py index 1f8a2d2..f87dece 100644 --- a/expe.py +++ b/expe.py @@ -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__": import os 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" solvers = ["num_greedy","bit_greedy","num_rand","bit_rand"] - nbruns = 100 + nbruns = 2 outdir = "results" if not os.path.exists(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): - procs = [] - for solver in solvers: - print(seed,solver) - 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() + for params in expe({"seed":[seed]}): + for by_four in batchsplit(solvers, 4): + batchrun("solver", by_four, params, cmd_tpl)