Skip to content

Commit 7d2a467

Browse files
committed
more tests
1 parent 8d7f215 commit 7d2a467

File tree

2 files changed

+69
-10
lines changed

2 files changed

+69
-10
lines changed

src/feasibility.jl

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -815,7 +815,7 @@ function _analyze_complementarity!(model, data)
815815
obj = JuMP.constraint_object(con)
816816
func = obj.func
817817
set = obj.set
818-
func_val = JuMP.value(x -> data.primal_point[x], func) - _set_value(set)
818+
func_val = JuMP.value.(x -> data.primal_point[x], func) - _set_value(set)
819819
comp_val = MOI.Utilities.set_dot(func_val, data.dual_point[con], set)
820820
if abs(comp_val) > data.atol
821821
push!(data.complementarity, ComplemetarityViolation(con, comp_val))
@@ -824,9 +824,14 @@ function _analyze_complementarity!(model, data)
824824
return
825825
end
826826

827-
function _set_value(set::MOI.AbstractScalarSet)
828-
return 0.0
829-
end
827+
# not needed because it would have stoped in dualization before
828+
# function _set_value(set::MOI.AbstractScalarSet)
829+
# return 0.0
830+
# end
831+
# function _set_value(set::MOI.Interval)
832+
# error("Interval sets are not supported.")
833+
# return (set.lower, set.upper)
834+
# end
830835

831836
function _set_value(set::MOI.AbstractVectorSet)
832837
return zeros(MOI.dimension(set))
@@ -844,11 +849,6 @@ function _set_value(set::MOI.EqualTo)
844849
return set.value
845850
end
846851

847-
function _set_value(set::MOI.Interval)
848-
error("Interval sets are not supported.")
849-
return (set.lower, set.upper)
850-
end
851-
852852
function _analyze_objectives!(
853853
model::JuMP.GenericModel{T},
854854
dual_model,
@@ -1140,7 +1140,7 @@ function _dualize2(
11401140
kwargs...,
11411141
)
11421142
mode = JuMP.mode(model)
1143-
if mode != JuMP.AUTOMATIC
1143+
if mode == JuMP.MANUAL
11441144
error("Dualization does not support solvers in $(mode) mode")
11451145
end
11461146
dual_model = JuMP.Model()

test/feasibility.jl

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ function test_no_solution()
3737
@constraint(model, c, x^4 >= 0) # this will make the model non-linear
3838
@test_throws ErrorException ModelAnalyzer.Feasibility.dual_feasibility_report(
3939
model,
40+
point = Dict(), # to skip dual solutions error
4041
)
4142
end
4243

@@ -176,6 +177,64 @@ function test_analyse_simple()
176177
return
177178
end
178179

180+
function test_analyse_simple_direct()
181+
model = direct_model(HiGHS.Optimizer())
182+
set_silent(model)
183+
@variable(model, x)
184+
@constraint(model, c, x >= 0)
185+
@objective(model, Min, 2 * x)
186+
187+
optimize!(model)
188+
189+
data = ModelAnalyzer.analyze(ModelAnalyzer.Feasibility.Analyzer(), model)
190+
191+
list = ModelAnalyzer.list_of_issue_types(data)
192+
193+
@test length(list) == 0
194+
195+
return
196+
end
197+
198+
function test_with_interval()
199+
model = Model(HiGHS.Optimizer)
200+
set_silent(model)
201+
@variable(model, x >= 1)
202+
@constraint(model, c, 2 * x in MOI.Interval(0.0, 3.0))
203+
@objective(model, Min, x)
204+
optimize!(model)
205+
@test !ModelAnalyzer.Feasibility._can_dualize(model)
206+
# TODO this should eb a waning at least
207+
data = ModelAnalyzer.analyze(ModelAnalyzer.Feasibility.Analyzer(), model)
208+
return
209+
end
210+
211+
function test_analyse_many_constraint_types()
212+
model = Model(HiGHS.Optimizer)
213+
set_silent(model)
214+
@variable(model, x >= 1)
215+
@variable(model, y <= 0)
216+
@variable(model, z == 0)
217+
@variable(model, w)
218+
@variable(model, 0 <= v <= 1)
219+
@constraint(model, c1, x >= 0)
220+
@constraint(model, c2, x <= 10)
221+
@constraint(model, c3, x == 5)
222+
@constraint(model, c4, y >= -1)
223+
@constraint(model, c5, w == 3)
224+
@constraint(model, c6, [2v] in Nonpositives()) # this should be redundant as z is fixed to 0
225+
@objective(model, Min, x)
226+
227+
optimize!(model)
228+
229+
data = ModelAnalyzer.analyze(ModelAnalyzer.Feasibility.Analyzer(), model)
230+
231+
list = ModelAnalyzer.list_of_issue_types(data)
232+
233+
@test length(list) == 0
234+
235+
return
236+
end
237+
179238
function test_analyse_mip()
180239
model = Model(HiGHS.Optimizer)
181240
set_silent(model)

0 commit comments

Comments
 (0)