Skip to content

Commit 8f44aa3

Browse files
committed
support lazy constraints in plasmo
1 parent 8592344 commit 8f44aa3

File tree

3 files changed

+52
-1
lines changed

3 files changed

+52
-1
lines changed

src/moi_backend_graph.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,18 @@ function MOI.set(graph_backend::GraphBackend, attr::MOI.AbstractOptimizerAttribu
103103
return nothing
104104
end
105105

106-
# TODO: properly support variable and constraint attributes
107106
function MOI.get(
108107
graph_backend::GraphBackend, attr::MOI.VariablePrimalStart, idx::MOI.VariableIndex
109108
)
110109
return MOI.get(graph_backend.model_cache, attr, idx)
111110
end
112111

112+
#TODO: properly support variable and constraint attributes
113113
#MOI.set(graph_backend::GraphBackend,attr::MOI.AnyAttribute,args...) = MOI.set(graph_backend.optimizer,attr,args...)
114+
114115
MOIU.state(graph_backend::GraphBackend) = graph_backend.state
116+
117+
# TODO: decide whether we support graph modes
115118
#MOIU.mode(graph_backend::GraphBackend) = graph_backend.mode
116119

117120
"""

src/optigraph.jl

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,13 @@ function add_node!(graph::OptiGraph, optinode::OptiNode)
223223
return optinode
224224
end
225225

226+
function add_node!(graph::OptiGraph, m::JuMP.Model, label::String)
227+
optinode = add_node!(graph)
228+
set_model(optinode, m)
229+
optinode.label = label
230+
return optinode
231+
end
232+
226233
"""
227234
optinodes(graph::OptiGraph)::Vector{OptiNode}
228235
@@ -927,6 +934,19 @@ function JuMP.start_value(graph::OptiGraph, variable::JuMP.VariableRef)
927934
return MOI.get(backend(graph), MOI.VariablePrimalStart(), var_idx)
928935
end
929936

937+
function JuMP.set_attribute(
938+
graph::OptiGraph,
939+
attr::MOI.AbstractModelAttribute,
940+
value
941+
)
942+
MOI.set(graph, attr, value)
943+
return
944+
end
945+
946+
function JuMP.solver_name(graph::OptiGraph)
947+
return MOI.get(graph.moi_backend, MOI.SolverName())
948+
end
949+
930950
"""
931951
JuMP.termination_status(graph::OptiGraph)
932952
@@ -936,6 +956,26 @@ function JuMP.termination_status(graph::OptiGraph)
936956
return MOI.get(graph.moi_backend, MOI.TerminationStatus())
937957
end
938958

959+
function JuMP.primal_status(graph::OptiGraph)
960+
return MOI.get(graph.moi_backend, MOI.PrimalStatus())
961+
end
962+
963+
function JuMP.dual_status(graph::OptiGraph)
964+
return MOI.get(graph.moi_backend, MOI.DualStatus())
965+
end
966+
967+
function JuMP.callback_value(cb_data, x::GenericVariableRef, graph::OptiGraph)
968+
return MOI.get(
969+
graph.moi_backend.optimizer,
970+
MOI.CallbackVariablePrimal(cb_data),
971+
index(x),
972+
)
973+
end
974+
975+
function JuMP.callback_node_status(cb_data, graph::OptiGraph)
976+
return MOI.get(graph.moi_backend.optimizer, MOI.CallbackNodeStatus(cb_data))
977+
end
978+
939979
####################################
940980
#Print Functions
941981
####################################

src/optimizer_interface.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,14 @@ function MOI.set(graph::OptiGraph, attr::MOI.AbstractModelAttribute, value)
355355
return MOI.set(backend(graph), attr, value)
356356
end
357357

358+
function MOI.submit(
359+
graph::OptiGraph,
360+
cb::MOI.LazyConstraint,
361+
con::ScalarConstraint,
362+
)
363+
return MOI.submit(graph.moi_backend.optimizer, cb, moi_function(con.func), con.set)
364+
end
365+
358366
#######################################################
359367
#Optinode optimizer interface
360368
#######################################################

0 commit comments

Comments
 (0)