From fe3db9799b6355fef23c02903b9187606e739136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Elvira?= <clement.elvira@centralesupelec.fr> Date: Mon, 14 Nov 2022 10:34:17 +0100 Subject: [PATCH] Last corrections + further tests --- .../SIAM/xp_2_bench_time/xp_a_get_state.py | 6 +- .../SIAM/xp_2_bench_time/xp_b_get_budget.py | 7 +- .../SIAM/xp_2_bench_time/xp_c_results_time.py | 7 +- experiments/SIAM/xp_2_bench_time/xp_d_viz.py | 132 ++++++++++++++++++ .../{xp_d_viz_paper.py => xp_d_viz_SIAM.py} | 8 +- run_tests.sh | 16 ++- 6 files changed, 166 insertions(+), 10 deletions(-) create mode 100644 experiments/SIAM/xp_2_bench_time/xp_d_viz.py rename experiments/SIAM/xp_2_bench_time/{xp_d_viz_paper.py => xp_d_viz_SIAM.py} (93%) 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 9fd3f09..deb2e92 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 8fa0f86..5e0c196 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 1c58aca..30ee78d 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 0000000..63b14fe --- /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 53b3a1e..8dd7cc7 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 73ed280..ce96044 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 -- GitLab