Skip to content

Commit bc6a282

Browse files
committed
Define common problem combos
1 parent 698f055 commit bc6a282

13 files changed

+119
-23
lines changed

Project.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ DifferentialEquations = "0c46a032-eb83-5123-abaf-570d42b7fbaa"
2727
MLDatasets = "eb30cadb-4394-5ae3-aed4-317e484a6458"
2828
ProximalOperators = "a725b495-10eb-56fe-b38b-717eba820537"
2929
QuadraticModels = "f468eda6-eac5-11e8-05a5-ff9e497bcd19"
30+
ShiftedProximalOperators = "d4fd37fa-580c-4e43-9b30-361c21aae263"
3031
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
3132

3233
[targets]
33-
test = ["ADNLPModels", "DifferentialEquations", "MLDatasets", "ProximalOperators", "QuadraticModels", "Test"]
34+
test = ["ADNLPModels", "DifferentialEquations", "MLDatasets", "ProximalOperators", "QuadraticModels", "ShiftedProximalOperators", "Test"]

src/RegularizedProblems.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,26 @@ function __init__()
1818
include("testset_bpdn.jl")
1919
include("testset_lrcomp.jl")
2020
include("testset_matrand.jl")
21+
include("testset_nnmf.jl")
22+
end
23+
@require ShiftedProximalOperators = "d4fd37fa-580c-4e43-9b30-361c21aae263" begin
2124
include("testset_group_lasso.jl")
2225
end
2326
@require ADNLPModels = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a" begin
2427
@require DifferentialEquations = "0c46a032-eb83-5123-abaf-570d42b7fbaa" begin
2528
include("fh_model.jl")
29+
@require ProximalOperators = "a725b495-10eb-56fe-b38b-717eba820537" begin
30+
include("testset_fh.jl")
31+
end
2632
end
2733
end
2834
@require MLDatasets = "eb30cadb-4394-5ae3-aed4-317e484a6458" begin
2935
include("nonlin_svm_model.jl")
36+
@require ProximalOperators = "a725b495-10eb-56fe-b38b-717eba820537" begin
37+
@require ShiftedProximalOperators = "d4fd37fa-580c-4e43-9b30-361c21aae263" begin
38+
include("testset_svm.jl")
39+
end
40+
end
3041
end
3142
@require QuadraticModels = "f468eda6-eac5-11e8-05a5-ff9e497bcd19" begin
3243
include("qp_rand_model.jl")

src/bpdn_model.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ bpdn_data(compound::Int = 1, args...; bounds::Bool = false) =
2121
bpdn_data(200 * compound, 512 * compound, 10 * compound, args...; bounds = bounds)
2222

2323
"""
24-
model, nls_model, sol = bpdn_model(args...)
25-
model, nls_model, sol = bpdn_model(compound = 1, args...)
24+
model, nls_model, sol = bpdn_model(args...; kwargs...)
25+
model, nls_model, sol = bpdn_model(compound = 1, args...; kwargs...)
2626
2727
Return an instance of an `NLPModel` and an instance of an `NLSModel` representing
2828
the same basis-pursuit denoise problem, i.e., the under-determined linear

src/qp_rand_model.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@ export qp_rand_model
22
using .QuadraticModels
33

44
"""
5-
model = qp_rand_model(n; dens = 1.0e-4, convex = false)
5+
model = qp_rand_model(n = 100_000; dens = 1.0e-4, convex = false)
66
77
Return an instance of a `QuadraticModel` representing
88
99
min cᵀx + ½ xᵀHx s.t. l ≤ x ≤ u,
1010
11-
with H = A + A' or H = A * A' (see the `convex` keyword argument) where A is a random square matrix with density `dens`, `l = -e - tₗ` and `u = e + tᵤ` where `e` is the vector of ones, and `tₗ` and `tᵤ` are sampled from a uniform distribution between 0 and 1.
11+
with H = A + A' or H = A * A' (see the `convex` keyword argument) where A is a random square matrix with density `dens`, `l = -e - tₗ` and `u = e + tᵤ` where `e` is the vector of ones, and `tₗ` and `tᵤ` are sampled from a uniform distribution between 0 and 1.
1212
1313
## Arguments
1414
15-
* `n :: Int`: size of the problem,
15+
* `n :: Int`: size of the problem (default: `100_000`).
1616
1717
## Keyword arguments
1818
@@ -23,7 +23,7 @@ with H = A + A' or H = A * A' (see the `convex` keyword argument) where A is a r
2323
2424
An instance of a `QuadraticModel`.
2525
"""
26-
function qp_rand_model(n::Int; dens::R = 1.0e-4, convex::Bool = false) where {R <: Real}
26+
function qp_rand_model(n::Int = 100_000; dens::R = 1.0e-4, convex::Bool = false) where {R <: Real}
2727
@assert 0 < dens 1
2828
A = sprandn(R, n, n, dens)
2929
H = convex ? (A * A') : (A + A')

src/testset_bpdn.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@
22
export setup_bpdn_l0, setup_bpdn_l1, setup_bpdn_B0
33

44
function setup_bpdn_l0(args...; kwargs...)
5-
model, nls_model, _ = bpdn_model(args...)
5+
model, nls_model, _ = bpdn_model(args...; kwargs...)
66
λ = norm(grad(model, zeros(model.meta.nvar)), Inf) / 10
7-
h = NormL0(λ)
7+
h = ProximalOperators.NormL0(λ)
88
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
99
end
1010

1111
function setup_bpdn_l1(args...; kwargs...)
12-
model, nls_model, _ = bpdn_model(args...)
12+
model, nls_model, _ = bpdn_model(args...; kwargs...)
1313
λ = norm(grad(model, zeros(model.meta.nvar)), Inf) / 10
14-
h = NormL1(λ)
14+
h = ProximalOperators.NormL1(λ)
1515
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
1616
end
1717

1818
function setup_bpdn_B0(compound = 1, args...; kwargs...)
19-
model, nls_model, _ = bpdn_model(compound, args...)
20-
h = IndBallL0(10 * compound)
19+
model, nls_model, _ = bpdn_model(compound, args...; kwargs...)
20+
h = ProximalOperators.IndBallL0(10 * compound)
2121
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
2222
end

src/testset_fh.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Predefine a set of common problem instances.
2+
export setup_fh_l0, setup_fh_l1
3+
4+
function setup_fh_l0(; kwargs...)
5+
model, nls_model, _ = fh_model(; kwargs...)
6+
h = ProximalOperators.NormL0(1.0)
7+
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
8+
end
9+
10+
function setup_fh_l1(; kwargs...)
11+
model, nls_model, _ = fh_model(; kwargs...)
12+
h = ProximalOperators.NormL1(10.0)
13+
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
14+
end

src/testset_group_lasso.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ function setup_group_lasso_l12(args...; kwargs...)
55
model, nls_model, ng, _, idx = group_lasso_model(; kwargs...)
66
idx = [idx[i, :] for i = 1:ng]
77
λ = 0.2 * ones(ng)
8-
h = GroupNormL2(λ, idx)
8+
h = ShiftedProximalOperators.GroupNormL2(λ, idx)
99
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
1010
end
11-

src/testset_lrcomp.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
export setup_lrcomp_rank, setup_lrcomp_nuclear
33

44
function setup_lrcomp_rank(args...; kwargs...)
5-
model, nls_model, _ = lrcomp_model(args...; kwargs...)
5+
model, nls_model, _ = lrcomp_model(; kwargs...)
66
λ = 0.1
7-
h = Rank(λ)
7+
h = ProximalOperators.Rank(λ)
88
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
99
end
1010

1111
function setup_lrcomp_nuclear(args...; kwargs...)
12-
model, nls_model, _ = lrcomp_model(args...; kwargs...)
12+
model, nls_model, _ = lrcomp_model(; kwargs...)
1313
λ = 0.1
14-
h = NuclearNorm(λ)
14+
h = ProximalOperators.NuclearNorm(λ)
1515
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
1616
end

src/testset_matrand.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,27 @@ export setup_mit_completion_rank, setup_mit_completion_nuclear
55
function setup_random_completion_rank(args...; kwargs...)
66
model, nls_model, _ = random_matrix_completion_model(; kwargs...)
77
λ = 0.1
8-
h = Rank(λ)
8+
h = ProximalOperators.Rank(λ)
99
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
1010
end
1111

1212
function setup_random_completion_nuclear(args...; kwargs...)
1313
model, nls_model, _ = random_matrix_completion_model(; kwargs...)
1414
λ = 0.1
15-
h = NuclearNorm(λ)
15+
h = ProximalOperators.NuclearNorm(λ)
1616
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
1717
end
1818

1919
function setup_mit_completion_rank(args...; kwargs...)
2020
model, nls_model, _ = MIT_matrix_completion_model()
2121
λ = 0.1
22-
h = Rank(λ)
22+
h = ProximalOperators.Rank(λ)
2323
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
2424
end
2525

2626
function setup_mit_completion_nuclear(args...; kwargs...)
2727
model, nls_model, _ = MIT_matrix_completion_model()
2828
λ = 0.1
29-
h = NuclearNorm(λ)
29+
h = ProximalOperators.NuclearNorm(λ)
3030
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
3131
end

src/testset_nnmf.jl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Predefine a set of common problem instances.
2+
export setup_nnmf_l0, setup_nnmf_l1
3+
4+
function setup_nnmf_l0(args...; kwargs...)
5+
model, nls_model, _, selected = nnmf_model(args...)
6+
λ = norm(grad(model, rand(model.meta.nvar)), Inf) / 200
7+
h = ProximalOperators.NormL0(λ)
8+
return RegularizedNLPModel(model, h, selected), RegularizedNLSModel(nls_model, h, selected)
9+
end
10+
11+
function setup_nnmf_l1(args...; kwargs...)
12+
model, nls_model, _, selected = nnmf_model(args...)
13+
λ = norm(grad(model, rand(model.meta.nvar)), Inf) / 100_000
14+
h = ProximalOperators.NormL1(λ)
15+
return RegularizedNLPModel(model, h, selected), RegularizedNLSModel(nls_model, h, selected)
16+
end

src/testset_qp_rand.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Predefine a set of common problem instances.
2+
export setup_qp_rand_l1
3+
4+
function setup_qp_rand_l1(args...; kwargs...)
5+
model, nls_model, _ = qp_rand_model(args...; kwargs...)
6+
λ = 0.1
7+
h = ProximalOperators.NormL1(λ)
8+
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
9+
end

src/testset_svm.jl

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Predefine a set of common problem instances.
2+
export setup_svm_train_lhalf,
3+
setup_svm_test_lhalf, setup_svm_train_l0, setup_svm_test_l0, setup_svm_train_l1, setup_svm_test_l1
4+
5+
function setup_svm_train_lhalf(args...; kwargs...)
6+
model, nls_model, _ = svm_train_model(args...)
7+
h = ShiftedProximalOperators.RootNormLhalf(0.1)
8+
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
9+
end
10+
11+
function setup_svm_test_lhalf(args...; kwargs...)
12+
model, nls_model, _ = svm_test_model(args...)
13+
h = ShiftedProximalOperators.RootNormLhalf(0.1)
14+
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
15+
end
16+
17+
function setup_svm_train_l0(args...; kwargs...)
18+
model, nls_model, _ = svm_train_model(args...)
19+
h = ProximalOperators.NormL0(0.1)
20+
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
21+
end
22+
23+
function setup_svm_test_l0(args...; kwargs...)
24+
model, nls_model, _ = svm_test_model(args...)
25+
h = ProximalOperators.NormL0(0.1)
26+
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
27+
end
28+
29+
function setup_svm_train_l1(args...; kwargs...)
30+
model, nls_model, _ = svm_train_model(args...)
31+
h = ProximalOperators.NormL1(0.1)
32+
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
33+
end
34+
35+
function setup_svm_test_l1(args...; kwargs...)
36+
model, nls_model, _ = svm_test_model(args...)
37+
h = ProximalOperators.NormL1(0.1)
38+
return RegularizedNLPModel(model, h), RegularizedNLSModel(nls_model, h)
39+
end

test/rmodel_tests.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,10 @@ using ProximalOperators
1616
obj(nls_model, nls_model.meta.x0)
1717
@test neval_obj(rlsmodel) == neval_obj(nls_model)
1818
end
19+
20+
@testset "Problem combos" begin
21+
# Test that we can at least instantiate the models
22+
rnlp, rnls = setup_bpdn_l0()
23+
@test isa(rnlp, RegularizedNLPModel)
24+
@test isa(rnls, RegularizedNLSModel)
25+
end

0 commit comments

Comments
 (0)