@@ -110,16 +110,37 @@ function MOI.delete(o::Optimizer, vi::MOI.VariableIndex)
110
110
msg = " Can not delete variable while model contains constraints!"
111
111
throw (MOI. DeleteNotAllowed (vi, msg))
112
112
end
113
- allow_modification (o)
114
113
if ! haskey (o. inner. vars, VarRef (vi. value))
115
114
throw (MOI. InvalidIndex (vi))
116
115
end
117
- delete! (o. binbounds, vi)
116
+ allow_modification (o)
117
+ cref = ConsRef (vi. value)
118
+ # Delete integrality constraints
119
+ v = var (o, vi)
120
+ var_type = SCIPvarGetType (v)
121
+ if var_type == SCIP_VARTYPE_BINARY
122
+ delete! (o. constypes[MOI. VariableIndex, MOI. ZeroOne], cref)
123
+ delete! (o. binbounds, vi)
124
+ elseif var_type == SCIP_VARTYPE_INTEGER
125
+ delete! (o. constypes[MOI. VariableIndex, MOI. Integer], cref)
126
+ end
127
+ # Delete bound constraints
128
+ type = get (o. bound_types, vi, nothing )
129
+ if type == _kSCIP_EQUAL_TO
130
+ delete! (o. constypes[MOI. VariableIndex, MOI. EqualTo{Float64}], cref)
131
+ elseif type == _kSCIP_INTERVAL
132
+ delete! (o. constypes[MOI. VariableIndex, MOI. Interval{Float64}], cref)
133
+ elseif type == _kSCIP_LESS_THAN
134
+ delete! (o. constypes[MOI. VariableIndex, MOI. LessThan{Float64}], cref)
135
+ elseif type == _kSCIP_GREATER_THAN
136
+ delete! (o. constypes[MOI. VariableIndex, MOI. GreaterThan{Float64}], cref)
137
+ elseif type == _kSCIP_LESS_AND_GREATER_THAN
138
+ delete! (o. constypes[MOI. VariableIndex, MOI. LessThan{Float64}], cref)
139
+ delete! (o. constypes[MOI. VariableIndex, MOI. GreaterThan{Float64}], cref)
140
+ end
118
141
delete! (o. bound_types, vi)
119
- delete! (o. reference, var (o, vi) )
142
+ delete! (o. reference, v )
120
143
delete (o. inner, VarRef (vi. value))
121
- # FIXME (odow): delete the associated ConstraintIndex
122
- delete! (o. bound_types, vi)
123
144
o. name_to_variable = nothing
124
145
return nothing
125
146
end
0 commit comments