diff --git a/experiments/SIAM/xp_2_bench_time/xp_a_get_state.py b/experiments/SIAM/xp_2_bench_time/xp_a_get_state.py index 9fd3f09d0b8baa753d6b7f3a9f40f399cd2d7ddf..deb2e920093ccbed2d51fdff06f12970c10072cc 100644 --- a/experiments/SIAM/xp_2_bench_time/xp_a_get_state.py +++ b/experiments/SIAM/xp_2_bench_time/xp_a_get_state.py @@ -12,8 +12,9 @@ from get_algs_params import get_alg_params, get_nb_algs parser=argparse.ArgumentParser() parser.add_argument('--id', help='setup id', type=str, default="SIAM") parser.add_argument('--erase', help='restart xp', action="store_true") -parser.add_argument('--precision', help='stop when gap reaches 1e-precision', default=8, type=float) +parser.add_argument('--precision', help='stop when gap reaches 1e-precision', default=8, type=int) parser.add_argument('--exact', action="store_true") +parser.add_argument('--noverbose', help='disable printing if true', action="store_true") args=parser.parse_args() setup = Setup(args.id) @@ -27,8 +28,9 @@ Path(folder).mkdir(parents=True, exist_ok=True) time_file_name = f"{folder}/setup{args.id}_a_state.npz" +if not args.noverbose: + print(f"Starting \"get seed\" with id {args.id}, precision 1e-{args.precision}") -print(f"Starting \"get seed\" with id {args.id}, precision 1e-{args.precision}") try: if args.erase: raise FileNotFoundError diff --git a/experiments/SIAM/xp_2_bench_time/xp_b_get_budget.py b/experiments/SIAM/xp_2_bench_time/xp_b_get_budget.py index 8fa0f865496b671f3c639ac7c2050d351d60152a..5e0c196b54e1a65c22dbce3fef593868d088bf70 100755 --- a/experiments/SIAM/xp_2_bench_time/xp_b_get_budget.py +++ b/experiments/SIAM/xp_2_bench_time/xp_b_get_budget.py @@ -19,6 +19,7 @@ parser.add_argument('--id', help='setup id', type=str, default="SIAM") parser.add_argument('--erase', help='restart xp', action="store_true") parser.add_argument('--precision', help='stop when gap reaches 1e-precision', default=8) parser.add_argument('--exact', action="store_true") +parser.add_argument('--noverbose', help='disable printing if true', action="store_true") args=parser.parse_args() @@ -69,12 +70,14 @@ except FileNotFoundError: nb_xp = setup.nb_dic * setup.nb_sequence * setup.nb_ratio_lbd * setup.n_rep t = 0 -print(f"Starting \"get budget\" with id {args.id}, precision 1e-{args.precision}") +if not args.noverbose: + print(f"Starting \"get budget\" with id {args.id}, precision 1e-{args.precision}") for i_dic in range(setup.nb_dic): for i_seq in range(setup.nb_sequence): for i_ratio, ratio in enumerate(setup.list_ratio_lbd): for rep in range(setup.n_rep): - print(f"xp budget {t+1} / {nb_xp}") + if not args.noverbose: + print(f"xp budget {t+1} / {nb_xp}") if not np.isnan(mat_times[i_dic, i_seq, i_ratio, rep]): t += 1 diff --git a/experiments/SIAM/xp_2_bench_time/xp_c_results_time.py b/experiments/SIAM/xp_2_bench_time/xp_c_results_time.py index 1c58aca6f151f0f0b4ae0d1540d3a071e9f4f5bb..30ee78db7bad765752b262ba83adeaec385bdeaf 100644 --- a/experiments/SIAM/xp_2_bench_time/xp_c_results_time.py +++ b/experiments/SIAM/xp_2_bench_time/xp_c_results_time.py @@ -20,6 +20,7 @@ parser.add_argument('--id', help='setup id', type=str, default="SIAM") parser.add_argument('--erase', help='restart xp', action="store_true") parser.add_argument('--precision', help='stop when gap reaches 1e-precision', default=8) parser.add_argument('--exact', action="store_true") +parser.add_argument('--noverbose', help='disable printing if true', action="store_true") args=parser.parse_args() @@ -70,7 +71,8 @@ except FileNotFoundError: nb_xp = setup.nb_dic * setup.nb_sequence * setup.nb_ratio_lbd * setup.n_rep t = 0 -print(f"Starting \"xp time\" with id {args.id}, precision 1e-{args.precision}") +if not args.noverbose: + print(f"Starting \"xp time\" with id {args.id}, precision 1e-{args.precision}") for i_dic in range(setup.nb_dic): for i_seq in range(setup.nb_sequence): for i_ratio, ratio in enumerate(setup.list_ratio_lbd): @@ -81,7 +83,8 @@ for i_dic in range(setup.nb_dic): continue for rep in range(setup.n_rep): - print(f"xp time {t+1} / {nb_xp}") + if not args.noverbose: + print(f"xp time {t+1} / {nb_xp}") # print(i_dic, i_seq, i_ratio, rep) # i_dic, i_seq, i_ratio, rep = 1, 0, 2, 17 diff --git a/experiments/SIAM/xp_2_bench_time/xp_d_viz.py b/experiments/SIAM/xp_2_bench_time/xp_d_viz.py new file mode 100644 index 0000000000000000000000000000000000000000..63b14fe095a06927b8cac0204bcb3839138d85bd --- /dev/null +++ b/experiments/SIAM/xp_2_bench_time/xp_d_viz.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +import argparse +from pathlib import Path + +import numpy as np + + +parser=argparse.ArgumentParser() +parser.add_argument('--id', help='setup id', type=str, default="SIAM") +parser.add_argument('--precision', help='stop when gap reaches 1e-precision', default=8) +parser.add_argument('--exact', action="store_true") +# parser.add_argument('--it', help='show it results', action="store_true") +parser.add_argument('--ilbd', help='save figure', type=int, default=0) +parser.add_argument('--noshow', help='show plots', action="store_true") +parser.add_argument('--save', help='save figure', action="store_true") +parser.add_argument('--noverbose', help='disable printing if true', action="store_true") +args=parser.parse_args() + +import matplotlib +if args.noshow: + matplotlib.use('PS') +else: + matplotlib.use("TkAgg") +import matplotlib.pyplot as plt + +matplotlib.rcParams['text.usetex'] = True + + + +from process_data import process +from get_algs_params import get_alg_params, get_nb_algs +from slopescreening.utils import gamma_sequence_generator +from experiments.SIAM.setup import Setup + + +fs = 20 + +# ------------------------- +# Load results +# ------------------------- + +folder = f'results/1e-{args.precision}' +folder += 'exact/' if args.exact else 'gersh/' + +setup = Setup(args.id) +_, list_names = get_alg_params(setup, np.zeros(5), args.exact) +dic_process = process(folder, False, setup) + +vec_tau = dic_process["vec_tau"] +results_rho = dic_process["results_rho"] +# sparsity_level = dic_process["sparsity_level"] +# results_average_it = dic_process["results_average_it"] +# results_std_it = dic_process["results_std_it"] + + +# ------------------------- +# Plot results +# ------------------------- + +f, ax = plt.subplots(setup.nb_sequence, setup.nb_dic, figsize=(16, 13.), + sharex=True, sharey=True, + gridspec_kw = {'wspace':.05, 'hspace':.05} +) +# f.suptitle(f"{setup.list_dic[i_dic]} dictionary", fontsize=14) + +list_algnames = ["PG-no", "PG-p=q", "PG-all", 'PG-Bao'] +list_dicname = ["Gaussian", "Uniform", "Toeplitz"] +# args.ilbd = 1 + +if not args.noverbose: + print("ploting time fig for") + print(f" - {list_dicname} dictionaries") + print(f" - lbd / lbd_max = {setup.list_ratio_lbd[args.ilbd]}") + +for i_dic in range(setup.nb_dic): + for i_seq in range(setup.nb_sequence): + + list_colors = ["tab:blue", "tab:orange", "tab:green", "tab:purple"] + for i_alg in [0, 1, 3, 2]:#range(len(list_names)): + ax[i_seq, i_dic].plot( + vec_tau, + 100. * results_rho[i_alg, i_dic, i_seq, args.ilbd], + linewidth=3., + label=list_algnames[i_alg], + color=list_colors[i_alg] + ) + + + ax[i_seq, i_dic].set_xscale('log') + + ax[i_seq, i_dic].set_xlim([5e-15, 5e-1]) + ax[i_seq, i_dic].set_ylim([-2, 101]) + ax[i_seq, i_dic].grid() + + if i_seq == 0: + ax[i_seq, i_dic].set_title( + f"{list_dicname[i_dic]}", + fontsize=fs+2, + ) + + if i_dic == 2 and i_seq == 2: + ax[i_seq, i_dic].legend() + + if i_seq == setup.nb_sequence-1: + ax[i_seq, i_dic].set_xlabel("$\delta$ (Dual gap)", + # fontsize=14, + ) + + if i_dic == 0: + ax[i_seq, i_dic].set_ylabel( + r"$\rho(\delta)$", + fontsize=fs+4, + ) + + for tick in ax[i_seq, i_dic].yaxis.get_major_ticks(): + tick.label.set_fontsize(16) + + if i_seq == 2: + for tick in ax[i_seq, i_dic].xaxis.get_major_ticks(): + tick.label.set_fontsize(16) + + + + +if args.save: + Path("figs").mkdir(parents=True, exist_ok=True) + fig_name = f"figs/setup{args.id}_precision{args.precision}_exact{args.exact}_time" + + plt.savefig(fig_name + ".eps", bbox_inches='tight') + +if not args.noshow: + plt.show() diff --git a/experiments/SIAM/xp_2_bench_time/xp_d_viz_paper.py b/experiments/SIAM/xp_2_bench_time/xp_d_viz_SIAM.py similarity index 93% rename from experiments/SIAM/xp_2_bench_time/xp_d_viz_paper.py rename to experiments/SIAM/xp_2_bench_time/xp_d_viz_SIAM.py index 53b3a1e1680293003d3a1e0f9a589279c972a94b..8dd7cc704e6d7978b569c0c2bda4df860ea804b5 100644 --- a/experiments/SIAM/xp_2_bench_time/xp_d_viz_paper.py +++ b/experiments/SIAM/xp_2_bench_time/xp_d_viz_SIAM.py @@ -13,19 +13,25 @@ parser.add_argument('--exact', action="store_true") parser.add_argument('--ilbd', help='save figure', type=int, default=1) parser.add_argument('--noshow', help='show plots', action="store_true") parser.add_argument('--save', help='save figure', action="store_true") +parser.add_argument('--noverbose', help='disable printing if true', action="store_true") args=parser.parse_args() +if args.id != "SIAM": + raise Exception("this file has been created to reproduce the SIAM figures. Use the SIAM id instead") + import matplotlib if args.noshow: matplotlib.use('PS') else: matplotlib.use("TkAgg") +matplotlib.rcParams['text.usetex'] = True + import matplotlib.pyplot as plt import matplotlib.font_manager as font_manager from process_data import process from get_algs_params import get_alg_params, get_nb_algs -from src.utils import gamma_sequence_generator +from slopescreening.utils import gamma_sequence_generator from experiments.SIAM.setup import Setup diff --git a/run_tests.sh b/run_tests.sh index 73ed2803be86c075a42379d35c4a4fa95938f0b4..ce96044418244b6e36b71dce0436307fdf9a778c 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -2,9 +2,19 @@ echo "Running unit tests..." python -m unittest echo "" -echo "Running SIAM xp test 1" +echo "Running SIAM xp 1 test" cd experiments/SIAM/xp_1_balls python xp_a_accuracy_sol.py --id Test --noverbose python xp_b_screening.py --id Test --noverbose -python xp_c_viz_fig1.py --id Test --noverbose -python xp_c_viz_fig2.py --id Test --noverbose \ No newline at end of file +python xp_c_viz.py --id Test --noverbose --noshow +cd .. + +echo "" +echo "Running SIAM xp 2 test" +cd xp_2_bench_time +python xp_a_get_state.py --id Test --precision 4 --noverbose +python xp_b_get_budget.py --id Test --precision 4 --noverbose +python xp_c_results_time.py --id Test --precision 4 --noverbose +python xp_d_viz.py --id Test --precision 4 --noverbose --noshow +cd ../../../ +echo "End of testing" \ No newline at end of file