Skip to content

Commit 1f478ea

Browse files
authored
Remove support for ConstraintDual of SecondOrderCone (#242)
1 parent cc9a4c3 commit 1f478ea

File tree

2 files changed

+47
-50
lines changed

2 files changed

+47
-50
lines changed

src/MOI_wrapper/results.jl

Lines changed: 14 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -184,15 +184,13 @@ function MOI.get(
184184
return g[model.constraint_mapping[ci].+1]
185185
end
186186

187-
function MOI.get(
188-
model::Optimizer,
189-
cp::MOI.ConstraintPrimal,
190-
ci::MOI.ConstraintIndex{S,MOI.SecondOrderCone},
191-
) where {S<:Union{MOI.VectorAffineFunction{Float64},MOI.VectorOfVariables}}
192-
checkcons(model, ci, cp)
193-
x = get_solution(model.inner)
194-
return x[model.constraint_mapping[ci].+1]
195-
end
187+
# function MOI.get(
188+
# model::Optimizer,
189+
# cp::MOI.ConstraintPrimal,
190+
# ci::MOI.ConstraintIndex{S,MOI.SecondOrderCone},
191+
# ) where {S<:Union{MOI.VectorAffineFunction{Float64},MOI.VectorOfVariables}}
192+
# return # Not supported
193+
# end
196194

197195
function MOI.get(
198196
model::Optimizer,
@@ -253,31 +251,13 @@ function MOI.get(
253251
return sense_dual(model) * lambda[index]
254252
end
255253

256-
# Get constraint of a SOC constraint.
257-
#
258-
# Use the following mathematical property. Let
259-
#
260-
# ||u_i || <= t_i with dual constraint || z_i || <= w_i
261-
#
262-
# At optimality, we have
263-
#
264-
# w_i * u_i = - t_i z_i
265-
function MOI.get(
266-
model::Optimizer,
267-
cd::MOI.ConstraintDual,
268-
ci::MOI.ConstraintIndex{S,T},
269-
) where {
270-
S<:Union{MOI.VectorAffineFunction{Float64},MOI.VectorOfVariables},
271-
T<:MOI.SecondOrderCone,
272-
}
273-
checkcons(model, ci, cd)
274-
index_var = model.constraint_mapping[ci] .+ 1
275-
index_con = ci.value + 1
276-
x = get_solution(model.inner)[index_var]
277-
t_i, u_i = x[1], x[2:end]
278-
w_i = get_dual(model.inner)[index_con]
279-
return [-w_i; 1 / t_i * w_i * u_i]
280-
end
254+
# function MOI.get(
255+
# model::Optimizer,
256+
# cd::MOI.ConstraintDual,
257+
# ci::MOI.ConstraintIndex{S,MOI.SecondOrderCone},
258+
# ) where {S<:Union{MOI.VectorAffineFunction{Float64},MOI.VectorOfVariables}}
259+
# return # Not supported.
260+
# end
281261

282262
function _reduced_cost(
283263
model,

test/MOI_wrapper.jl

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,22 @@ function runtests()
2222
end
2323

2424
function test_MOI_Test_cached()
25+
second_order_exclude = String[
26+
"test_conic_GeometricMeanCone_VectorAffineFunction",
27+
"test_conic_GeometricMeanCone_VectorAffineFunction_2",
28+
"test_conic_GeometricMeanCone_VectorOfVariables",
29+
"test_conic_GeometricMeanCone_VectorOfVariables_2",
30+
"test_conic_RotatedSecondOrderCone_INFEASIBLE_2",
31+
"test_conic_RotatedSecondOrderCone_VectorAffineFunction",
32+
"test_conic_RotatedSecondOrderCone_VectorOfVariables",
33+
"test_conic_RotatedSecondOrderCone_out_of_order",
34+
"test_conic_SecondOrderCone_Nonpositives",
35+
"test_conic_SecondOrderCone_Nonnegatives",
36+
"test_conic_SecondOrderCone_VectorAffineFunction",
37+
"test_conic_SecondOrderCone_VectorOfVariables",
38+
"test_conic_SecondOrderCone_out_of_order",
39+
"test_constraint_PrimalStart_DualStart_SecondOrderCone",
40+
]
2541
model = MOI.Utilities.CachingOptimizer(
2642
MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
2743
MOI.instantiate(KNITRO.Optimizer; with_bridge_type=Float64),
@@ -41,22 +57,6 @@ function test_MOI_Test_cached()
4157
],
4258
);
4359
exclude=String[
44-
# TODO(odow): investigate SecondOrderCone-related failures
45-
# x-ref: https://github.com/jump-dev/KNITRO.jl/issues/201
46-
"test_conic_GeometricMeanCone_VectorAffineFunction",
47-
"test_conic_GeometricMeanCone_VectorAffineFunction_2",
48-
"test_conic_GeometricMeanCone_VectorOfVariables",
49-
"test_conic_GeometricMeanCone_VectorOfVariables_2",
50-
"test_conic_RotatedSecondOrderCone_INFEASIBLE_2",
51-
"test_conic_RotatedSecondOrderCone_VectorAffineFunction",
52-
"test_conic_RotatedSecondOrderCone_VectorOfVariables",
53-
"test_conic_RotatedSecondOrderCone_out_of_order",
54-
"test_conic_SecondOrderCone_Nonpositives",
55-
"test_conic_SecondOrderCone_Nonnegatives",
56-
"test_conic_SecondOrderCone_VectorAffineFunction",
57-
"test_conic_SecondOrderCone_VectorOfVariables",
58-
"test_conic_SecondOrderCone_out_of_order",
59-
"test_constraint_PrimalStart_DualStart_SecondOrderCone",
6060
# Returns OTHER_ERROR, which is also reasonable.
6161
"test_conic_empty_matrix",
6262
# Uses the ZerosBridge and ConstraintDual
@@ -67,8 +67,25 @@ function test_MOI_Test_cached()
6767
"test_solve_ObjectiveBound_MAX_SENSE_LP",
6868
# KNITRO doesn't support INFEASIBILITY_CERTIFICATE results.
6969
"test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_",
70+
second_order_exclude...,
7071
],
7172
)
73+
MOI.Test.runtests(
74+
model,
75+
MOI.Test.Config(
76+
atol=1e-3,
77+
rtol=1e-3,
78+
optimal_status=MOI.LOCALLY_SOLVED,
79+
infeasible_status=MOI.LOCALLY_INFEASIBLE,
80+
exclude=Any[
81+
MOI.ConstraintBasisStatus,
82+
MOI.VariableBasisStatus,
83+
MOI.DualObjectiveValue,
84+
MOI.ConstraintDual,
85+
],
86+
);
87+
include=second_order_exclude,
88+
)
7289
return
7390
end
7491

0 commit comments

Comments
 (0)