@@ -82,7 +82,7 @@ function init_constraint!(
82
82
constraint. strict_rhs = set. set. upper - fct. constant
83
83
constraint. is_strict = true
84
84
is_no_variable_constraint (constraint) && return fct. constant < set. set. upper
85
-
85
+ recompute_lc_extrema! (com, constraint, fct)
86
86
return true
87
87
end
88
88
@@ -100,6 +100,7 @@ function init_constraint!(
100
100
) where {T<: Real }
101
101
constraint. rhs = set. upper - fct. constant
102
102
is_no_variable_constraint (constraint) && return fct. constant <= set. upper
103
+ recompute_lc_extrema! (com, constraint, fct)
103
104
return true
104
105
end
105
106
@@ -111,9 +112,14 @@ function init_constraint!(
111
112
) where {T<: Real }
112
113
constraint. rhs = set. value - fct. constant
113
114
is_no_variable_constraint (constraint) && return fct. constant == set. value
115
+ recompute_lc_extrema! (com, constraint, fct)
114
116
return true
115
117
end
116
118
119
+ function changed! (com:: CS.CoM , constraint:: LinearConstraint , fct, set)
120
+ recompute_lc_extrema! (com, constraint, fct)
121
+ end
122
+
117
123
"""
118
124
get_new_extrema_and_sum(search_space, vidx, i, terms, full_min, full_max, pre_mins, pre_maxs)
119
125
@@ -232,8 +238,7 @@ function prune_constraint!(
232
238
search_space = com. search_space
233
239
rhs = constraint. rhs
234
240
235
- # compute max and min values for each index
236
- recompute_lc_extrema! (com, constraint, fct)
241
+ # reuse calculated max and min values for each index
237
242
maxs = constraint. maxs
238
243
mins = constraint. mins
239
244
pre_maxs = constraint. pre_maxs
@@ -530,7 +535,6 @@ function is_constraint_solved(
530
535
fct:: SAF{T} ,
531
536
set:: MOI.LessThan{T} ,
532
537
) where T
533
- recompute_lc_extrema! (com, constraint, fct)
534
538
sum_maxs = sum (constraint. maxs)
535
539
return sum_maxs <= MOI. constant (set)
536
540
end
@@ -551,7 +555,6 @@ function is_constraint_solved(
551
555
fct:: SAF{T} ,
552
556
set:: Strictly{T, MOI.LessThan{T}} ,
553
557
) where T
554
- recompute_lc_extrema! (com, constraint, fct)
555
558
sum_maxs = sum (constraint. maxs)
556
559
return sum_maxs < MOI. constant (set)
557
560
end
@@ -611,7 +614,6 @@ function is_constraint_violated(
611
614
)
612
615
end
613
616
# check if it can be feasible using the minimum sum
614
- recompute_lc_extrema! (com, constraint, fct)
615
617
return ! min_sum_feasible (com, sum (constraint. mins), set)
616
618
end
617
619
@@ -629,4 +631,14 @@ function min_sum_feasible(com, min_sum, set::Strictly{T, MOI.LessThan{T}}) where
629
631
return get_approx_discrete (min_sum) < get_approx_discrete (MOI. constant (set))
630
632
end
631
633
return min_sum <= MOI. constant (set) + com. options. atol
634
+ end
635
+
636
+ function reverse_pruning_constraint! (
637
+ com:: CoM ,
638
+ constraint:: LinearConstraint ,
639
+ fct:: SAF{T} ,
640
+ set:: Union{MOI.LessThan, MOI.EqualTo, Strictly{T, MOI.LessThan{T}}} ,
641
+ backtrack_id:: Int ,
642
+ ) where {T <: Real }
643
+ recompute_lc_extrema! (com, constraint, fct)
632
644
end
0 commit comments