-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added JuMP.delete
extension for link constraints
#118
Added JuMP.delete
extension for link constraints
#118
Conversation
It looks like there is not a |
src/optiedge.jl
Outdated
function JuMP.delete(graph::OptiGraph, cref::ConstraintRef) | ||
if typeof(JuMP.owner_model(cref)) == OptiNode{OptiGraph} | ||
error( | ||
"You have passed a node constraint but specified an OptiGraph." * | ||
"Use `JuMP.delete(::OptiNode, ::ConstraintRef)` instead", | ||
) | ||
end | ||
if graph !== source_graph(JuMP.owner_model(cref)) | ||
error( | ||
"The constraint reference you are trying to delete does not" * | ||
"belong to the specified graph", | ||
) | ||
end | ||
_set_dirty(graph) | ||
MOI.delete(JuMP.owner_model(cref), cref) | ||
#TODO: Probably need to delete the edge altogether if it is the only constraint on the edge | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could we make this mirror the node method here? you will need to define. It would be more consistent to delete the constraint from the edge. you till need to define _set_dirty(edge)
as well.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would also say don't delete the edge. it is okay to have edges with no constraints if the user wants to model that way. (we also don't have delete methods for nodes and edges yet anyways)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am hesitant to allow deleting from a graph because more than one graph may contain the same edge. If we require users to specify the edge, it is more apparent (at least to me), that the constraint is deleted from all containing graphs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jalving I just pushed a change where I based it off of optielements now. I removed the JuMP.delete
function I added for graphs and I removed the one for nodes and just replaced it with a general function that applies to OptiElements and added a _set_dirty
method for edges. I think this function should do the same thing as the old JuMP.delete function that was specific for nodes, but now it works for edges too, which, if I understand correctly, is what you were suggesting above.
Added the
JuMP.delete
extension for link constraints so that you can delete a link constraint on an edge from a graph. I also added some tests forJuMP.delete
for both nodes and edges.