Skip to content
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

Merged
merged 4 commits into from
Aug 22, 2024

Conversation

dlcole3
Copy link
Collaborator

@dlcole3 dlcole3 commented Aug 21, 2024

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 for JuMP.delete for both nodes and edges.

@dlcole3
Copy link
Collaborator Author

dlcole3 commented Aug 21, 2024

It looks like there is not a JuMP.unregister function for graphs. I will add these functions shortly for this same PR

src/optiedge.jl Outdated
Comment on lines 79 to 95
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
Copy link
Member

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.

Copy link
Member

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)

Copy link
Member

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.

Copy link
Collaborator Author

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.

@jalving jalving merged commit ab36f80 into plasmo-dev:main Aug 22, 2024
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants