Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
mlubin committed Feb 1, 2017
2 parents 7cb9350 + 21813de commit 593592b
Show file tree
Hide file tree
Showing 7 changed files with 239 additions and 230 deletions.
226 changes: 113 additions & 113 deletions test/conicinterface.jl

Large diffs are not rendered by default.

26 changes: 13 additions & 13 deletions test/linprog.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Base.Test
using MathProgBase

function linprogtest(solver=MathProgBase.defaultLPsolver; objtol = 1e-7, primaltol = 1e-6)
function linprogtest(solver; objtol = 1e-7, primaltol = 1e-6)
println("Testing linprog and subfunctions with solver ", string(typeof(solver)))
# min -x
# s.t. 2x + y <= 1.5
Expand All @@ -12,27 +12,27 @@ function linprogtest(solver=MathProgBase.defaultLPsolver; objtol = 1e-7, primalt
m = buildlp([-1,0],[2 1],'<',1.5,solver)
sol = solvelp(m)
@test sol.status == :Optimal
@test_approx_eq_eps sol.objval -0.75 objtol
@test_approx_eq_eps norm(sol.sol - [0.75,0.0]) 0 primaltol
@test isapprox(sol.objval, -0.75, atol=objtol)
@test isapprox(norm(sol.sol - [0.75,0.0]), 0.0, atol=primaltol)

# test linprog
sol = linprog([-1,0],[2 1],'<',1.5,solver)
@test sol.status == :Optimal
@test_approx_eq_eps sol.objval -0.75 objtol
@test_approx_eq_eps norm(sol.sol - [0.75,0.0]) 0 primaltol
@test isapprox(sol.objval, -0.75, atol=objtol)
@test isapprox(norm(sol.sol - [0.75,0.0]), 0.0, atol=primaltol)

# test buildlp and solvelp
m = buildlp([-1,0],[2 1],'<',1.5,solver)
sol = solvelp(m)
@test sol.status == :Optimal
@test_approx_eq_eps sol.objval -0.75 objtol
@test_approx_eq_eps norm(sol.sol - [0.75,0.0]) 0 primaltol
@test isapprox(sol.objval, -0.75, atol=objtol)
@test isapprox(norm(sol.sol - [0.75,0.0]), 0.0, atol=primaltol)

# test linprog
sol = linprog([-1,0],sparse([2 1]),'<',1.5,solver)
@test sol.status == :Optimal
@test_approx_eq_eps sol.objval -0.75 objtol
@test_approx_eq_eps norm(sol.sol - [0.75,0.0]) 0 primaltol
@test isapprox(sol.objval, -0.75, atol=objtol)
@test isapprox(norm(sol.sol - [0.75,0.0]), 0.0, atol=primaltol)

# test infeasible problem:
# min x
Expand All @@ -45,14 +45,14 @@ function linprogtest(solver=MathProgBase.defaultLPsolver; objtol = 1e-7, primalt
@test sol.status == :Infeasible

r = sol.attrs[:infeasibilityray][1]
@test_approx_eq r/abs(r) -1.0
@test isapprox(r/abs(r), -1.0)

# test linprog
sol = linprog([1,0],[2 1],'<',-1,solver)
@test sol.status == :Infeasible

r = sol.attrs[:infeasibilityray][1]
@test_approx_eq r/abs(r) -1.0
@test isapprox(r/abs(r), -1.0)

# test unbounded problem:
# min -x-y
Expand All @@ -78,13 +78,13 @@ function linprogtest(solver=MathProgBase.defaultLPsolver; objtol = 1e-7, primalt
sol = solvelp(m)
@test sol.status == :Unbounded
@test sol.attrs[:unboundedray][1] > 1e-7
@test_approx_eq sol.attrs[:unboundedray][1] sol.attrs[:unboundedray][2]
@test isapprox(sol.attrs[:unboundedray][1], sol.attrs[:unboundedray][2])

# test linprog
sol = linprog([-1,-1],[1 -1],'=',0,solver)
@test sol.status == :Unbounded
@test sol.attrs[:unboundedray][1] > 1e-7
@test_approx_eq sol.attrs[:unboundedray][1] sol.attrs[:unboundedray][2]
@test isapprox(sol.attrs[:unboundedray][1], sol.attrs[:unboundedray][2])


println("Passed")
Expand Down
130 changes: 65 additions & 65 deletions test/linproginterface.jl
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,23 @@ function linprogsolvertest(solver::AbstractMathProgSolver, eps = Base.rtoldefaul

optimize!(m)
@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) -1 eps
@test_approx_eq_eps getsolution(m) [1.0, 0.0] eps
@test_approx_eq_eps getconstrsolution(m) [1.0] eps
@test_approx_eq_eps getconstrduals(m) [-1.0] eps
@test_approx_eq_eps getreducedcosts(m) [0.0, 1.0] eps
@test isapprox(getobjval(m), -1, atol=eps)
@test isapprox(norm(getsolution(m) - [1.0, 0.0]), 0.0, atol=eps)
@test isapprox(getconstrsolution(m)[1], 1.0, atol=eps)
@test isapprox(getconstrduals(m)[1], -1.0, atol=eps)
@test isapprox(norm(getreducedcosts(m) - [0.0, 1.0]), 0.0, atol=eps)

setsense!(m, :Max)
# max x
setobj!(m, [1.0,0.0])
optimize!(m)

@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) 1 eps
@test_approx_eq_eps getsolution(m) [1.0, 0.0] eps
@test_approx_eq_eps getconstrsolution(m) [1.0] eps
@test_approx_eq_eps getconstrduals(m) [1.0] eps
@test_approx_eq_eps getreducedcosts(m) [0.0, -1.0] eps
@test isapprox(getobjval(m), 1, atol=eps)
@test isapprox(norm(getsolution(m) - [1.0, 0.0]), 0.0, atol=eps)
@test isapprox(getconstrsolution(m)[1], 1.0, atol=eps)
@test isapprox(getconstrduals(m)[1], 1.0, atol=eps)
@test isapprox(norm(getreducedcosts(m) - [0.0, -1.0]), 0.0, atol=eps)

# add new variable to get:
# max x + 2z
Expand All @@ -52,35 +52,35 @@ function linprogsolvertest(solver::AbstractMathProgSolver, eps = Base.rtoldefaul
optimize!(m)

@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) 2 eps
@test_approx_eq_eps getsolution(m) [0.0, 0.0, 1.0] eps
@test_approx_eq_eps getconstrsolution(m) [1.0] eps
@test_approx_eq_eps getconstrduals(m) [2.0] eps
@test_approx_eq_eps getreducedcosts(m) [-1.0, -2.0, 0.0] eps
@test isapprox(getobjval(m), 2, atol=eps)
@test isapprox(norm(getsolution(m) - [0.0, 0.0, 1.0]), 0.0, atol=eps)
@test isapprox(getconstrsolution(m)[1], 1.0, atol=eps)
@test isapprox(getconstrduals(m)[1], 2.0, atol=eps)
@test isapprox(norm(getreducedcosts(m) - [-1.0, -2.0, 0.0]), 0.0, atol=eps)

setvarLB!(m, [-1.0,0.0,0.0])
optimize!(m)

@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) 3 eps
@test isapprox(getobjval(m), 3, atol=eps)

# fix z to zero
setvarLB!(m, [0.0,0.0,0.0])
setvarUB!(m, [Inf,Inf,0.0])
optimize!(m)

@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) 1 eps
@test isapprox(getobjval(m), 1, atol=eps)

