Skip to content

Commit cc1814d

Browse files
committed
wip
1 parent 6bd477a commit cc1814d

File tree

3 files changed

+81
-2
lines changed

3 files changed

+81
-2
lines changed

src/Bridges/Constraint/interval.jl

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
_lower_set(set::MOI.Interval) = MOI.GreaterThan(set.lower)
2-
_upper_set(set::MOI.Interval) = MOI.LessThan(set.upper)
1+
_lower_set(set::MOI.Interval) = isinf(set.lower) ? MOI.ExtendedGreaterThan(set.lower) : MOI.GreaterThan(set.lower)
2+
_upper_set(set::MOI.Interval) = isinf(set.upper) ? MOI.ExtendedLessThan(set.upper) : MOI.LessThan(set.upper)
33
_lower_set(set::MOI.EqualTo) = MOI.GreaterThan(set.value)
44
_upper_set(set::MOI.EqualTo) = MOI.LessThan(set.value)
55
_lower_set(set::MOI.Zeros) = MOI.Nonnegatives(set.dimension)
@@ -267,3 +267,31 @@ function MOI.get(
267267
) where {T,F}
268268
return MOI.Zeros(MOI.get(model, attr, bridge.lower).dimension)
269269
end
270+
271+
272+
# guimarqu : new bridge (to improve)
273+
"""
274+
UnextendBridge
275+
276+
Bridge for ExtendedGreatherThan to GreaterThan ...
277+
"""
278+
struct UnextendBridge{
279+
T,
280+
F<:MOI.AbstractFunction,
281+
ES<:MOI.AbstractSet,
282+
S<:MOI.AbstractSet
283+
} <: AbstractBridge
284+
non_extended::Union{Nothing, CI{F,S}}
285+
end
286+
287+
function bridge_constraint(
288+
::Type{UnextendBridge{T,F,ES,S}},
289+
model::MOI.ModelLike,
290+
f::F,
291+
set::S,
292+
) where {T,F,ES,S}
293+
if isinf(set.value)
294+
return UnextendBridge{T,F,ES,S}(nothing)
295+
end
296+
return UnextendBridge{T,F,ES,S}(MOI.GreaterThan(3))
297+
end

src/sets.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,11 @@ struct GreaterThan{T<:Real} <: AbstractScalarSet
162162
lower::T
163163
end
164164

165+
# guimarqu
166+
struct ExtendedGreaterThan{T<:Real} <: AbstractScalarSet
167+
lower::T
168+
end
169+
165170
"""
166171
LessThan{T <: Real}(upper::T)
167172
@@ -171,6 +176,11 @@ struct LessThan{T<:Real} <: AbstractScalarSet
171176
upper::T
172177
end
173178

179+
# guimarqu
180+
struct ExtendedLessThan{T<:Real} <: AbstractScalarSet
181+
lower::T
182+
end
183+
174184
"""
175185
EqualTo{T <: Number}(value::T)
176186

test/Bridges/Constraint/interval.jl

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ mock = MOIU.MockOptimizer(MOIU.UniversalFallback(MOIU.Model{Float64}()))
1212
config = MOIT.TestConfig()
1313
config_with_basis = MOIT.TestConfig(basis = true)
1414

15+
1516
@testset "Split" begin
1617
T = Float64
1718
bridged_mock = MOIB.Constraint.SplitInterval{T}(mock)
@@ -32,6 +33,46 @@ config_with_basis = MOIT.TestConfig(basis = true)
3233
)
3334
end
3435

36+
@testset "my test" begin
37+
bridged_mock = MOIB.Constraint.SplitInterval{Float64}(mock)
38+
39+
MOIU.set_mock_optimize!(
40+
mock,
41+
(mock::MOIU.MockOptimizer) -> MOIU.mock_optimize!(
42+
mock,
43+
[1.0, -1.0, 1.0],
44+
),
45+
)
46+
47+
# variables: x, y, z
48+
# maxobjective: x + -1y + z
49+
# c1: x in Interval(-Inf, 1.0)
50+
# c2: y in Interval(-1.0, Inf)
51+
# c3: z in Interval(-Inf, Inf)
52+
# c4: 1z <= 1.0
53+
MOIT.solve_one_sided_intervals(bridged_mock, config_with_basis)
54+
55+
println("====== ****** ======")
56+
for (i, b) in bridged_mock.map.single_variable_constraints
57+
@show MOI.get(bridged_mock.model, MOI.ConstraintSet(), b.lower)
58+
@show MOI.get(bridged_mock.model, MOI.ConstraintSet(), b.upper)
59+
end
60+
61+
println("====== ****** ======")
62+
63+
@show MOI.get(
64+
bridged_mock,
65+
MOI.ListOfConstraintIndices{
66+
MOI.SingleVariable,
67+
MOI.Interval{Float64},
68+
}(),
69+
)
70+
71+
72+
73+
end
74+
exit()
75+
3576
@testset "Interval" begin
3677
bridged_mock = MOIB.Constraint.SplitInterval{Float64}(mock)
3778
MOIU.set_mock_optimize!(

0 commit comments

Comments
 (0)