Skip to content

Commit b1b7e3d

Browse files
author
Documenter.jl
committed
build based on 937226f
1 parent 7e99259 commit b1b7e3d

File tree

18 files changed

+22
-50
lines changed

18 files changed

+22
-50
lines changed

dev/.documenter-siteinfo.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"documenter":{"julia_version":"1.6.7","generation_timestamp":"2025-11-06T16:10:03","documenter_version":"1.15.0"}}
1+
{"documenter":{"julia_version":"1.6.7","generation_timestamp":"2025-11-08T01:24:37","documenter_version":"1.15.0"}}

dev/PlasmoBenders/algorithm/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313
\textrm{s.t.} &\; C_2 x_2 \le d_2 \\
1414
&\; A_1 z + A_2 x_2 \le b \\
1515
&\; z = \bar{x}_2 \quad (\lambda)
16-
\end{align*}\]</p><p>where <span>$\bar{x}$</span> is the solution of the master problem at the last iteration and <span>$\lambda$</span> is the dual variable for the corresponding constraint. Note that the constraint <span>$A_1z + A_2x_2 \le b$</span> is enforced at the subproblem level, which ensures that the solution fo the master problem and subproblem is a feasible solution of the original problem (assuming complete recourse). Since <span>$\theta$</span> is an underestimate of the optimal value of the subproblem, solving the master problem produces a lower bound on the original problem&#39;s solution. Each iteration of the algorithm (assuming complete recourse) results in a feasible solution to the original problem which forms an upper bound on the original optimization problem.</p><p>A visualization of BD for graphs is shown below. Here, the graph on the left has two subgraphs with an edge between them. One of the subgraphs can be treated as the &quot;master&quot; problem, and the other as the &quot;subproblem.&quot; The cost-to-go variable is added to the master problem along with the cutting plane restrictions. The solutions of the master problem are then fixed in the subproblem. These problems are iteratively solved until a solution is reached. </p><p><img src="../../figures/benders_solution.png" alt="BD"/></p><h2 id="Nested-Benders-Decomposition"><a class="docs-heading-anchor" href="#Nested-Benders-Decomposition">Nested Benders Decomposition</a><a id="Nested-Benders-Decomposition-1"></a><a class="docs-heading-anchor-permalink" href="#Nested-Benders-Decomposition" title="Permalink"></a></h2><p>Nested Benders Decomposition (NBD) is similar to BD but includes more than two &quot;stages&quot; of problems. BD can be considered a &quot;two-stage&quot; problem where the master problem is the first stage, which is then linked to a subproblem in a &quot;second&quot; stage. In NBD, There can be additional subproblems, such that the subproblem in stage two can contain complicating variables for an additional subproblem in a third stage, and so forth. This can be visualized as shown below. </p><p><img src="../../figures/nested_benders_solution.png" alt="NBD"/></p><p>In NBD, there is a &quot;forward-pass&quot; where each stage is solved sequentially and primal solutions are shared to and fixed in the next stage. After each stage has been solved, information can be shared to the previous stage in a &quot;backward-pass&quot; to form cutting planes on each previous stage. Many variants of NBD exist, and PlasmoBenders supports two different variants of the backwards pass.</p><h2 id="Implementation-in-PlasmoBenders.jl"><a class="docs-heading-anchor" href="#Implementation-in-PlasmoBenders.jl">Implementation in PlasmoBenders.jl</a><a id="Implementation-in-PlasmoBenders.jl-1"></a><a class="docs-heading-anchor-permalink" href="#Implementation-in-PlasmoBenders.jl" title="Permalink"></a></h2><p>PlasmoBenders.jl implements the NBD algorithm. BD can be considered a specialized case of NBD, such that we only need to implement a single algorithm in the code. There are many additional parameters and techniques that NBD can include, and these are covered in other pages of the documentation. </p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../introduction/">« Introduction</a><a class="docs-footer-nextpage" href="../quickstart/">Quickstart »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.15.0 on <span class="colophon-date" title="Thursday 6 November 2025 16:10">Thursday 6 November 2025</span>. Using Julia version 1.6.7.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
16+
\end{align*}\]</p><p>where <span>$\bar{x}$</span> is the solution of the master problem at the last iteration and <span>$\lambda$</span> is the dual variable for the corresponding constraint. Note that the constraint <span>$A_1z + A_2x_2 \le b$</span> is enforced at the subproblem level, which ensures that the solution fo the master problem and subproblem is a feasible solution of the original problem (assuming complete recourse). Since <span>$\theta$</span> is an underestimate of the optimal value of the subproblem, solving the master problem produces a lower bound on the original problem&#39;s solution. Each iteration of the algorithm (assuming complete recourse) results in a feasible solution to the original problem which forms an upper bound on the original optimization problem.</p><p>A visualization of BD for graphs is shown below. Here, the graph on the left has two subgraphs with an edge between them. One of the subgraphs can be treated as the &quot;master&quot; problem, and the other as the &quot;subproblem.&quot; The cost-to-go variable is added to the master problem along with the cutting plane restrictions. The solutions of the master problem are then fixed in the subproblem. These problems are iteratively solved until a solution is reached. </p><p><img src="../../figures/benders_solution.png" alt="BD"/></p><h2 id="Nested-Benders-Decomposition"><a class="docs-heading-anchor" href="#Nested-Benders-Decomposition">Nested Benders Decomposition</a><a id="Nested-Benders-Decomposition-1"></a><a class="docs-heading-anchor-permalink" href="#Nested-Benders-Decomposition" title="Permalink"></a></h2><p>Nested Benders Decomposition (NBD) is similar to BD but includes more than two &quot;stages&quot; of problems. BD can be considered a &quot;two-stage&quot; problem where the master problem is the first stage, which is then linked to a subproblem in a &quot;second&quot; stage. In NBD, There can be additional subproblems, such that the subproblem in stage two can contain complicating variables for an additional subproblem in a third stage, and so forth. This can be visualized as shown below. </p><p><img src="../../figures/nested_benders_solution.png" alt="NBD"/></p><p>In NBD, there is a &quot;forward-pass&quot; where each stage is solved sequentially and primal solutions are shared to and fixed in the next stage. After each stage has been solved, information can be shared to the previous stage in a &quot;backward-pass&quot; to form cutting planes on each previous stage. Many variants of NBD exist, and PlasmoBenders supports two different variants of the backwards pass.</p><h2 id="Implementation-in-PlasmoBenders.jl"><a class="docs-heading-anchor" href="#Implementation-in-PlasmoBenders.jl">Implementation in PlasmoBenders.jl</a><a id="Implementation-in-PlasmoBenders.jl-1"></a><a class="docs-heading-anchor-permalink" href="#Implementation-in-PlasmoBenders.jl" title="Permalink"></a></h2><p>PlasmoBenders.jl implements the NBD algorithm. BD can be considered a specialized case of NBD, such that we only need to implement a single algorithm in the code. There are many additional parameters and techniques that NBD can include, and these are covered in other pages of the documentation. </p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../introduction/">« Introduction</a><a class="docs-footer-nextpage" href="../quickstart/">Quickstart »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.15.0 on <span class="colophon-date" title="Saturday 8 November 2025 01:24">Saturday 8 November 2025</span>. Using Julia version 1.6.7.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>

dev/PlasmoBenders/api_docs/index.html

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)