setconstrUB!(m, [2.0])
setconstrLB!(m, [2.0])
optimize!(m)
@test_approx_eq_eps getobjval(m) 2 eps
@test isapprox(getobjval(m), 2, atol=eps)

setobj!(m, [1.0, 2.0, 0.0])
optimize!(m)
@test_approx_eq_eps getobjval(m) 4 eps
@test_approx_eq_eps getsolution(m) [0.0, 2.0, 0.0] eps
@test isapprox(getobjval(m), 4, atol=eps)
@test isapprox(norm(getsolution(m) - [0.0, 2.0, 0.0]), 0.0, atol=eps)


# we now have:
Expand All @@ -93,10 +93,10 @@ function linprogsolvertest(solver::AbstractMathProgSolver, eps = Base.rtoldefaul
optimize!(m)

@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) 3 eps
@test_approx_eq_eps getsolution(m) [1.0, 1.0, 0.0] eps
@test_approx_eq_eps getconstrduals(m) [1.5, -0.5] eps
@test_approx_eq_eps getreducedcosts(m) [0.0, 0.0, -1.5] eps
@test isapprox(getobjval(m), 3, atol=eps)
@test isapprox(norm(getsolution(m) - [1.0, 1.0, 0.0]), 0.0, atol=eps)
@test isapprox(norm(getconstrduals(m) - [1.5, -0.5]), 0.0, atol=eps)
@test isapprox(norm(getreducedcosts(m) - [0.0, 0.0, -1.5]), 0.0, atol=eps)


