diff --git a/src/solver/parameters.py b/src/solver/parameters.py index b77276c051c454f3dac2670b54889db93e950cb8..2e24c766bbd03b19aa49877a226719e71cdb8445 100755 --- a/src/solver/parameters.py +++ b/src/solver/parameters.py @@ -45,7 +45,6 @@ class SlopeParameters(object): screening1: AbstractGapScreening = None screening2: AbstractGapScreening = None - screening_it_div: float = 2. save_nactive: bool = False save_pfunc: bool = False diff --git a/src/solver/slope.py b/src/solver/slope.py index dd055d188497cf10d7d13f5331c2cbdb1b7cee06..0d5449f457d527cf4ab1cee96b6fdcf8712644a2 100755 --- a/src/solver/slope.py +++ b/src/solver/slope.py @@ -130,13 +130,6 @@ def slope_gp(vecy, matA, lbd, vecgamma, algParameters=SlopeParameters()): is_test_1 = False if screening_test_1 is None else True is_test_2 = False if screening_test_2 is None else True - gap_last_test = np.inf - if is_test_2: - do_test2 = lambda g, g_last: g <= g_last / algParameters.screening_it_div - gap_tresh = algParameters.screening_it_div - # do_test2 = lambda g, g_last: g <= gap_tresh and g_last > gap_tresh - else: - do_test2 = lambda g, g_last: False # ------------------------- # Loop @@ -259,26 +252,7 @@ def slope_gp(vecy, matA, lbd, vecgamma, algParameters=SlopeParameters()): # gap = np.abs(best_costfunc - vec_dual_func[-1]) # 1. Apply test - if is_test_2: # and do_test2(gap, gap_last_test): - out_test2 = screening_test_2.apply_test(np.abs(neg_grad), gap, lbd, vecgamma[:n_active], coeff_dual_scaling=coeff_dual_scaling, index=index_sort_neg_grad) - - if np.any(out_test2): - # 2a. Set entry to 0 - vecx_hat[ind_active[out_test2]] = 0. - - # 2b. Reduce set of active indices - neg_grad = neg_grad[np.bitwise_not(out_test2)] - ind_active = ind_active[np.bitwise_not(out_test2)] - nb_screen = np.sum(out_test2) - n_active -= nb_screen - - gamma_returned = gamma_returned[nb_screen:] - - # schedule next test - gap_last_test = float(gap) - lip = update_Lip() - - elif is_test_1: + if is_test_1: out_test1 = screening_test_1.apply_test(np.abs(neg_grad), gap, lbd, vecgamma[:n_active], coeff_dual_scaling=coeff_dual_scaling, index=index_sort_neg_grad) if np.any(out_test1): @@ -294,6 +268,22 @@ def slope_gp(vecy, matA, lbd, vecgamma, algParameters=SlopeParameters()): gamma_returned = gamma_returned[nb_screen:] lip = update_Lip() + if is_test_2: + out_test2 = screening_test_2.apply_test(np.abs(neg_grad), gap, lbd, vecgamma[:n_active], coeff_dual_scaling=coeff_dual_scaling, index=index_sort_neg_grad) + + if np.any(out_test2): + # 2a. Set entry to 0 + vecx_hat[ind_active[out_test2]] = 0. + + # 2b. Reduce set of active indices + neg_grad = neg_grad[np.bitwise_not(out_test2)] + ind_active = ind_active[np.bitwise_not(out_test2)] + nb_screen = np.sum(out_test2) + n_active -= nb_screen + + gamma_returned = gamma_returned[nb_screen:] + lip = update_Lip() + # ------------------ # Alg steps