ベンダーズ分解法のソースを表示
←
ベンダーズ分解法
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
{{More footnotes|date=2020-09}} '''ベンダーズ分解法'''(ベンダーズぶんかいほう、ベンダース分解法、{{Lang-en-short|Benders decomposition, Benders' decomposition}})とは、[[数理最適化]]において特別な[[ブロック行列|ブロック構造]]を持つ大規模[[線形計画問題]]に対する解法の一種である。このブロック構造は{{仮リンク|確率計画法|en|stochastic programming}}においてしばしば見られる構造である。{{仮リンク|ヤコブス・F・ベンダーズ|en|Jacques F. Benders}}に因んで名づけられた。 ベンダーズ分解法の戦略としては問題の分割と支配が挙げられる。すなわち、ベンダーズ分解法において元の問題の変数は二つの部分集合に分割され、第一段階として主問題を解く。続いてその情報を用いて部分問題を解く。もし、今解いた部分問題によって真の最適解が求まっていないことが判明すれば、ベンダーズカット{{Efn|{{Lang-en-short|Benders cuts}}}}と呼ばれる新たな制約を主問題に加えて、再び主問題を解き直す。ベンダーズ分解法は反復によって新たな制約を付け加えて行く手法であることから、{{仮リンク|ダンツィーグ・ウルフ分解法|en|Dantzig–Wolfe decomposition}}に対する[[列生成法]]と対比して行生成的手法である。 == 方法 == 問題は二つ以上の段階から構成されている。ある段階における問題はそれ以前の段階によって得られた情報を用いて手続きが行われる。最初の段階で解く問題はその問題に関する情報を使用せずに解くことから始める。第一段階では主問題を解く。続いて部分問題を解く。 そして、その部分問題で得られた解の情報を主問題に加える。もし、部分問題によって得られた解が最適性の条件を満たさなければ、主問題に制約として加える。そして主問題を再び解き直す。 主問題の制約は部分問題を解くことで得られる情報から構成される[[凸集合]]によって表現される。主問題の実行可能空間は新たに制約が加われば縮小されるため、各反復において主問題を解き直すことで元の問題の下界を得られる。 ベンダーズ分解法は大規模なブロック角構造を持つ問題に対して適用されている。 == 定式化 == 以下のような構造を持つ問題が与えられたとする: :<math> \begin{align} & \text{minimize} && \mathbf{c}^\mathrm{T}\mathbf{x} + \mathbf{d}^\mathrm{T}\mathbf{y} \\ & \text{subject to} && A \mathbf{x} + B \mathbf{y} \geq \mathbf{b} \\ & && \mathbf{y} \in Y \\ & && \mathbf{x} \geq \mathbf{0} \end{align}</math> ただし、<math>A, B</math> は制約の係数行列を表し、<math>Y</math> は <math>\mathbf{y}</math> の実行可能解を表す。今 <math>\mathbf{y}</math> を一種の定数 <math>\mathbf{\bar{y}} \in Y</math> とみなすと、問題は以下のように表される: :<math> \begin{align} & \text{minimize} && \mathbf{c}^\mathrm{T}\mathbf{x} + \mathbf{d}^\mathrm{T}\mathbf{\bar{y}} \\ & \text{subject to} && A \mathbf{x} \geq \mathbf{b} - B \mathbf{\bar{y}} \\ & && \mathbf{x} \geq \mathbf{0} \end{align} </math> 上記の問題の双対問題は以下の通りである: :<math> \begin{align} & \text{maximize} && (\mathbf{b} - B \mathbf{\bar{y}})^\mathrm{T} \mathbf{u} + \mathbf{d}^\mathrm{T}\mathbf{\bar{y}} \\ & \text{subject to} && A^\mathrm{T} \mathbf{u} \leq \mathbf{c} \\ & && \mathbf{u} \geq \mathbf{0} \end{align} </math> 元の問題の双対問題から、元の問題は以下のminmax型の問題に書き換えることができる: :<math> \min_{\mathbf{y} \in Y} \left[ \mathbf{d}^\mathrm{T}\mathbf{y} + \max_{\mathbf{u} \geq \mathbf{0}} \left\{ (\mathbf{b} - B \mathbf{y})^\mathrm{T} \mathbf{u} \mid A^\mathrm{T} \mathbf{u} \leq \mathbf{c} \right\} \right]. </math> ベンダーズ分解法では反復手続きにおいてカット集合によって <math>\mathbf{y}</math> を逐次求めて、双対問題の解を生成していく。minmax型の主問題では、<math>(\mathbf{u}, \mathbf{y})</math> の値のみ求まるが、最適な <math>\mathbf{\bar{y}}</math> が求まれば、元の問題において <math>\mathbf{\bar{y}}</math> を最適解で固定して解くことで最適な <math>\mathbf{\bar{x}}</math> も求まる。 === 主問題の定式化 === 一段階目は規模の小さな最小化問題を解くことから始まる: :<math> \begin{align} & \text{minimize} && \mathbf{z} \\ & \text{subject to} && \{\text{cuts}\} \\ & && \mathbf{y} \in Y \\ \end{align}</math> 初期における上記のカット集合は空である。上記の主問題を解くことで元の問題の最適解を推測していく。この問題の目的関数 <math>\mathbf{z}</math> はいくらでも小さくとることができ、<math>\mathbf{y}</math> も任意の実行可能解とする。 カット集合は主問題の双対問題を解くことで各反復ごとに付け加えられる。カットが与えられることで、主問題において実行可能な <math>\mathbf{y}</math> が求まっていくと同時に最適な <math>\mathbf{y}</math> が最終的には求まる。各反復において <math>\mathbf{y}</math>、<math>\mathbf{z}</math>、<math>\mathbf{x}</math> を交互に求めていく。 反復開始前は <math>z</math> に関する制約が無いことから、各反復において <math>z</math> に関する制約を追加していくことで、実行可能空間を縮小していく。もし、ある <math>\mathbf{\bar{y}}</math> の下で主問題の最適値と限定問題の最適値が一致すれば、双対定理より最適解が求まったと判定することができる。 === 部分問題の定式化 === 部分問題を解くことで主問題に <math>\mathbf{\bar{y}}</math> を与え、minmax型の定式化から、その双対問題を解くことができる。 双対問題は以下のように定式化される: :<math> \begin{align} & \text{maximize} && (\mathbf{b} - B \mathbf{\bar{y}})^\mathrm{T} \mathbf{u} + \mathbf{d}^\mathrm{T}\mathbf{\bar{y}} \\ & \text{subject to} && A^\mathrm{T} \mathbf{u} \leq \mathbf{c} \\ & && \mathbf{u} \geq \mathbf{0} \end{align} </math> 主問題は各反復において下界を与え、部分問題は上界を与える。<math>\mathbf{\bar{y}}</math> の下で部分問題を解くことによって端点 <math>\mathbf{\bar{u}}</math>、{{仮リンク|後退錐|en|recession cone}}に含まれる端線 <math>\mathbf{\bar{u}}</math> が求まるか、部分問題が実行不可能であることが判明する。 == 手続き == ベンダーズ分解法は主問題と部分問題を交互に解き続ける手続きを行う。各反復において主問題と部分問題の最適値は元の問題の最適値の上界と下界を与え、反復により上界と下界の差が縮まる。部分問題を解くことで主問題の制約条件を新たに求める、もしくは元の問題に最適解をもたないことを判定することができる。このことからベンダーズ分解法は問題が最適解を持たない、あるいは上界と下界のギャップが十分に小さくなれば終了する。各反復において、解 <math>\mathbf{\bar{x}}</math> は主問題により求まった <math>\mathbf{\bar{y}}</math> を定数とみなして限定問題を解くことで求まる。 より正確にはベンダーズ分解法は上界(上限)を <math>\inf</math>、下界(下限)を <math>-\inf</math> とし、主問題のカット集合は空として始める。続いて手続きにより <math>\mathbf{\bar{y}} \in Y</math> が選択される。反復手順を通じて上界と下界の差が <math>\epsilon</math> より小さくなる、あるいは最適解が存在しないことが判明すればアルゴリズムは終了する。 各反復における1つの手続きは部分問題を解いて求まった <math>\mathbf{\bar{y}}</math> を用いて上界を更新することから始まる。また部分問題を解くことで3つの事実が導かれる。 一つ目は、部分問題が非有界で最適値が得られない場合である。[[双対定理]]より、双対問題が非有界ならば、すなわち主問題は実行不可能である。これは <math>\mathbf{\bar{y}}</math> の下では <math>A \mathbf{x} + B \mathbf{\bar{y}} \geq \mathbf{b}</math> を満たすような <math>\mathbf{x} \geq \mathbf{0}</math> が存在しないことを意味する。この <math>\mathbf{\bar{y}}</math> は 主問題から得られた端線 <math>\mathbf{\bar{u}}</math> を用いて部分問題の制約として <math>(\mathbf{b} - B \mathbf{y})^\mathrm{T} \mathbf{\bar{u}} \leq \mathbf{0}</math> を追加する手続きを行う。 二つ目は、部分問題が実行不可能となる場合である。双対実行可能空間が空であり、この場合主問題は実行不可能あるいは非有界でいくらでも大きい値をとり得ることが考えられる。主問題がどちらの場合でも、ベンダーズ分解法は終了する。 三つ目は、部分問題に最適値が存在する場合である。線形計画問題の双対定理より、部分問題の最適値は元の問題において <math>\mathbf{\bar{y}}</math> を固定した問題の最適値と一致する。このことから、部分問題の最適値が今までに見つかった上界より小さければ、上界は更新される。端点 <math>\mathbf{\bar{u}}</math> が求まることで、主問題の新たな制約 <math> z \geq (\mathbf{b} - B \mathbf{y})^\mathrm{T} \mathbf{\bar{u}} + \mathbf{d}^\mathrm{T}\mathbf{y} </math> が目的関数に対して有効に働く。<math>\mathbf{\bar{y}}</math> が最適解でなければ、新たな制約の追加により主問題の目的関数 <math>z</math> は厳密に増大する。 最後に、各反復において新たな制約を主問題に加えて、それによって得られる新たな最適解を生成する。得られた解 <math>(\mathbf{\bar{y}}, z)</math> によって下界は更新される。もし上界と下界の差が許容誤差 <math>\epsilon</math> より小さくなれば、反復手順は終了し、<math>\mathbf{\bar{y}}</math> を元の問題に代入して、その問題を解くことで <math>\mathbf{\bar{x}}</math> は求まる。許容誤差の条件を満たさなければ、反復は続けられる。 == 脚注 == {{脚注ヘルプ}} === 注釈 === {{Notelist}} === 出典 === {{Reflist}} == 参考文献 == * Benders, J. F. (Sept. 1962), "[https://link.springer.com/article/10.1007%2FBF01386316 Partitioning procedures for solving mixed-variables programming problems]", ''[[:en:Numerische Mathematik|Numerische Mathematik]]'' 4(3): 238–252. * {{citation |last=Lasdon |first=Leon S. |title=Optimization Theory for Large Systems |publisher=[[Dover Publications]] |location=Mineola, New York |year=2002 |edition=reprint of the 1970 Macmillan |pages=xiii+523 |mr=1888251 }}. == 関連項目 == * [[列生成法]] * {{仮リンク|FortSP|en|FortSP}} {{最適化アルゴリズム}} {{DEFAULTSORT:へんたあすふんかいほう}} [[Category:線型計画法]] [[Category:最適化アルゴリズムとメソッド]] [[Category:数学に関する記事]]
このページで使用されているテンプレート:
テンプレート:Citation
(
ソースを閲覧
)
テンプレート:Efn
(
ソースを閲覧
)
テンプレート:Lang-en-short
(
ソースを閲覧
)
テンプレート:More footnotes
(
ソースを閲覧
)
テンプレート:Notelist
(
ソースを閲覧
)
テンプレート:Reflist
(
ソースを閲覧
)
テンプレート:仮リンク
(
ソースを閲覧
)
テンプレート:最適化アルゴリズム
(
ソースを閲覧
)
テンプレート:脚注ヘルプ
(
ソースを閲覧
)
ベンダーズ分解法
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報