# test addvar! interface
Expand All @@ -121,11 +121,11 @@ function linprogsolvertest(solver::AbstractMathProgSolver, eps = Base.rtoldefaul

optimize!(m)
@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) -1 eps
@test_approx_eq_eps getsolution(m) [1.0, 0.0] eps
@test_approx_eq_eps getconstrsolution(m) [1.0] eps
@test_approx_eq_eps getconstrduals(m) [-1.0] eps
@test_approx_eq_eps getreducedcosts(m) [0.0, 1.0] eps
@test isapprox(getobjval(m), -1, atol=eps)
@test isapprox(norm(getsolution(m) - [1.0, 0.0]), 0.0, atol=eps)
@test isapprox(getconstrsolution(m)[1], 1.0, atol=eps)
@test isapprox(getconstrduals(m)[1], -1.0, atol=eps)
@test isapprox(norm(getreducedcosts(m) - [0.0, 1.0]), 0.0, atol=eps)


####################################
Expand All @@ -147,8 +147,8 @@ function linprogsolvertest(solver::AbstractMathProgSolver, eps = Base.rtoldefaul
optimize!(m)

@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) 0.0 eps
@test_approx_eq_eps getsolution(m) [ 0.0, 0.0 ] eps
@test isapprox(getobjval(m), 0.0, atol=eps)
@test isapprox(norm(getsolution(m)), 0.0, atol=eps)

# Min x - y
# s.t. 100.0 <= x
Expand All @@ -157,8 +157,8 @@ function linprogsolvertest(solver::AbstractMathProgSolver, eps = Base.rtoldefaul
setconstrLB!(m,[100.0,-Inf])
optimize!(m)
@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) 100.0 eps
@test_approx_eq_eps getsolution(m) [ 100.0, 0.0 ] eps
@test isapprox(getobjval(m), 100.0, atol=eps)
@test isapprox(norm(getsolution(m) - [ 100.0, 0.0 ]), 0.0, atol=eps)

# Min x - y
# s.t. 100.0 <= x
Expand All @@ -167,8 +167,8 @@ function linprogsolvertest(solver::AbstractMathProgSolver, eps = Base.rtoldefaul
setconstrUB!(m,[Inf,-100.0])
optimize!(m)
@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) 200.0 eps
@test_approx_eq_eps getsolution(m) [ 100.0, -100.0 ] eps
@test isapprox(getobjval(m), 200.0, atol=eps)
@test isapprox(norm(getsolution(m) - [ 100.0, -100.0 ]), 0.0, atol=eps)

