Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Elvira Clement
slope-screening
Commits
073dd21b
Commit
073dd21b
authored
Apr 23, 2022
by
Elvira Clement
Browse files
source code update
parent
dcaf0995
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/solver/parameters.py
View file @
073dd21b
...
...
@@ -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
...
...
src/solver/slope.py
View file @
073dd21b
...
...
@@ -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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment