Skip to content

Commit 003984a

Browse files
authored
Merge pull request #377 from astro-informatics/tk/fix-padmm-examples
Rename nu and gamma in padmm examples
2 parents 0400ce2 + 37334c1 commit 003984a

File tree

7 files changed

+48
-40
lines changed

7 files changed

+48
-40
lines changed

cpp/example/padmm_mpi_random_coverage.cc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,19 +86,20 @@ std::shared_ptr<sopt::algorithm::ImagingProximalADMM<t_complex>> padmm_factory(
8686
auto const epsilon = utilities::calculate_l2_radius(uv_data.vis.size(), sigma);
8787
#endif
8888
PURIFY_LOW_LOG("SARA Size = {}, Rank = {}", sara.size(), comm.rank());
89-
const t_real gamma =
89+
const t_real regulariser_strength =
9090
utilities::step_size(uv_data.vis, measurements,
9191
std::make_shared<sopt::LinearTransform<Vector<t_complex>> const>(Psi),
9292
sara.size()) *
9393
1e-3;
9494
PURIFY_LOW_LOG("Epsilon {}, Rank = {}", epsilon, comm.rank());
95-
PURIFY_LOW_LOG("Gamma {}, SARA Size = {}, Rank = {}", gamma, sara.size(), comm.rank());
95+
PURIFY_LOW_LOG("Regulariser_Strength {}, SARA Size = {}, Rank = {}", regulariser_strength,
96+
sara.size(), comm.rank());
9697

9798
// shared pointer because the convergence function need access to some data that we would rather
9899
// not reproduce. E.g. padmm definition is self-referential.
99100
auto padmm = std::make_shared<sopt::algorithm::ImagingProximalADMM<t_complex>>(uv_data.vis);
100101
padmm->itermax(50)
101-
.gamma(comm.all_reduce(gamma, MPI_MAX))
102+
.regulariser_strength(comm.all_reduce(regulariser_strength, MPI_MAX))
102103
.relative_variation(1e-3)
103104
.l2ball_proximal_epsilon(epsilon)
104105
#if PURIFY_PADMM_ALGORITHM == 2
@@ -115,7 +116,7 @@ std::shared_ptr<sopt::algorithm::ImagingProximalADMM<t_complex>> padmm_factory(
115116
.l1_proximal_real_constraint(true)
116117
.residual_tolerance(epsilon)
117118
.lagrange_update_scale(0.9)
118-
.nu(1e0)
119+
.sq_op_norm(1e0)
119120
.Psi(Psi)
120121
.Phi(*measurements);
121122
sopt::ScalarRelativeVariation<t_complex> conv(padmm->relative_variation(),

cpp/example/padmm_mpi_real_data.cc

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,19 +60,19 @@ std::shared_ptr<sopt::algorithm::ImagingProximalADMM<t_complex>> padmm_factory(
6060
#elif PURIFY_PADMM_ALGORITHM == 3 || PURIFY_PADMM_ALGORITHM == 1
6161
auto const epsilon = 3 * std::sqrt(2 * uv_data.size()) * sigma;
6262
#endif
63-
const t_real gamma =
63+
const t_real regulariser_strength =
6464
utilities::step_size(uv_data.vis, measurements,
6565
std::make_shared<sopt::LinearTransform<Vector<t_complex>> const>(Psi),
6666
sara.size()) *
6767
1e-3;
6868
PURIFY_MEDIUM_LOG("Epsilon {}", epsilon);
69-
PURIFY_MEDIUM_LOG("Gamma {}", gamma);
69+
PURIFY_MEDIUM_LOG("Regulariser_Strength {}", regulariser_strength);
7070

7171
// shared pointer because the convergence function need access to some data that we would rather
7272
// not reproduce. E.g. padmm definition is self-referential.
7373
auto padmm = std::make_shared<sopt::algorithm::ImagingProximalADMM<t_complex>>(uv_data.vis);
7474
padmm->itermax(50)
75-
.gamma(comm.all_reduce<t_real>(gamma, MPI_MAX))
75+
.regulariser_strength(comm.all_reduce<t_real>(regulariser_strength, MPI_MAX))
7676
.relative_variation(1e-3)
7777
.l2ball_proximal_epsilon(epsilon)
7878
#if PURIFY_PADMM_ALGORITHM == 2
@@ -89,7 +89,7 @@ std::shared_ptr<sopt::algorithm::ImagingProximalADMM<t_complex>> padmm_factory(
8989
.l1_proximal_real_constraint(true)
9090
.residual_tolerance(epsilon)
9191
.lagrange_update_scale(0.9)
92-
.nu(1e0)
92+
.sq_op_norm(1e0)
9393
.Psi(Psi)
9494
.Phi(*measurements);
9595
sopt::ScalarRelativeVariation<t_complex> conv(padmm->relative_variation(),
@@ -127,13 +127,16 @@ std::shared_ptr<sopt::algorithm::ImagingProximalADMM<t_complex>> padmm_factory(
127127
const auto algo_update = [uv_data, imsizex, imsizey, padmm_weak, iter,
128128
comm](const Vector<t_complex> &x) -> bool {
129129
auto padmm = padmm_weak.lock();
130-
if (comm.is_root()) PURIFY_MEDIUM_LOG("Step size γ {}", padmm->gamma());
130+
if (comm.is_root()) PURIFY_MEDIUM_LOG("Step size γ {}", padmm->regulariser_strength());
131131
*iter = *iter + 1;
132132
Vector<t_complex> const alpha = padmm->Psi().adjoint() * x;
133-
const t_real new_gamma = comm.all_reduce(alpha.real().cwiseAbs().maxCoeff(), MPI_MAX) * 1e-3;
134-
if (comm.is_root()) PURIFY_MEDIUM_LOG("Step size γ update {}", new_gamma);
135-
padmm->gamma(((std::abs(padmm->gamma() - new_gamma) > 0.2) and *iter < 200) ? new_gamma
136-
: padmm->gamma());
133+
const t_real new_regulariser_strength =
134+
comm.all_reduce(alpha.real().cwiseAbs().maxCoeff(), MPI_MAX) * 1e-3;
135+
if (comm.is_root()) PURIFY_MEDIUM_LOG("Step size γ update {}", new_regulariser_strength);
136+
padmm->regulariser_strength(
137+
((std::abs(padmm->regulariser_strength() - new_regulariser_strength) > 0.2) and *iter < 200)
138+
? new_regulariser_strength
139+
: padmm->regulariser_strength());
137140
// updating parameter
138141

139142
Vector<t_complex> const residual = padmm->Phi().adjoint() * (uv_data.vis - padmm->Phi() * x);

cpp/example/padmm_random_coverage.cc

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,11 @@ void padmm(const std::string &name, const Image<t_complex> &M31, const std::stri
9090
auto const padmm =
9191
sopt::algorithm::ImagingProximalADMM<t_complex>(uv_data.vis)
9292
.itermax(500)
93-
.gamma((Psi.adjoint() * (measurements_transform->adjoint() * uv_data.vis).eval())
94-
.cwiseAbs()
95-
.maxCoeff() *
96-
1e-3)
93+
.regulariser_strength(
94+
(Psi.adjoint() * (measurements_transform->adjoint() * uv_data.vis).eval())
95+
.cwiseAbs()
96+
.maxCoeff() *
97+
1e-3)
9798
.relative_variation(1e-3)
9899
.l2ball_proximal_epsilon(epsilon)
99100
.tight_frame(false)
@@ -107,7 +108,7 @@ void padmm(const std::string &name, const Image<t_complex> &M31, const std::stri
107108
#ifdef PURIFY_CImg
108109
.is_converged(show_image)
109110
#endif
110-
.nu(1e0)
111+
.sq_op_norm(1e0)
111112
.Psi(Psi)
112113
.Phi(*measurements_transform);
113114

cpp/example/padmm_real_data.cc

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ void padmm(const std::string &name, const t_uint &imsizex, const t_uint &imsizey
5454
pfitsio::write2d(Image<t_real>::Map(dimage.data(), imsizey, imsizex), dirty_image_fits);
5555
pfitsio::write2d(Image<t_real>::Map(psf.data(), imsizey, imsizex), psf_image_fits);
5656
auto const epsilon = 3 * std::sqrt(2 * uv_data.size()) * sigma;
57-
auto const gamma = (measurements_transform->adjoint() * uv_data.vis).real().maxCoeff() * 1e-3;
57+
auto const regulariser_strength =
58+
(measurements_transform->adjoint() * uv_data.vis).real().maxCoeff() * 1e-3;
5859
PURIFY_HIGH_LOG("Using epsilon of {}", epsilon);
5960
#ifdef PURIFY_CImg
6061
auto const canvas = std::make_shared<CDisplay>(
@@ -79,7 +80,7 @@ void padmm(const std::string &name, const t_uint &imsizex, const t_uint &imsizey
7980
#endif
8081
auto padmm = std::make_shared<sopt::algorithm::ImagingProximalADMM<t_complex>>(uv_data.vis);
8182
padmm->itermax(500)
82-
.gamma(gamma)
83+
.regulariser_strength(regulariser_strength)
8384
.relative_variation(1e-3)
8485
.l2ball_proximal_epsilon(epsilon)
8586
.tight_frame(false)
@@ -90,7 +91,7 @@ void padmm(const std::string &name, const t_uint &imsizex, const t_uint &imsizey
9091
.l1_proximal_real_constraint(true)
9192
.residual_convergence(epsilon)
9293
.lagrange_update_scale(0.9)
93-
.nu(1e0)
94+
.sq_op_norm(1e0)
9495
.Psi(Psi)
9596
.Phi(*measurements_transform);
9697

@@ -101,14 +102,16 @@ void padmm(const std::string &name, const t_uint &imsizex, const t_uint &imsizey
101102
const auto algo_update = [uv_data, imsizex, imsizey, padmm_weak,
102103
iter](const Vector<t_complex> &x) -> bool {
103104
auto padmm = padmm_weak.lock();
104-
PURIFY_MEDIUM_LOG("Step size γ {}", padmm->gamma());
105+
PURIFY_MEDIUM_LOG("Step size γ {}", padmm->regulariser_strength());
105106
*iter = *iter + 1;
106107
Vector<t_complex> const alpha = padmm->Psi().adjoint() * x;
107108
// updating parameter
108-
const t_real new_gamma = alpha.real().cwiseAbs().maxCoeff() * 1e-3;
109-
PURIFY_MEDIUM_LOG("Step size γ update {}", new_gamma);
110-
padmm->gamma(((std::abs(padmm->gamma() - new_gamma) > 0.2) and *iter < 200) ? new_gamma
111-
: padmm->gamma());
109+
const t_real new_regulariser_strength = alpha.real().cwiseAbs().maxCoeff() * 1e-3;
110+
PURIFY_MEDIUM_LOG("Step size γ update {}", new_regulariser_strength);
111+
padmm->regulariser_strength(
112+
((std::abs(padmm->regulariser_strength() - new_regulariser_strength) > 0.2) and *iter < 200)
113+
? new_regulariser_strength
114+
: padmm->regulariser_strength());
112115

113116
Vector<t_complex> const residual = padmm->Phi().adjoint() * (uv_data.vis - padmm->Phi() * x);
114117

cpp/example/padmm_reweighted_simulation.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,15 @@ int main(int nargs, char const **args) {
8383
Vector<t_complex> initial_estimate = Vector<t_complex>::Zero(dimage.size());
8484

8585
auto const epsilon = utilities::calculate_l2_radius(uv_data.vis.size(), sigma);
86-
auto const purify_gamma =
86+
auto const purify_regulariser_strength =
8787
(Psi.adjoint() * (measurements_transform.adjoint() * uv_data.vis).eval()).real().maxCoeff() *
8888
1e-3;
8989

9090
PURIFY_HIGH_LOG("Starting sopt!");
9191
PURIFY_MEDIUM_LOG("Epsilon {}", epsilon);
92-
PURIFY_MEDIUM_LOG("Gamma {}", purify_gamma);
92+
PURIFY_MEDIUM_LOG("Regulariser_Strength {}", purify_regulariser_strength);
9393
auto const padmm = sopt::algorithm::ImagingProximalADMM<t_complex>(uv_data.vis)
94-
.gamma(purify_gamma)
94+
.regulariser_strength(purify_regulariser_strength)
9595
.relative_variation(1e-3)
9696
.l2ball_proximal_epsilon(epsilon * 1.001)
9797
.tight_frame(false)
@@ -102,7 +102,7 @@ int main(int nargs, char const **args) {
102102
.l1_proximal_real_constraint(true)
103103
.residual_convergence(epsilon * 1.001)
104104
.lagrange_update_scale(0.9)
105-
.nu(1e0)
105+
.sq_op_norm(1e0)
106106
.Psi(Psi)
107107
.Phi(measurements_transform);
108108
// Timing reconstruction

cpp/example/padmm_simulation.cc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ int main(int nargs, char const **args) {
9494
Vector<t_complex> initial_estimate = Vector<t_complex>::Zero(dimage.size());
9595

9696
auto const epsilon = utilities::calculate_l2_radius(uv_data.vis.size(), sigma);
97-
auto const purify_gamma =
97+
auto const purify_regulariser_strength =
9898
(Psi.adjoint() * (measurements_transform.adjoint() * uv_data.vis).eval()).real().maxCoeff() *
9999
1e-3;
100100
t_int iters = 0;
@@ -104,9 +104,9 @@ int main(int nargs, char const **args) {
104104
};
105105
PURIFY_HIGH_LOG("Starting sopt!");
106106
PURIFY_MEDIUM_LOG("Epsilon {}", epsilon);
107-
PURIFY_MEDIUM_LOG("Gamma {}", purify_gamma);
107+
PURIFY_MEDIUM_LOG("Regulariser_Strength {}", purify_regulariser_strength);
108108
auto const padmm = sopt::algorithm::ImagingProximalADMM<t_complex>(uv_data.vis)
109-
.gamma(purify_gamma)
109+
.regulariser_strength(purify_regulariser_strength)
110110
.relative_variation(1e-3)
111111
.l2ball_proximal_epsilon(epsilon * 1.001)
112112
.tight_frame(false)
@@ -117,12 +117,12 @@ int main(int nargs, char const **args) {
117117
.l1_proximal_real_constraint(true)
118118
.residual_convergence(epsilon * 1.001)
119119
.lagrange_update_scale(0.9)
120-
.nu(1e0)
120+
.sq_op_norm(1e0)
121121
.Psi(Psi)
122122
.itermax(100)
123123
.is_converged(convergence_function)
124124
.Phi(measurements_transform);
125-
// Timing reconstructionu
125+
// Timing reconstruction
126126

127127
std::clock_t c_start = std::clock();
128128
auto const diagnostic = padmm();

cpp/example/sara_padmm_random_coverage.cc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,19 +74,19 @@ int main(int, char **) {
7474
pfitsio::write2d(Image<t_real>::Map(dimage.data(), M31.rows(), M31.cols()), dirty_image_fits);
7575

7676
auto const epsilon = utilities::calculate_l2_radius(uv_data.vis.size(), sigma);
77-
auto const purify_gamma =
77+
auto const purify_regulariser_strength =
7878
(Psi.adjoint() * (measurements_transform.adjoint() * uv_data.vis).eval())
7979
.cwiseAbs()
8080
.maxCoeff() *
8181
beta;
8282

83-
// auto purify_gamma = 3 * utilities::median((Psi.adjoint() * (measurements_transform.adjoint() *
84-
// (uv_data.vis - y0))).real().cwiseAbs())/0.6745;
83+
// auto purify_regulariser_strength = 3 * utilities::median((Psi.adjoint() *
84+
// (measurements_transform.adjoint() * (uv_data.vis - y0))).real().cwiseAbs())/0.6745;
8585

8686
SOPT_INFO("Using epsilon of {} \n", epsilon);
8787
auto const padmm = sopt::algorithm::ImagingProximalADMM<t_complex>(uv_data.vis)
8888
.itermax(1000)
89-
.gamma(purify_gamma)
89+
.regulariser_strength(purify_regulariser_strength)
9090
.relative_variation(1e-6)
9191
.l2ball_proximal_epsilon(epsilon)
9292
.tight_frame(false)
@@ -97,7 +97,7 @@ int main(int, char **) {
9797
.l1_proximal_real_constraint(true)
9898
.residual_convergence(epsilon * 1.001)
9999
.lagrange_update_scale(0.9)
100-
.nu(1e0)
100+
.sq_op_norm(1e0)
101101
.Psi(Psi)
102102
.Phi(measurements_transform);
103103

0 commit comments

Comments
 (0)