Skip to content

Commit 8675483

Browse files
authored
Updated backend to use orderedset instead of vector (#142)
Co-authored-by: David L. Cole <[email protected]>
1 parent b3081d5 commit 8675483

File tree

1 file changed

+12
-18
lines changed

1 file changed

+12
-18
lines changed

src/backends/moi_backend.jl

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ mutable struct GraphMOIBackend <: MOI.AbstractOptimizer
9292
graph_to_element_map::GraphToElementMap
9393

9494
# map of nodes and edges to variables and constraints.
95-
node_variables::OrderedDict{OptiNode,Vector{MOI.VariableIndex}}
96-
element_constraints::OrderedDict{OptiElement,Vector{MOI.ConstraintIndex}}
95+
node_variables::OrderedDict{OptiNode,OrderedSet{MOI.VariableIndex}}
96+
element_constraints::OrderedDict{OptiElement,OrderedSet{MOI.ConstraintIndex}}
9797
element_attributes::OrderedDict{Tuple{OptiObject,MOI.AbstractModelAttribute},Any}
9898
operator_map::OrderedDict{Tuple{OptiObject,MOI.UserDefinedFunction},Symbol}
9999
end
@@ -245,10 +245,10 @@ end
245245

246246
function _add_node(backend::GraphMOIBackend, node::OptiNode)
247247
if !haskey(backend.node_variables, node)
248-
backend.node_variables[node] = MOI.VariableIndex[]
248+
backend.node_variables[node] = OrderedSet{MOI.VariableIndex}()
249249
end
250250
if !haskey(backend.element_constraints, node)
251-
backend.element_constraints[node] = MOI.ConstraintIndex[]
251+
backend.element_constraints[node] = OrderedSet{MOI.ConstraintIndex}()
252252
end
253253
return nothing
254254
end
@@ -264,7 +264,7 @@ end
264264

265265
function _add_edge(backend::GraphMOIBackend, edge::OptiEdge)
266266
if !haskey(backend.element_constraints, edge)
267-
backend.element_constraints[edge] = MOI.ConstraintIndex[]
267+
backend.element_constraints[edge] = OrderedSet{MOI.ConstraintIndex}()
268268
end
269269
return nothing
270270
end
@@ -472,10 +472,7 @@ end
472472
function MOI.delete(backend::GraphMOIBackend, nvref::NodeVariableRef)
473473
index = backend.element_to_graph_map[nvref]
474474
MOI.delete(backend.moi_backend, index)
475-
476-
# delete from list
477-
list_index = findall(x -> x == index, backend.node_variables[nvref.node])
478-
deleteat!(backend.node_variables[nvref.node], list_index)
475+
delete!(backend.node_variables[nvref.node], index)
479476

480477
# delete dictionary entries
481478
delete!(backend.graph_to_element_map.var_map, backend.element_to_graph_map[nvref])
@@ -487,10 +484,7 @@ function MOI.delete(backend::GraphMOIBackend, cref::ConstraintRef)
487484
# delete backend index
488485
index = backend.element_to_graph_map[cref]
489486
MOI.delete(backend.moi_backend, index)
490-
491-
# delete from list
492-
list_index = findall(x -> x == index, backend.element_constraints[cref.model])
493-
deleteat!(backend.element_constraints[cref.model], list_index)
487+
delete!(backend.element_constraints[cref.model], index)
494488

495489
# delete dicionary entries
496490
delete!(backend.graph_to_element_map.con_map, backend.element_to_graph_map[cref])
@@ -543,7 +537,7 @@ function MOI.add_variable(backend::GraphMOIBackend, vref::NodeVariableRef)
543537

544538
# create key for node if necessary
545539
if !haskey(backend.node_variables, vref.node)
546-
backend.node_variables[vref.node] = MOI.VariableIndex[]
540+
backend.node_variables[vref.node] = OrderedSet{MOI.VariableIndex}()
547541
end
548542
push!(backend.node_variables[vref.node], graph_var_index)
549543
return graph_var_index
@@ -571,10 +565,10 @@ function MOI.add_constrained_variable(
571565

572566
# create key for node if necessary
573567
if !haskey(backend.node_variables, vref.node)
574-
backend.node_variables[vref.node] = MOI.VariableIndex[]
568+
backend.node_variables[vref.node] = OrderedSet{MOI.VariableIndex}()
575569
end
576570
if !haskey(backend.element_constraints, vref.node)
577-
graph_backend.element_constraints[vref.node] = MOI.ConstraintIndex[]
571+
graph_backend.element_constraints[vref.node] = OrderedSet{MOI.ConstraintIndex}()
578572
end
579573
push!(backend.node_variables[vref.node], graph_var_index)
580574
push!(backend.element_constraints[vref.node], graph_con_index)
@@ -589,7 +583,7 @@ function MOI.add_constraint(
589583

590584
# create key for element if necessary
591585
if !haskey(backend.element_constraints, cref.model)
592-
graph_backend.element_constraints[cref.model] = MOI.ConstraintIndex[]
586+
graph_backend.element_constraints[cref.model] = OrderedSet{MOI.ConstraintIndex}()
593587
end
594588

595589
# create the constraint
@@ -869,7 +863,7 @@ function _copy_node_to_backend!(backend::GraphMOIBackend, node::OptiNode)
869863

870864
# copy constraints and constraint attributes
871865
# NOTE: for now, we split between variable and non-variable, but they do the same thing.
872-
# eventually, we might try doing something more similar to MOI `default_copy_to` where
866+
# eventually, we might try doing something more similar to MOI `default_copy_to` whereF
873867
# we try to constrain variables on creation.
874868
all_constraint_types = MOI.get(node, MOI.ListOfConstraintTypesPresent())
875869
variable_constraint_types = filter(all_constraint_types) do (F, S)

0 commit comments

Comments
 (0)