Skip to content

Commit 6287e96

Browse files
made randomized tests more robust
1 parent 951a0ce commit 6287e96

File tree

6 files changed

+19
-18
lines changed

6 files changed

+19
-18
lines changed

src/basispursuit.jl

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,10 @@ shrinkage(x::Real, α::Real) = sign(x) * max(abs(x)-α, zero(x))
144144

145145
# TODO fast iterative shrinkage and hard-thresholding algorithm
146146
# for weighted l1-norm minimization
147-
function fista(A::AbstractMatrix, b::AbstractVector, λ::Real, x::AbstractVector = spzeros(size(A, 2)))
147+
function fista(A::AbstractMatrix, b::AbstractVector, λ::Real,
148+
x::AbstractVector = spzeros(size(A, 2)); maxiter::Int = 1024, stepsize::Real = 1e-2)
148149
w = fill(λ, size(x))
149-
fista(A, b, w, x)
150+
fista(A, b, w, x, maxiter = maxiter, stepsize = stepsize)
150151
end
151152

152153
function l1(x::AbstractVector, w::AbstractVector)
@@ -159,20 +160,20 @@ function l1(x::AbstractVector, w::AbstractVector)
159160
end
160161

161162
# TODO: stepsize selection
162-
function ista(A, b, λ::Real, x = spzeros(size(A, 2)); maxiter::Int = 128)
163-
ista(A, b, fill(λ, size(x)), x, maxiter = maxiter)
163+
function ista(A, b, λ::Real, x = spzeros(size(A, 2)); maxiter::Int = 1024, stepsize::Real = 1e-2)
164+
ista(A, b, fill(λ, size(x)), x, maxiter = maxiter, stepsize = stepsize)
164165
end
165166

166167
function ista(A::AbstractMatrix, b::AbstractVector, w::AbstractVector,
167168
x::AbstractVector = spzeros(size(A, 2));
168-
maxiter::Int = 128)
169+
maxiter::Int = 1024, stepsize::Real = 1e-2)
169170
x = sparse(x)
170171
r(x) = b-A*x # residual
171172
f(x) = sum(abs2, r(x)) + l1(x, w)
172173
g(x) = A'r(x) # negative gradient
173-
α = .01 # step-size
174+
α = stepsize
174175
fx = f(x)
175-
for i in 1:1024
176+
for i in 1:maxiter
176177
= g(x)
177178
@. x = shrinkage(x + 2α*∇, w*α)
178179
dropzeros!(x) # optimize sparse representation
@@ -183,14 +184,14 @@ end
183184

184185
function fista(A::AbstractMatrix, b::AbstractVector, w::AbstractVector,
185186
x::AbstractVector = spzeros(size(A, 2));
186-
maxiter::Int = 128)
187+
maxiter::Int = 1024, stepsize::Real = 1e-2)
187188
x = sparse(x)
188189
r(x) = b-A*x # residual
189190
f(x) = sum(abs2, r(x)) + l1(x, w)
190191
g(x) = A'r(x) # negative gradient
191-
α = .1 # step-size
192+
α = stepsize
192193
tk = 1
193-
for i in 1:16
194+
for i in 1:maxiter
194195
= g(x)
195196
tkn = (1 + sqrt(1 + 4tk^2)) / 2
196197
y = xkn + (tk - 1) / tkn * (xkn - xk)

test/backward.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ using LinearAlgebra
77
using SparseArrays
88

99
# set up data
10-
n, k = 64, 16
10+
n, k = 32, 3
1111
A, x, b = gaussian_data(n = n, m = n, k = k)
1212
δ = 1e-2
1313
y = perturb(b, δ/2)

test/basispursuit.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ using LinearAlgebra
44
using SparseArrays
55
using CompressedSensing: bp, bp_candes, bp_ard, bpd, bpd_candes, bpd_ard, sparse_data, perturb
66

7-
n, m = 32, 64
7+
n, m = 32, 48
88
k = 3
99
A, x, b = sparse_data(n = n, m = m, k = k, rescaled = true)
1010
δ = 1e-2
@@ -39,7 +39,7 @@ end
3939
using CompressedSensing: ista, fista
4040
@testset "ISTA" begin
4141
λ = δ/10
42-
xista = ista(A, y, λ, maxiter = 1024)
42+
xista = ista(A, y, λ, maxiter = 1024, stepsize = 1e-1)
4343
# droptol!(xista, δ)
4444
# @test xista.nzind == x.nzind
4545
# @test xista.nzind ⊆ x.nzind

test/forward.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ using CompressedSensing: sparse_data, fr, foba, perturb, FR
44

55
using Test
66
using LinearAlgebra
7-
n, m, k = 32, 64, 3
7+
n, m, k = 32, 48, 3
88
A, x, b = sparse_data(n = n, m = m, k = k) # needs to be determined
99
δ = 1e-2
1010
y = perturb(b, δ)

test/matchingpursuit.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ using SparseArrays
77
# NOTE: these tests may rarely fail, because the randomly generated data is "hard"
88
# a small failure probability is theoretically expected
99
@testset "Matching Pursuits" begin
10-
n, m, k = 32, 64, 3
10+
n, m, k = 32, 48, 3
1111
A, x, b = sparse_data(n = n, m = m, k = k)
1212
δ = 1e-2 # slightly noisy
1313
y = perturb(b, δ/2)
@@ -30,10 +30,10 @@ using SparseArrays
3030
end
3131

3232
@testset "Generalized Orthogonal Matching Pursuit" begin
33-
n, m, k = 64, 96, 7
33+
n, m, k = 32, 48, 3
3434
A, x, b = sparse_data(n = n, m = m, k = k)
3535
y = perturb(b, δ/2)
36-
l = 3 # identify three atoms at a time
36+
l = 2 # identify two atoms at a time
3737
# noiseless
3838
xgomp = gomp(A, b, l, k)
3939
@test xgomp.nzind == x.nzind

test/sbl.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ using LinearAlgebra
44
using CompressedSensing: sparse_data, sbl, SBL, fsbl, rmps, update!, rmp, foba, perturb
55
using SparseArrays
66

7-
n, m, k = 64, 128, 6
7+
n, m, k = 32, 48, 3
88
A, x, b = sparse_data(n = n, m = m, k = k)
99
σ = 1e-2
1010
y = perturb(b, σ/2)

0 commit comments

Comments
 (0)