diff --git a/src/dual_model_variables.jl b/src/dual_model_variables.jl index ab43a11b..46db83b6 100644 --- a/src/dual_model_variables.jl +++ b/src/dual_model_variables.jl @@ -148,6 +148,7 @@ function add_dual_variable( # Add each vi to the dictionary func = get_function(primal_model, ci) set = get_set(primal_model, ci) + is_unique_var = length(vis) == 1 for (i, vi) in enumerate(vis) push_to_dual_obj_aff_terms!( primal_model, @@ -164,6 +165,7 @@ function add_dual_variable( i, ci_name, dual_names.dual_variable_name_prefix, + ensure_unique = !is_unique_var, ) end end @@ -175,10 +177,15 @@ function set_dual_variable_name( vi::MOI.VariableIndex, i::Int, ci_name::String, - prefix::String, + prefix::String; + ensure_unique::Bool = true, ) isempty(ci_name) && return - MOI.set(dual_model, MOI.VariableName(), vi, prefix * ci_name * "_$i") + name = prefix * ci_name + if ensure_unique + name *= "_$i" + end + MOI.set(dual_model, MOI.VariableName(), vi, name) return end diff --git a/test/Tests/test_JuMP_dualize.jl b/test/Tests/test_JuMP_dualize.jl index 6d92b635..bb805064 100644 --- a/test/Tests/test_JuMP_dualize.jl +++ b/test/Tests/test_JuMP_dualize.jl @@ -64,7 +64,7 @@ end dual_model = dualize(model; dual_names = DualNames("dual", "")) - @test typeof(dual_model[:dualeqcon_1]) == VariableRef + @test typeof(dual_model[:dualeqcon]) == VariableRef @test !haskey(dual_model, Symbol("")) end @testset "JuMP_dualize_kwargs" begin diff --git a/test/Tests/test_dual_model_variables.jl b/test/Tests/test_dual_model_variables.jl index eb3c929b..c249ed52 100644 --- a/test/Tests/test_dual_model_variables.jl +++ b/test/Tests/test_dual_model_variables.jl @@ -34,6 +34,15 @@ vi = MOI.VariableIndex(1) Dualization.set_dual_variable_name(primal_model, vi, 1, "con", "") @test MOI.get(primal_model, MOI.VariableName(), vi) == "con_1" + Dualization.set_dual_variable_name( + primal_model, + vi, + 1, + "con", + "", + ensure_unique = false, + ) + @test MOI.get(primal_model, MOI.VariableName(), vi) == "con" Dualization.set_dual_variable_name(primal_model, vi, 2, "con", "") @test MOI.get(primal_model, MOI.VariableName(), vi) == "con_2" Dualization.set_dual_variable_name(primal_model, vi, 2, "con", "oi") diff --git a/test/Tests/test_dual_names.jl b/test/Tests/test_dual_names.jl index 0fd6bfaf..c32eadba 100644 --- a/test/Tests/test_dual_names.jl +++ b/test/Tests/test_dual_names.jl @@ -71,7 +71,7 @@ }( 1, )][1] - @test MOI.get(dual_model, MOI.VariableName(), vi_2) == "dualvar_lessthan_1" + @test MOI.get(dual_model, MOI.VariableName(), vi_2) == "dualvar_lessthan" # Query constraint names ci_1 = primal_dual_map.primal_var_dual_con[MOI.VariableIndex(1)] ci_2 = primal_dual_map.primal_var_dual_con[MOI.VariableIndex(2)] diff --git a/test/optimize_abstract_models.jl b/test/optimize_abstract_models.jl index 2b7776ac..04823c6b 100644 --- a/test/optimize_abstract_models.jl +++ b/test/optimize_abstract_models.jl @@ -7,10 +7,7 @@ Attach an MOI.ModelLike to an optimizer, solve it and retrieve the termination status and objective value """ -function solve_abstract_model( - model::MOI.ModelLike, - optimizer_constructor, -) where {T} +function solve_abstract_model(model::MOI.ModelLike, optimizer_constructor) JuMP_model = JuMP.Model() MOI.copy_to(JuMP.backend(JuMP_model), model) set_optimizer(JuMP_model, optimizer_constructor)