# Test issue #40 from Gurobi.jl
# min x
Expand Down Expand Up @@ -216,17 +216,17 @@ function linprogsolvertest(solver::AbstractMathProgSolver, eps = Base.rtoldefaul

optimize!(m)
@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) 2.6666666666 eps
@test_approx_eq_eps getsolution(m) [1.3333333333, 1.3333333333] eps
@test isapprox(getobjval(m), 2.6666666666, atol=eps)
@test isapprox(norm(getsolution(m) - [1.3333333333, 1.3333333333]), 0.0, atol=eps)

# copy and solve again

if applicable(copy, m)
m2 = copy(m)
optimize!(m2)
@test status(m2) == :Optimal
@test_approx_eq_eps getobjval(m2) 2.6666666666 eps
@test_approx_eq_eps getsolution(m2) [1.3333333333, 1.3333333333] eps
@test isapprox(getobjval(m2), 2.6666666666, atol=eps)
@test isapprox(norm(getsolution(m2) - [1.3333333333, 1.3333333333]), 0.0, atol=eps)
end


Expand All @@ -242,8 +242,8 @@ function linprogsolvertest(solver::AbstractMathProgSolver, eps = Base.rtoldefaul
changecoeffs!(m, [1], [2], [2.])
optimize!(m)
@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) 2.0 eps
@test_approx_eq_eps getsolution(m) [0.0, 2.0] eps
@test isapprox(getobjval(m), 2.0, atol=eps)
@test isapprox(norm(getsolution(m) - [0.0, 2.0]), 0.0, atol=eps)
end


Expand All @@ -258,8 +258,8 @@ function linprogsolvertest(solver::AbstractMathProgSolver, eps = Base.rtoldefaul
delconstrs!(m, [1])
optimize!(m)
@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) 4.0 eps
@test_approx_eq_eps getsolution(m) [4.0, 0.0] eps
@test isapprox(getobjval(m), 4.0, atol=eps)
@test isapprox(norm(getsolution(m) - [4.0, 0.0]), 0.0, atol=eps)
end

