From 55f485548661f9a5b0c2b614031cac04395e4bfc Mon Sep 17 00:00:00 2001 From: Yashvardhan Sharma Date: Wed, 8 Apr 2020 10:39:38 +0530 Subject: [PATCH 1/3] Adding get function for MOI.ConstraintSet for NonposToNonnegBridge bridges --- src/Bridges/Variable/flip_sign.jl | 3 +++ test/Bridges/Variable/flip_sign.jl | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/Bridges/Variable/flip_sign.jl b/src/Bridges/Variable/flip_sign.jl index 63441338df..3d07129de2 100644 --- a/src/Bridges/Variable/flip_sign.jl +++ b/src/Bridges/Variable/flip_sign.jl @@ -48,6 +48,9 @@ function MOI.delete(model::MOI.ModelLike, bridge::FlipSignBridge, i::IndexInVect end # Attributes, Bridge acting as a constraint +function MOI.get(model::MOI.ModelLike, attr::MOI.ConstraintSet, bridge::FlipSignBridge) + return MOI.Nonpositives(length(bridge.flipped_variables)) +end function MOI.get(model::MOI.ModelLike, attr::Union{MOI.ConstraintPrimal, MOI.ConstraintDual}, diff --git a/test/Bridges/Variable/flip_sign.jl b/test/Bridges/Variable/flip_sign.jl index ed359a0fa4..dca3f480c5 100644 --- a/test/Bridges/Variable/flip_sign.jl +++ b/test/Bridges/Variable/flip_sign.jl @@ -24,6 +24,9 @@ config = MOIT.TestConfig() vis = MOI.get(bridged_mock, MOI.ListOfVariableIndices()) y = vis[4] @test y.value == -1 + + con = MOI.get(bridged_mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Nonpositives}())[1] + @test MOI.get(bridged_mock, MOI.ConstraintSet(), con) == MOI.Nonpositives(1) @test MOI.supports(bridged_mock, MOI.VariablePrimalStart(), MOI.VariableIndex) @test MOI.supports(bridged_mock, MOI.VariablePrimalStart(), typeof(MOIB.bridge(bridged_mock, y))) From c770e671b826754e31f9a92fcdc1a9a78f476bd1 Mon Sep 17 00:00:00 2001 From: Yashvardhan Sharma Date: Wed, 8 Apr 2020 16:32:01 +0530 Subject: [PATCH 2/3] Adding test_models_equal test --- src/Bridges/Variable/flip_sign.jl | 4 +-- test/Bridges/Variable/flip_sign.jl | 56 ++++++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/Bridges/Variable/flip_sign.jl b/src/Bridges/Variable/flip_sign.jl index 3d07129de2..0b3a92c17e 100644 --- a/src/Bridges/Variable/flip_sign.jl +++ b/src/Bridges/Variable/flip_sign.jl @@ -48,8 +48,8 @@ function MOI.delete(model::MOI.ModelLike, bridge::FlipSignBridge, i::IndexInVect end # Attributes, Bridge acting as a constraint -function MOI.get(model::MOI.ModelLike, attr::MOI.ConstraintSet, bridge::FlipSignBridge) - return MOI.Nonpositives(length(bridge.flipped_variables)) +function MOI.get(model::MOI.ModelLike, attr::MOI.ConstraintSet, bridge::FlipSignBridge{T, S1}) where {T, S1<:MOI.AbstractVectorSet} + return S1(length(bridge.flipped_variables)) end function MOI.get(model::MOI.ModelLike, diff --git a/test/Bridges/Variable/flip_sign.jl b/test/Bridges/Variable/flip_sign.jl index dca3f480c5..0a937f61f2 100644 --- a/test/Bridges/Variable/flip_sign.jl +++ b/test/Bridges/Variable/flip_sign.jl @@ -24,9 +24,6 @@ config = MOIT.TestConfig() vis = MOI.get(bridged_mock, MOI.ListOfVariableIndices()) y = vis[4] @test y.value == -1 - - con = MOI.get(bridged_mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Nonpositives}())[1] - @test MOI.get(bridged_mock, MOI.ConstraintSet(), con) == MOI.Nonpositives(1) @test MOI.supports(bridged_mock, MOI.VariablePrimalStart(), MOI.VariableIndex) @test MOI.supports(bridged_mock, MOI.VariablePrimalStart(), typeof(MOIB.bridge(bridged_mock, y))) @@ -36,6 +33,59 @@ config = MOIT.TestConfig() @test MOI.get(bridged_mock, MOI.VariablePrimalStart(), y) == 1 end + @testset "Test Mock model" begin + var_names = ["a", "b", "c", "d"] + MOI.set(mock, MOI.VariableName(), MOI.get(mock, MOI.ListOfVariableIndices()), var_names) + + con_d = MOI.get(mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Zeros}())[1] + con_bc = MOI.get(mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Nonnegatives}()) + con_ex = MOI.get(mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.Zeros}())[1] + + MOI.set(mock, MOI.ConstraintName(), con_d, "cd") + MOI.set(mock, MOI.ConstraintName(), con_bc[1], "cb") + MOI.set(mock, MOI.ConstraintName(), con_bc[2], "cc") + MOI.set(mock, MOI.ConstraintName(), con_ex, "cex") + + s = """ + variables: a, b, c, d + cd: [d] in MathOptInterface.Zeros(1) + cb: [b] in MathOptInterface.Nonnegatives(1) + cc: [c] in MathOptInterface.Nonnegatives(1) + cex: [1*a + -1*d + 4.0, -1*b + 3.0, 1*a + 1*c + -12.0] in MathOptInterface.Zeros(3) + minobjective: 3*a + -2*b + -4*c + """ + model = MOIU.Model{Float64}() + MOIU.loadfromstring!(model, s) + MOIU.test_models_equal(mock, model, var_names, ["cd", "cb", "cc", "cex"]) + end + + @testset "Test Bridged model" begin + var_names = ["x", "y", "z", "w"] + MOI.set(bridged_mock, MOI.VariableName(), MOI.get(bridged_mock, MOI.ListOfVariableIndices()), var_names) + + con_w = MOI.get(bridged_mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Nonpositives}())[1] + con_z = MOI.get(bridged_mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Zeros}())[1] + con_y = MOI.get(bridged_mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Nonnegatives}())[1] + con_ex = MOI.get(bridged_mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.Zeros}())[1] + + MOI.set(bridged_mock, MOI.ConstraintName(), con_w, "cw") + MOI.set(bridged_mock, MOI.ConstraintName(), con_z, "cz") + MOI.set(bridged_mock, MOI.ConstraintName(), con_y, "cy") + MOI.set(bridged_mock, MOI.ConstraintName(), con_ex, "cex") + + s = """ + variables: x, y, z, w + cw: [w] in MathOptInterface.Nonpositives(1) + cz: [z] in MathOptInterface.Zeros(1) + cy: [y] in MathOptInterface.Nonnegatives(1) + cex: [1*x + -1*z + 4.0, 1*w + 3.0, 1*x + 1*y + -12.0] in MathOptInterface.Zeros(3) + minobjective: 3*x + 2*w + -4*y + """ + model = MOIU.Model{Float64}() + MOIU.loadfromstring!(model, s) + MOIU.test_models_equal(bridged_mock, model, var_names, ["cw", "cz", "cy", "cex"]) + end + @testset "lin4" begin MOIU.set_mock_optimize!(mock, (mock::MOIU.MockOptimizer) -> MOIU.mock_optimize!( From 32f7596c6ac74472058fa44147becf72d4e63de2 Mon Sep 17 00:00:00 2001 From: Yashvardhan Sharma Date: Thu, 9 Apr 2020 07:52:16 +0530 Subject: [PATCH 3/3] shifting tests in lin2v --- test/Bridges/Variable/flip_sign.jl | 84 +++++++++++++----------------- 1 file changed, 37 insertions(+), 47 deletions(-) diff --git a/test/Bridges/Variable/flip_sign.jl b/test/Bridges/Variable/flip_sign.jl index 0a937f61f2..cb552c3798 100644 --- a/test/Bridges/Variable/flip_sign.jl +++ b/test/Bridges/Variable/flip_sign.jl @@ -31,59 +31,49 @@ config = MOIT.TestConfig() x, y_flipped, z, s = MOI.get(mock, MOI.ListOfVariableIndices()) @test MOI.get(mock, MOI.VariablePrimalStart(), y_flipped) == -1 @test MOI.get(bridged_mock, MOI.VariablePrimalStart(), y) == 1 - end - @testset "Test Mock model" begin - var_names = ["a", "b", "c", "d"] + var_names = ["x", "y", "z", "w"] MOI.set(mock, MOI.VariableName(), MOI.get(mock, MOI.ListOfVariableIndices()), var_names) - - con_d = MOI.get(mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Zeros}())[1] - con_bc = MOI.get(mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Nonnegatives}()) + con_w = MOI.get(mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Zeros}())[1] + con_yz = MOI.get(mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Nonnegatives}()) con_ex = MOI.get(mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.Zeros}())[1] - MOI.set(mock, MOI.ConstraintName(), con_d, "cd") - MOI.set(mock, MOI.ConstraintName(), con_bc[1], "cb") - MOI.set(mock, MOI.ConstraintName(), con_bc[2], "cc") + MOI.set(mock, MOI.ConstraintName(), con_w, "cw") + MOI.set(mock, MOI.ConstraintName(), con_yz[1], "cy") + MOI.set(mock, MOI.ConstraintName(), con_yz[2], "cz") MOI.set(mock, MOI.ConstraintName(), con_ex, "cex") - s = """ - variables: a, b, c, d - cd: [d] in MathOptInterface.Zeros(1) - cb: [b] in MathOptInterface.Nonnegatives(1) - cc: [c] in MathOptInterface.Nonnegatives(1) - cex: [1*a + -1*d + 4.0, -1*b + 3.0, 1*a + 1*c + -12.0] in MathOptInterface.Zeros(3) - minobjective: 3*a + -2*b + -4*c - """ - model = MOIU.Model{Float64}() - MOIU.loadfromstring!(model, s) - MOIU.test_models_equal(mock, model, var_names, ["cd", "cb", "cc", "cex"]) - end - - @testset "Test Bridged model" begin - var_names = ["x", "y", "z", "w"] - MOI.set(bridged_mock, MOI.VariableName(), MOI.get(bridged_mock, MOI.ListOfVariableIndices()), var_names) - - con_w = MOI.get(bridged_mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Nonpositives}())[1] - con_z = MOI.get(bridged_mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Zeros}())[1] - con_y = MOI.get(bridged_mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Nonnegatives}())[1] - con_ex = MOI.get(bridged_mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.Zeros}())[1] - - MOI.set(bridged_mock, MOI.ConstraintName(), con_w, "cw") - MOI.set(bridged_mock, MOI.ConstraintName(), con_z, "cz") - MOI.set(bridged_mock, MOI.ConstraintName(), con_y, "cy") - MOI.set(bridged_mock, MOI.ConstraintName(), con_ex, "cex") - - s = """ - variables: x, y, z, w - cw: [w] in MathOptInterface.Nonpositives(1) - cz: [z] in MathOptInterface.Zeros(1) - cy: [y] in MathOptInterface.Nonnegatives(1) - cex: [1*x + -1*z + 4.0, 1*w + 3.0, 1*x + 1*y + -12.0] in MathOptInterface.Zeros(3) - minobjective: 3*x + 2*w + -4*y - """ - model = MOIU.Model{Float64}() - MOIU.loadfromstring!(model, s) - MOIU.test_models_equal(bridged_mock, model, var_names, ["cw", "cz", "cy", "cex"]) + MOI.set(bridged_mock, MOI.VariableName(), MOI.get(bridged_mock, MOI.ListOfVariableIndices())[4], "v") + con_v = MOI.get(bridged_mock, MOI.ListOfConstraintIndices{MathOptInterface.VectorOfVariables, MathOptInterface.Nonpositives}())[1] + MOI.set(bridged_mock, MOI.ConstraintName(), con_v, "cv") + + @testset "Test Mock model" begin + s = """ + variables: x, y, z, w + cw: [w] in MathOptInterface.Zeros(1) + cy: [y] in MathOptInterface.Nonnegatives(1) + cz: [z] in MathOptInterface.Nonnegatives(1) + cex: [1*x + -1*w + 4.0, -1*y + 3.0, 1*x + 1*z + -12.0] in MathOptInterface.Zeros(3) + minobjective: 3*x + -2*y + -4*z + """ + model = MOIU.Model{Float64}() + MOIU.loadfromstring!(model, s) + MOIU.test_models_equal(mock, model, var_names, ["cw", "cy", "cz", "cex"]) + end + + @testset "Test Bridged model" begin + s = """ + variables: x, z, w, v + cv: [v] in MathOptInterface.Nonpositives(1) + cw: [w] in MathOptInterface.Zeros(1) + cz: [z] in MathOptInterface.Nonnegatives(1) + cex: [1*x + -1*w + 4.0, 1*v + 3.0, 1*x + 1*z + -12.0] in MathOptInterface.Zeros(3) + minobjective: 3*x + 2*v + -4*z + """ + model = MOIU.Model{Float64}() + MOIU.loadfromstring!(model, s) + MOIU.test_models_equal(bridged_mock, model, ["x", "z", "w", "v"], ["cv", "cw", "cz", "cex"]) + end end @testset "lin4" begin