-
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
Can Plasmo be used for nested decomposition (in principle, at least)? #109
Comments
Hi @sambuddhac, thanks for your interest in the package. @dlcole3 is actually in the process of creating a nested decomposition algorithm for Plasmo.jl (not yet public). The implementation should help elucidate how to write meta-algorithms with optigraphs in practice. PlasmoAlgorithms.jl uses an old version of Plasmo.jl and it would take some work to port the algorithms to the new version. We have not been able to get in touch with the original PlasmoAlgorithms.jl developer, but we are interested in creating an official PlasmoAlgorithms.jl package as part of the Plasmo organization. As to your actual question, we now suggest using subgraphs to model any kind of nested structure. You can think of a graph as the actual subproblem in this way. For example, you could do something like follows: using Plasmo
graph = OptiGraph(name=:parent)
daughter1 = add_subgraph(graph, name=:daughter1)
daughter2 = add_subgraph(graph, name=:daughter2)
granddaughter1 = add_subgraph(daughter1, name=:granddaughter1)
granddaughter2 = add_subgraph(daughter2, name=:granddaughter2) Then you would add nodes and edges to model each graph and use edges to create constraints between parent and children graphs. You can always make a subgraph with a single node if you prefer to model that way. While this is nice for developing the model structure, there may still be limitations when writing an algorithm. You may want to create your own subproblem graphs by copying individual graphs (for instance, to avoid adding cuts to the modeled optigraph). We still need to write a proper copy method for optigraphs. We also automatically copy child graph data into the parent optimizer when optimizing a parent graph. This may not always be the preferred behavior and we should add an option to make it optional. If you are interested in developing some decomposition algorithms we would be happy to help out. We just finished a major refactor and are currently looking into a standard interface to develop meta-algorithms with optigraphs. |
Hi @jalving Thank you so much for your detailed reply. I am very happy and willing to collaborate at developing the generalized nested graph decomposition and port and upgrade the materials in PlasmoAlgorithms.jl to integrate with Plasmo.jl. I am in the process of finalizing a couple IEEE Transaction on Power Systems paper drafts that use similar ideas. To that effect, I am translating a bunch of my older C++ codes to Julia and making use of Plasmo.jl. I am happy to contribute the generic version of those to Plasmo. I might need your help regarding Plasmo specific technical matters, which aren't my strong points. But, other than that, extremely happy to collaborate and contribute. Thanks again for your detailed help. I'll start it off from here. |
Hi @sambuddhac, Glad you are interested in Plasmo and using it for decomposition. As @jalving mentioned, I am currently working on creating a nested decomposition approach for Plasmo.jl. If you are interested in chatting some more about the implementation and motivation for the decomposition approach, or if you just want some more details on the Plasmo functionality, I would be happy to meet. It sounds like there may be some mutual interest on these types of problems. You are welcome to email me at [email protected] if it is of interest to you. Best, |
Dear @dlcole3 Thanks bunches for your reply. Let's continue then our discussion on the email thread, which we've already started. Sam |
Hi Plasmo developers,
I just came across one of the older issues that asks about decomposition support in Plasmo.jl and also read the developer's reply. I am wondering if a combo of Plasmo.jl and PlasmoAlgorithms.jl can be used for nested decomposition. i.e. in other words, can it be possible for each of the nodes of the OptiGraph encapsulate an entire "daughter" OptiGraph (and the nodes of the "daughter" OptiGraph to in turn encapsulate "granddaughter" OptiGraphs and so on ... ) so that, nested decomposition can be performed between those?
Thanks very much for your reply, in advance !!!
The text was updated successfully, but these errors were encountered: