Skip to content

Commit 730a5de

Browse files
geoffroylecontedpo
authored andcommitted
add qp-rand problem
1 parent 80b2cc9 commit 730a5de

File tree

2 files changed

+23
-14
lines changed

2 files changed

+23
-14
lines changed

src/qp_rand_model.jl

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,34 @@ export qp_rand_model
22
using .QuadraticModels
33

44
"""
5-
model, x0 = qp_rand_model(n, dens = 1.0e-3)
5+
model, x0 = qp_rand_model(n; dens = 1.0e-3, convex = false)
66
77
Return an instance of a `QuadraticModel` representing
88
9-
½ xᵀQx + cᵀx s.t. x ≥ 1,
9+
½ xᵀHx + cᵀx s.t. l ≤ x ≤ u,
1010
11-
where Q = A + A' + I where A is a random square matrix with density `dens`.
11+
with H = A + A' or H = A * A' + I (see the `convex` keyword argument) where A is a random square matrix with density `dens`, `l = -e -tₗ` and `u = e + tᵤ` where `tₗ` and `tᵤ` are sampled from a uniform distribution between 0 and 1.
1212
1313
## Arguments
1414
1515
* `n :: Int`: size of the problem,
16-
* `dens :: Real`: density of A used to generate the quadratic model.
16+
17+
## Keyword arguments
18+
19+
* `dens :: Real`: density of `A`` used to generate the quadratic model (default: `1.0e-3`).
20+
* `convex :: Bool`: true to generate a convex `H` (default: `false`).
1721
1822
## Return Value
1923
20-
An instance of a `QuadraticModel`
24+
An instance of a `QuadraticModel`.
2125
"""
22-
function qp_rand_model(n::Int, dens::R = 1.0e-3) where {R <: Real}
23-
A = sprand(R, n, n, dens)
24-
H = A + A' + I
26+
function qp_rand_model(n::Int; dens::R = 1.0e-4, convex::Bool = false) where {R <: Real}
27+
A = sprandn(R, n, n, dens)
28+
H = convex ? (A * A') : (A + A') #+ I
2529
c = randn(R, n)
26-
l = .-ones(R, n) #-one(R) .- rand(R, n)
27-
# u = one(R) .+ rand(R, n)
28-
qp = QuadraticModel(c, H; lvar = l)
30+
l = -one(R) .- rand(R, n)
31+
u = one(R) .+ rand(R, n)
32+
qp = QuadraticModel(c, H; lvar = l, uvar = u)
2933
x0 = zeros(R, n)
3034
qp, x0
3135
end

test/runtests.jl

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,13 @@ end
154154

155155
@testset "QP-rand" begin
156156
n, dens = 100, 0.1
157-
model, x0 = qp_rand_model(n, dens)
158-
@test all(model.meta.lvar .== -1.0)
159-
@test all(model.meta.uvar .== Inf)
157+
model, x0 = qp_rand_model(n; dens = dens, convex = false)
158+
@test all(-2.0 .≤ model.meta.lvar .≤ 0.0)
159+
@test all(0.0 .≤ model.meta.uvar .≤ 2.0)
160+
@test all(model.meta.x0 .== x0)
161+
162+
model, x0 = qp_rand_model(n; dens = dens, convex = true)
163+
@test all(-2.0 .≤ model.meta.lvar .≤ 0.0)
164+
@test all(0.0 .≤ model.meta.uvar .≤ 2.0)
160165
@test all(model.meta.x0 .== x0)
161166
end

0 commit comments

Comments
 (0)