Skip to content

Conversation

@odow
Copy link
Member

@odow odow commented Oct 27, 2024

Closes #2566

Required for cvanaret/Uno#47

@odow
Copy link
Member Author

odow commented Oct 27, 2024

Just confirming that with this PR, Uno now returns the correct dual solutions:

julia> using JuMP, AmplNLWriter, Uno_jll, Ipopt_jll, Test

julia> function main(args...)
           @testset "Model 1" begin
               model = Model(
               () -> AmplNLWriter.Optimizer(args...; directory = "/tmp"),
               )
               @variable(model, x)
               @objective(model, Min, x)
               c1 = @constraint(model, x >= 1)
               optimize!(model)
               @test dual(c1)  1.0 atol=1e-6
           end
           @testset "Model 2" begin
               model = Model(
               () -> AmplNLWriter.Optimizer(args...; directory = "/tmp"),
               )
               @variable(model, x)
               @objective(model, Max, -x)
               c1 = @constraint(model, x >= 1)
               optimize!(model)
               @test dual(c1)  1.0 atol=1e-6
           end
           @testset "Model 3" begin
               model = Model(
               () -> AmplNLWriter.Optimizer(args...; directory = "/tmp"),
               )
               @variable(model, x)
               @objective(model, Max, x)
               c1 = @constraint(model, x <= 1)
               optimize!(model)
               @test dual(c1)  -1.0 atol=1e-6
           end
           @testset "Model 4" begin
               model = Model(
               () -> AmplNLWriter.Optimizer(args...; directory = "/tmp"),
               )
               @variable(model, x)
               @objective(model, Min, -x)
               c1 = @constraint(model, x <= 1)
               optimize!(model)
               @test dual(c1)  -1.0 atol=1e-6
           end

           @testset "Model 5" begin
               model = Model(
               () -> AmplNLWriter.Optimizer(args...; directory = "/tmp"),
               )
               @variable(model, x >= 1)
               @objective(model, Min, x)
               optimize!(model)
               @test dual(LowerBoundRef(x))  1.0 atol=1e-6
           end
           @testset "Model 6" begin
               model = Model(
               () -> AmplNLWriter.Optimizer(args...; directory = "/tmp"),
               )
               @variable(model, x >= 1)
               @objective(model, Max, -x)
               optimize!(model)
               @test dual(LowerBoundRef(x))  1.0 atol=1e-6
           end
           @testset "Model 7" begin
               model = Model(
               () -> AmplNLWriter.Optimizer(args...; directory = "/tmp"),
               )
               @variable(model, x <= 1)
               @objective(model, Max, x)
               optimize!(model)
               @test dual(UpperBoundRef(x))  -1.0 atol=1e-6
           end
           @testset "Model 8" begin
               model = Model(
               () -> AmplNLWriter.Optimizer(args...; directory = "/tmp"),
               )
               @variable(model, x <= 1)
               @objective(model, Min, -x)
               optimize!(model)
               @test dual(UpperBoundRef(x))  -1.0 atol=1e-6
           end
           return
       end
main (generic function with 1 method)

julia> main(Ipopt_jll.amplexe, ["print_level=0", "sb=yes"])
Ipopt 3.14.16: print_level=0
sb=yes

Test Summary: | Pass  Total  Time
Model 1       |    1      1  0.1s
Ipopt 3.14.16: print_level=0
sb=yes

Test Summary: | Pass  Total  Time
Model 2       |    1      1  0.1s
Ipopt 3.14.16: print_level=0
sb=yes

Test Summary: | Pass  Total  Time
Model 3       |    1      1  0.1s
Ipopt 3.14.16: print_level=0
sb=yes

Test Summary: | Pass  Total  Time
Model 4       |    1      1  0.1s
Ipopt 3.14.16: print_level=0
sb=yes

Test Summary: | Pass  Total  Time
Model 5       |    1      1  0.1s
Ipopt 3.14.16: print_level=0
sb=yes

Test Summary: | Pass  Total  Time
Model 6       |    1      1  0.1s
Ipopt 3.14.16: print_level=0
sb=yes

Test Summary: | Pass  Total  Time
Model 7       |    1      1  0.1s
Ipopt 3.14.16: print_level=0
sb=yes

Test Summary: | Pass  Total  Time
Model 8       |    1      1  0.1s

julia> main(Uno_jll.amplexe, ["logger=SILENT"])
Test Summary: | Pass  Total  Time
Model 1       |    1      1  0.1s
Test Summary: | Pass  Total  Time
Model 2       |    1      1  0.1s
Test Summary: | Pass  Total  Time
Model 3       |    1      1  0.1s
Test Summary: | Pass  Total  Time
Model 4       |    1      1  0.1s
Test Summary: | Pass  Total  Time
Model 5       |    1      1  0.0s
Test Summary: | Pass  Total  Time
Model 6       |    1      1  0.0s
Test Summary: | Pass  Total  Time
Model 7       |    1      1  0.1s
Test Summary: | Pass  Total  Time
Model 8       |    1      1  0.1s

@odow odow merged commit f11a616 into master Oct 27, 2024
15 checks passed
@odow odow deleted the od/dual-suffix branch October 27, 2024 21:43
This was referenced Oct 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

[FileFormats.NL] support other suffixes in the sol reader

2 participants