《大規模問題の分解法》のソースを表示
←
《大規模問題の分解法》
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、以下のグループに属する利用者のみが実行できます:
登録利用者
。
このページは編集や他の操作ができないように保護されています。
このページのソースの閲覧やコピーができます。
'''【だいきぼもんだいのぶんかいほう (decomposition method for large-scale problems)】''' 現実世界で発生する複雑な問題を最適化問題としてモデル化すると,非常に多くの変数や制約条件をもつ大規模問題になることが多い.計算機を用いてその解を求める場合,目的関数や制約条件式がすべて線形であっても,変数や制約条件の数が増えるとともに計算時間は急激に増加する.また,それらの一部に非線形の項が含まれると,問題の解きにくさは飛躍的に増大する.そこで,大規模問題を直接解くのではなく,一部の変数や制約条件だけから成る小規模な,または,解きやすい部分問題を逐次解くことにより,もとの問題の解を得ようとするアルゴリズムが提案されている.それらを一般に[[大規模問題の分解法]] (decomposition method for large-scale problems) と呼ぶ [3]. 現実の大規模問題は,しばしば特徴的なブロック構造をもつ.たとえば,<math>n\, </math>個の比較的独立な部分から成るシステムが共通の変数 <math>x_{0}\, </math>を含む場合は, <table align="center"> <tr> <td><math>\begin{array}{llrll} \mbox{min.} & f_{0}(x_{0}) + & \sum_{j=1}^{n} f_{j}(x_{j})\\ \mbox{s. t.} & g_{0}(x_{0}) & & \leq 0, \\ & g_{j}(x_{0}) + & h_{j}(x_{j}) & \leq 0 & (j = 1, \ldots, n), \end{array}\, </math></td> <td width="100" align="right"><math>(1) \,</math> </td> </tr> </table> という最適化問題が得られる.この問題は,変数 <math>x_{0}\, </math> を一時的に固定すると, <table align="center"> <tr> <td><math> \mbox{min.} \quad f_{j}(x_{j}) \quad \mbox{s. t.} \quad g_{j}(x_{0}) + h_{j}(x_{j}) \leq 0, \, </math> </td> <td width="100" align="right"><math>(2) \,</math> </td> </tr> </table> という <math>n\, </math> 個の部分問題に分解される.[[ベンダース分解法]] (Benders decomposition method) はこのような性質を利用しており,関数 <math>f_{j}\, </math>, <math>h_{j}\, </math> が線形ならば,有限回の反復でもとの問題の解に到達できることが知られている.さらに,分解された部分問題はたがいに独立であり,それらは比較的大きい(粒度が粗い)問題となるため, MIMD (multiple instruction stream multiple data stream) 型の並列計算機で効率よく実行できる. また,システム全体にまたがる付加的な制約条件が存在する場合は, <table align="center"> <tr> <td><math>\begin{array}{lrll} \mbox{min.} & f_{0}(x_{0}) + \sum_{j=1}^{n} f_{j}(x_{j}) & & \\ \mbox{s. t.} & g_{0}(x_{0}) + \sum_{j=1}^{n} g_{j}(x_{j}) & \leq 0, \\ & h_{j}(x_{j}) & \leq 0 & (j = 1, \ldots, n), \end{array}\, </math> </td> <td width="100" align="right"><math>(3) \,</math> </td> </tr> </table> という最適化問題が得られるが,<math>g_{j}\, </math> を含む制約条件をラグランジュ緩和により目的関数に組み込み, さらに変数 <math>x_0\, </math> を一時的に固定すると, 問題 (2) に類似した<math>n\, </math> 個の独立な部分問題に分解される.とくにすべての関数が線形ならば,問題 (3) は部分問題の解を用いて効率的に解けることが知られており,[[ダンツィク・ウルフ分解法]] (Dantzig-Wolfe decomposition method) と呼ばれている. 一方,大規模で複雑な問題から取り扱いやすい構造をもつ部分のみを抽出して部分問題を構成し,これを逐次解くことによりもとの問題の解を得ようとする方法は,分割法 (splitting method) と呼ばれている.分割法は,問題 (1) や (3) のようなブロック構造をもたない問題にも適用可能である.また,並列処理可能な部分問題を構成すれば,それらはしばしば小規模な(粒度の細かい)問題となり,SIMD (single instruction stream multiple data stream) 型の大規模並列計算機を用いて効率的に実行できる. 分割法は,線形方程式に対する反復法として,線形代数の分野において古くから研究されている.行列 <math>M\, </math> とベクトル <math>q\, </math> により定義される線形方程式 <table align="center"> <tr> <td><math>M x + q = 0\, </math> </td> </tr> </table> に対して,条件 <math>M = B + C\, </math> を満たす行列 <math>B\, </math>, <math>C\, </math> を選び,方程式 <table align="center"> <tr> <td><math> B x + C x^{(k)} + q = 0 \, </math> </td> <td width="100" align="right"><math>(4) \,</math> </td> </tr> </table> の解を <math>x^{(k+1)}\, </math> とおくことにより点列 <math>\{ x^{(k)} \}\, </math> を生成する方法は,[[行列分割法]] (matrix splitting method) と呼ばれる.行列 <math>B\, </math> を (ブロック) 対角行列に選べば方程式 (4) は並列的に解けるので,大規模問題に対する効率的な解法を得る.行列分割法は,線形相補性問題や線形変分不等式問題にも拡張できる. 一般の凸計画問題に対しても,分割法に基づくアルゴリズムを構成できる.凸計画問題は,最適性条件を考慮すると,ある写像 <math>F: \mathbf{R}^{n} \rightarrow \mathbf{R}^{n}\, </math> を用いて <table align="center"> <tr> <td><math> \mbox{find} \quad x \in \mathbf{R}^{n} \quad \mbox{s. t.} \quad 0 \in F(x), \, </math> </td> <td width="100" align="right"><math>(5) \,</math> </td> </tr> </table> と記述される.条件 <math>F = G + H\, </math> を満たす写像 <math>G\, </math>, <math>H\, </math> を選び,部分問題 <table align="center"> <tr> <td><math> \mbox{find} \quad x \in \mathbf{R}^{n} \quad \mbox{s. t.} \quad 0 \in G(x) + H(x^{(k)}), \, </math> </td> <td width="100" align="right"><math>(6) \,</math> </td> </tr> </table> の解を <math>x^{(k+1)}\, </math> とする反復法は,[[作用素分割法]] (operator splitting method) と呼ばれる.写像 <math>G\, </math> が分離可能ならば部分問題 (6) は並列的に解けるので,大規模な凸計画問題に対する効率的な解法が得られる. 問題 (5) に対する有力な反復法に,[[近接点法]] (proximal point method) がある.近接点法では,単調非減少な正定数の列 <math>\{ \lambda^{(k)} \}\, </math> を定め,問題 <table align="center"> <tr> <td><math>\mbox{find} \quad x \in \mathbf{R}^{n} \quad \mbox{s. t.} \quad ( x^{(k)} - x ) \, / \, \lambda^{(k)} \in F(x),\, </math> </td> </tr> </table> の解を <math>x^{(k+1)}\, </math> とおく.作用素分割法や近接点法は,一般的な最適化問題のクラスである変分不等式問題にも拡張できる.また,これらの方法を組合せることによりさまざまな[[並列アルゴリズム (数理計画問題の)|並列アルゴリズム]](parallel algorithm (nonlinear programming)) を構成できることが知られている.このような考え方に基づく並列アルゴリズムについては,参考文献 [1, 2, 4] に詳しい解説がある. ---- '''参考文献''' [1] D. P. Bertsekas and J. N. Tsitsiklis, ''Parallel and Distributed Computation: Numerical Methods'', Prentice-Hall, 1989. [2] Y. Censor and S. A. Zenios, ''Parallel Optimization: Theory, Algorithms, and Applications'', Oxford University Press, 1997. [3] J. F. Shapiro, ''Mathematical Programming: Structures and Algorithms'', John Wiley & Sons, 1979. [4] 山下栄樹,福島雅夫,「数理計画における並列計算」,朝倉書店,2001. [[Category:非線形計画|だいきぼもんだいのぶんかいほう]]
《大規模問題の分解法》
に戻る。
案内メニュー
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
その他
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ORWikiへのお問い合わせ
OR学会HP
OR学会アーカイブ集
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報