@@ -51,6 +51,104 @@ function _test_hyperrectangle(T)
51
51
return
52
52
end
53
53
54
+ function test_dual_objective_value_open_interval_Interval ()
55
+ inner = MOI. Utilities. UniversalFallback (MOI. Utilities. Model {Float64} ())
56
+ model = MOI. Utilities. MockOptimizer (inner)
57
+ # -Inf <= x[1] - 1.1 <= Inf
58
+ # -Inf <= x[2] - 1.2 <= 2.1
59
+ # -2.2 <= x[3] + 1.3 <= Inf
60
+ # -2.3 <= x[4] + 1.4 <= 2.4
61
+ x = MOI. add_variables (model, 4 )
62
+ f = x .+ [- 1.1 , - 1.2 , 1.3 , 1.4 ]
63
+ set = MOI. Interval .([- Inf , - Inf , - 2.2 , - 2.3 ], [Inf , 2.1 , Inf , 2.4 ])
64
+ c = MOI. add_constraint .(model, f, set)
65
+ for (dual, obj) in [
66
+ [0.0 , 0.0 , 0.0 , 0.0 ] => 0.0 ,
67
+ # d[1]: -(-1.1) = 1.1
68
+ [- 2.0 , 0.0 , 0.0 , 0.0 ] => - 2.2 ,
69
+ [- 1.0 , 0.0 , 0.0 , 0.0 ] => - 1.1 ,
70
+ [1.0 , 0.0 , 0.0 , 0.0 ] => 1.1 ,
71
+ [2.0 , 0.0 , 0.0 , 0.0 ] => 2.2 ,
72
+ # d[2]: -(-1.2 - 2.1) = 3.3
73
+ [0.0 , - 2.0 , 0.0 , 0.0 ] => - 6.6 ,
74
+ [0.0 , - 1.0 , 0.0 , 0.0 ] => - 3.3 ,
75
+ [0.0 , 1.0 , 0.0 , 0.0 ] => 3.3 ,
76
+ [0.0 , 2.0 , 0.0 , 0.0 ] => 6.6 ,
77
+ # d[3]: -(1.3 - -2.2) = -3.5
78
+ [0.0 , 0.0 , - 2.0 , 0.0 ] => 7.0 ,
79
+ [0.0 , 0.0 , - 1.0 , 0.0 ] => 3.5 ,
80
+ [0.0 , 0.0 , 1.0 , 0.0 ] => - 3.5 ,
81
+ [0.0 , 0.0 , 2.0 , 0.0 ] => - 7.0 ,
82
+ # d[4]: -(1.4 - -2.3) = -3.7
83
+ # d[4]: -(1.4 - 2.4) = 1.0
84
+ [0.0 , 0.0 , 0.0 , - 2.0 ] => - 2.0 ,
85
+ [0.0 , 0.0 , 0.0 , - 1.0 ] => - 1.0 ,
86
+ [0.0 , 0.0 , 0.0 , 1.0 ] => - 3.7 ,
87
+ [0.0 , 0.0 , 0.0 , 2.0 ] => - 7.4 ,
88
+ #
89
+ [1.0 , 1.0 , 1.0 , 1.0 ] => - 2.8 ,
90
+ [- 1.0 , - 1.0 , - 1.0 , - 1.0 ] => - 1.9 ,
91
+ ]
92
+ MOI. set (model, MOI. ObjectiveSense (), MOI. MIN_SENSE)
93
+ MOI. set .(model, MOI. ConstraintDual (), c, dual)
94
+ d = MOI. Utilities. get_fallback (model, MOI. DualObjectiveValue (), Float64)
95
+ @test isapprox (d, obj)
96
+ MOI. set .(model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
97
+ d = MOI. Utilities. get_fallback (model, MOI. DualObjectiveValue (), Float64)
98
+ @test isapprox (d, - obj)
99
+ end
100
+ return
101
+ end
102
+
103
+ function test_dual_objective_value_open_interval_Hyperrectangle ()
104
+ inner = MOI. Utilities. UniversalFallback (MOI. Utilities. Model {Float64} ())
105
+ model = MOI. Utilities. MockOptimizer (inner)
106
+ # -Inf <= x[1] - 1.1 <= Inf
107
+ # -Inf <= x[2] - 1.2 <= 2.1
108
+ # -2.2 <= x[3] + 1.3 <= Inf
109
+ # -2.3 <= x[4] + 1.4 <= 2.4
110
+ x = MOI. add_variables (model, 4 )
111
+ f = MOI. Utilities. vectorize (x .+ [- 1.1 , - 1.2 , 1.3 , 1.4 ])
112
+ set = MOI. HyperRectangle ([- Inf , - Inf , - 2.2 , - 2.3 ], [Inf , 2.1 , Inf , 2.4 ])
113
+ c = MOI. add_constraint (model, f, set)
114
+ for (dual, obj) in [
115
+ [0.0 , 0.0 , 0.0 , 0.0 ] => 0.0 ,
116
+ # d[1]: -(-1.1) = 1.1
117
+ [- 2.0 , 0.0 , 0.0 , 0.0 ] => - 2.2 ,
118
+ [- 1.0 , 0.0 , 0.0 , 0.0 ] => - 1.1 ,
119
+ [1.0 , 0.0 , 0.0 , 0.0 ] => 1.1 ,
120
+ [2.0 , 0.0 , 0.0 , 0.0 ] => 2.2 ,
121
+ # d[2]: -(-1.2 - 2.1) = 3.3
122
+ [0.0 , - 2.0 , 0.0 , 0.0 ] => - 6.6 ,
123
+ [0.0 , - 1.0 , 0.0 , 0.0 ] => - 3.3 ,
124
+ [0.0 , 1.0 , 0.0 , 0.0 ] => 3.3 ,
125
+ [0.0 , 2.0 , 0.0 , 0.0 ] => 6.6 ,
126
+ # d[3]: -(1.3 - -2.2) = -3.5
127
+ [0.0 , 0.0 , - 2.0 , 0.0 ] => 7.0 ,
128
+ [0.0 , 0.0 , - 1.0 , 0.0 ] => 3.5 ,
129
+ [0.0 , 0.0 , 1.0 , 0.0 ] => - 3.5 ,
130
+ [0.0 , 0.0 , 2.0 , 0.0 ] => - 7.0 ,
131
+ # d[4]: -(1.4 - -2.3) = -3.7
132
+ # d[4]: -(1.4 - 2.4) = 1.0
133
+ [0.0 , 0.0 , 0.0 , - 2.0 ] => - 2.0 ,
134
+ [0.0 , 0.0 , 0.0 , - 1.0 ] => - 1.0 ,
135
+ [0.0 , 0.0 , 0.0 , 1.0 ] => - 3.7 ,
136
+ [0.0 , 0.0 , 0.0 , 2.0 ] => - 7.4 ,
137
+ #
138
+ [1.0 , 1.0 , 1.0 , 1.0 ] => - 2.8 ,
139
+ [- 1.0 , - 1.0 , - 1.0 , - 1.0 ] => - 1.9 ,
140
+ ]
141
+ MOI. set (model, MOI. ObjectiveSense (), MOI. MIN_SENSE)
142
+ MOI. set (model, MOI. ConstraintDual (), c, dual)
143
+ d = MOI. Utilities. get_fallback (model, MOI. DualObjectiveValue (), Float64)
144
+ @test isapprox (d, obj)
145
+ MOI. set (model, MOI. ObjectiveSense (), MOI. MAX_SENSE)
146
+ d = MOI. Utilities. get_fallback (model, MOI. DualObjectiveValue (), Float64)
147
+ @test isapprox (d, - obj)
148
+ end
149
+ return
150
+ end
151
+
54
152
end # module TestResults
55
153
56
154
TestResults. runtests ()
0 commit comments