# delvars and solve
Expand All @@ -273,8 +273,8 @@ function linprogsolvertest(solver::AbstractMathProgSolver, eps = Base.rtoldefaul
delvars!(m, [1])
optimize!(m)
@test status(m) == :Optimal
@test_approx_eq_eps getobjval(m) 2.0 eps
@test_approx_eq_eps getsolution(m) [2.0] eps
@test isapprox(getobjval(m), 2.0, atol=eps)
@test isapprox(getsolution(m)[1], 2.0, atol=eps)
end


Expand All @@ -300,8 +300,8 @@ function linprogsolvertestextra(solver::AbstractMathProgSolver; eps = Base.rtold

optimize!(m)
@test status(m) == :Optimal
@test_approx_eq getobjval(m) 0.0
@test_approx_eq getsolution(m) [ 0.0, 0.0 ]
@test isapprox(getobjval(m), 0.0)
@test isapprox(norm(getsolution(m)), 0.0)

# Min x - y
# s.t. 0.0 <= x <= 100.0
Expand All @@ -310,8 +310,8 @@ function linprogsolvertestextra(solver::AbstractMathProgSolver; eps = Base.rtold
setconstrUB!(m,[100.0,100.0])
optimize!(m)
@test status(m) == :Optimal
@test_approx_eq getobjval(m) -100.0
@test_approx_eq getsolution(m) [ 0.0, 100.0 ]
@test isapprox(getobjval(m), -100.0)
@test isapprox(norm(getsolution(m) - [ 0.0, 100.0 ]), 0.0)

# Min x - y
# s.t. -100.0 <= x <= 100.0
Expand All @@ -320,8 +320,8 @@ function linprogsolvertestextra(solver::AbstractMathProgSolver; eps = Base.rtold
setconstrLB!(m,[-100.0,-100.0])
optimize!(m)
@test status(m) == :Optimal
@test_approx_eq getobjval(m) -200.0
@test_approx_eq getsolution(m) [ -100.0, 100.0 ]
@test isapprox(getobjval(m), -200.0)
@test isapprox(norm(getsolution(m) - [ -100.0, 100.0 ]), 0.0)

# Min x - y
# s.t. -100.0 <= x <= 100.0
Expand All @@ -331,8 +331,8 @@ function linprogsolvertestextra(solver::AbstractMathProgSolver; eps = Base.rtold
setconstrUB!(m,[10.0,10.0])
optimize!(m)
@test status(m) == :Optimal
@test_approx_eq getobjval(m) 0.0
@test_approx_eq getsolution(m) [ 10.0, 10.0 ]
@test isapprox(getobjval(m), 0.0)
@test isapprox(norm(getsolution(m) - [ 10.0, 10.0 ]), 0.0)

# Min x - y
# s.t. 0.0 <= x <= Inf
Expand All @@ -342,8 +342,8 @@ function linprogsolvertestextra(solver::AbstractMathProgSolver; eps = Base.rtold
setconstrUB!(m,[Inf,0.0])
optimize!(m)
@test status(m) == :Optimal
@test_approx_eq getobjval(m) 0.0
@test_approx_eq getsolution(m) [ 0.0, 0.0 ]
@test isapprox(getobjval(m), 0.0)
@test isapprox(norm(getsolution(m)), 0.0)

# Min x - y
# s.t. -Inf <= x <= Inf
Expand Down Expand Up @@ -388,8 +388,8 @@ function linprogsolvertestextra(solver::AbstractMathProgSolver; eps = Base.rtold

optimize!(m)
@test status(m) == :Optimal
@test_approx_eq getobjval(m) 0.0
@test_approx_eq getsolution(m) [ 0.0, 0.0 ]
@test isapprox(getobjval(m), 0.0)
@test isapprox(norm(getsolution(m)), 0.0)



Expand All @@ -403,8 +403,8 @@ function linprogsolvertestextra(solver::AbstractMathProgSolver; eps = Base.rtold
setvarUB!(m,[100.0,100.0])
optimize!(m)
@test status(m) == :Optimal
@test_approx_eq getobjval(m) -100.0
@test_approx_eq getsolution(m) [ 0.0, 100.0 ]
@test isapprox(getobjval(m), -100.0)
@test isapprox(norm(getsolution(m) - [ 0.0, 100.0 ]), 0.0)

# Min x - y
# s.t. -Inf <= x <= Inf
Expand All @@ -414,8 +414,8 @@ function linprogsolvertestextra(solver::AbstractMathProgSolver; eps = Base.rtold
setvarLB!(m,[-100.0,-100.0])
optimize!(m)
@test status(m) == :Optimal
@test_approx_eq getobjval(m) -200.0
@test_approx_eq getsolution(m) [ -100.0, 100.0 ]
@test isapprox(getobjval(m), -200.0)
@test isapprox(norm(getsolution(m) - [ -100.0, 100.0 ]), 0.0)

# Min x - y
# s.t. -Inf <= x <= Inf
Expand All @@ -426,8 +426,8 @@ function linprogsolvertestextra(solver::AbstractMathProgSolver; eps = Base.rtold
setvarUB!(m,[10.0,10.0])
optimize!(m)
@test status(m) == :Optimal
@test_approx_eq getobjval(m) 0.0
@test_approx_eq getsolution(m) [ 10.0, 10.0 ]
@test isapprox(getobjval(m), 0.0)
@test isapprox(norm(getsolution(m) - [ 10.0, 10.0 ]), 0.0)

# Min x - y
# s.t. -Inf <= x <= Inf
Expand All @@ -439,8 +439,8 @@ function linprogsolvertestextra(solver::AbstractMathProgSolver; eps = Base.rtold
setvarUB!(m,[Inf,0.0])
optimize!(m)
@test status(m) == :Optimal
@test_approx_eq getobjval(m) 0.0
@test_approx_eq getsolution(m) [ 0.0, 0.0 ]
@test isapprox(getobjval(m), 0.0)
@test isapprox(norm(getsolution(m)), 0.0)

# Min x - y
# s.t. -Inf <= x <= Inf
Expand Down
Loading

0 comments on commit 593592b

Please sign in to comment.