「大域的最適化」の版間の差分
(新しいページ: ''''【たいいきてきさいてきか (global optimization)】''' ユークリッド空間$\R^n$上で定義された連続な実数値関数$f$を目的関数とし...') |
|||
1行目: | 1行目: | ||
'''【たいいきてきさいてきか (global optimization)】''' | '''【たいいきてきさいてきか (global optimization)】''' | ||
− | ユークリッド空間 | + | ユークリッド空間<math>\mathbf{R}^n\, </math>上で定義された連続な実数値関数<math>f\, </math>を[[目的関数]]とし,<math>\mathbf{R}^n\, </math>の閉部分集合<math>D\, </math>を[[実行可能集合]]とする[[最適化問題]]: |
− | + | :<math>\begin{array}{ll} | |
− | + | \mbox{min.} & f(\{x}) \\ | |
− | + | \mbox{s. t.} & \x := (x_1, \ldots, x_n) \in D, | |
− | + | \end{array}\, </math> | |
13行目: | 13行目: | ||
− | + | :<math>f(\x^*) \leq f(\x), \quad \forall\, \x \in D,\, </math> | |
− | を満足する | + | を満足する<math>\x^* \in D\, </math>を求める方法を[[大域的最適化]]という.目的関数<math>f\, </math>と実行可能集合<math>D\, </math>が共に凸性を満たす[[凸計画問題]]であれば,局所的な最適化によって<math>\x^*\, </math>を求めることができる.また,凸性を満たさなくとも,[[分数計画問題]](fractional programming problem)や[[幾何計画問題]](geometric programming problem)の一部は任意の[[局所的最適解]]で大域的にも最適となる.したがって,大域的最適化が本質的な意味をもつのは,値が異なる複数の局所的最適解をもつ[[非凸計画問題]]に対してであり,これを多極値大域的最適化問題(multiextremal global optimization problem)と呼ぶ.例えば,<math>f\, </math>が凹関数で<math>D\, </math>が凸多面体の凹最小化問題(concave minimization problem)の場合,局所的最適解は一般に<math>D\, </math>の複数の端点に現われる.しかし,端点の数は膨大であり,その中から大域的に最適なものを見つけだすのは容易な作業でない.実際,この単純な例でさえ最悪計算量の上では[[NP困難]]であることが知られている.そのため,現段階で一般の多極値大域的最適化問題を解決する有効な手段はなく,[[モンテカルロ法]](Monte Carlo method)などのヒューリスティクスが唯一現実的なアプローチとなっている [2]. |
このように困難な問題クラスではあるが,個々の問題の中には,その構造を利用することで現実的な計算時間のうちに大域的最適解の求められるものも少なくない [1].その代表例が,実は上にも述べた凹最小化問題である: | このように困難な問題クラスではあるが,個々の問題の中には,その構造を利用することで現実的な計算時間のうちに大域的最適解の求められるものも少なくない [1].その代表例が,実は上にも述べた凹最小化問題である: | ||
− | + | <math>\begin{array}{ll} | |
− | + | \mbox{min.} & f(\x) \\ | |
− | + | \mbox{s. t.} & \x \in D := \{\x \in \R^n \mid \A \x \geq \b\}. | |
− | + | \end{array}\, </math> | |
− | ここで, | + | ここで,<math>\A\, </math>は<math>m \times n\, </math>行列で<math>\b\, </math>は<math>m\, </math>次ベクトル,<math>f\, </math>は凹関数(concave function),つまり<math>-f\, </math>が[[凸関数]]である.この非凸計画問題を大域的に最適化するアルゴリズムとして,凹性カット法(concavity-cut method),外部近似法(outer approximation method),[[分枝限定法]](branch-and-bound method)などがある [3]. |
− | 凹性カット法は,以下の操作を繰り返し, | + | 凹性カット法は,以下の操作を繰り返し,<math>D\, </math>から大域的最適解以外の実行可能解をすべて除去しようとする方法である.局所的最適解を与える<math>D\, </math>の端点<math>\x'\, </math>を見つけ,<math>\x'\, </math>から出る<math>n\, </math>本の稜線ベクトル<math>\u^1, \ldots, \u^n\, </math>と,それまでに得られた最も小さな目的関数値<math>f^\circ\, </math>によって集合 |
− | |||
− | |||
+ | :<math>V := \{\x' + \theta_i \u^i \mid \theta_i \geq 0,\; i = 1, \ldots, n\} \cap | ||
+ | \{\x \in \R^n \mid f(\x) = f^\circ\}\, </math> | ||
− | |||
− | + | を定義する.端点<math>\x'\, </math>における<math>f\, </math>の値が<math>f^\circ\, </math>よりも悪ければ,<math>V\, </math>は丁度<math>n\, </math>個の点から構成されるが,それらを通る<math>n\, </math>次元超平面によって\x'と一緒に見込のない実行可能解もDから切除する.目的関数<math>f\, </math>が2次の凹関数である[[双線形計画問題]] (bilinear programming problem)に対しては,より大きな領域を切除する方法も考案されている. | |
+ | 外部近似法も超平面による切除を行うが,凹性カット法と違って1つの実行可能解も失わない.まず,<math>D\, </math>を<math>n\, </math>次元単体や矩形などの単純な凸多面体<math>S \supseteq D\, </math>で近似し,<math>f\, </math>を<math>S\, </math>上で最小化する.これも凹最小化問題であるが,<math>S\, </math>は端点の数が少ないので,それらの列挙で最小点<math>\x'\, </math>は比較的容易に求められる.この<math>\x'\, </math>が満たさない<math>D\, </math>の制約式の1つ<math>\a_i^{\T} \x \geq b_i\, </math>を選び,<math>S\, </math>を | ||
− | |||
+ | :<math>S' := S \cap \{\x \in \R^n \mid \a_i^{\T} \x \geq b_i\}\, </math> | ||
− | |||
− | + | に更新して<math>\x'\, </math>と共に実行不可能な領域を切除する.実行可能集合<math>D\, </math>が<math>S\, </math>の部分集合なので<math>f(\x')\, </math>は大域的最適値の下界値を与えるが,以上の操作を繰り返して <math>\x' \in D\, </math>となれば,<math>\x'\, </math>が大域的最適解である. | |
+ | 分枝限定法には多くのバリエーションが存在するが,最も効力を発揮するのは目的関数<math>f\, </math>が分離可能な場合である: | ||
− | |||
+ | :<math>f(\x) := \sum_{j=1}^n f_j(x_j).\, </math> | ||
− | |||
+ | ただし,<math>f_j\, </math>はすべて凹関数である.実行可能集合<math>D\, </math>を含む矩形<math>M := \{\x \in \R^n \mid l_j \leq x_j \leq u_j,\; j = 1, \ldots, n\}\, </math>を定義し,これを複数の小さな矩形 | ||
− | |||
− | |||
+ | :<math>M^k := \{\x \in \R^n \mid l_j^k \leq x_j \leq u_j^k\}, \quad | ||
+ | k = 1, \ldots, K,\, </math> | ||
− | |||
+ | に分割していく.基本となる操作は,[[組合せ最適化問題]]に使われる分枝限定法と同様で,まず <math>M^k\, </math> を選んで | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | '''限定操作''' <math>D \cap M^k\, </math>上における<math>f\, </math>の下界値<math>f'\, </math>を計算し,その値がそれまでに得られた最も小さな目的関数値<math>f^\circ\, </math>以上ならば<math>M^k\, </math>を考察の対象から外す; | ||
− | + | '''分枝操作''' <math>f' < f^\circ\, </math>ならば,<math>M^k\, </math>を2つの矩形 <math>M^{k_1}\, </math>, <math>M^{k_2}\, </math>に分割する | |
− | + | を繰り返す.効率の鍵を握る下界値<math>f'\, </math>には,通常<math>(l_j^k, f_j(l_j^k))\, </math>と<math>(u_j^k, f_j(u_j^k))\, </math>を通るアフィン関数 | |
− | |||
− | |||
− | を定義し,その和 | + | :<math>g_j(x_j) := \frac{f(u_j^k) - f(l_j^k)}{u_j^k - l_j^k} x_j + |
+ | \frac{u_j^k f(l_j^k) - l_j^k f(u_j^k)}{u_j^k - l_j^k}, | ||
+ | \quad j = 1, \ldots, n,\, </math> | ||
+ | |||
+ | |||
+ | を定義し,その和<math>g(\x) := \sum_{j=1}^n g_j(x_j)\, </math>の<math>D \cap M^k\, </math>上における最小値が用いられる.関数<math>g\, </math>は<math>M^k\, </math>上における<math>f\, </math>の最も大きな下界値を与える凸関数で,凸包絡関数 (convex envelope function)と呼ばれる.しかし,アフィン関数であるので[[単体法]]や[[内点法]]を使って容易に最小値<math>f'\, </math>を計算することができる. | ||
[[DC計画問題]](d.c. programming problem)や[[逆凸計画問題]](reverse convex programming problem)などのより一般的な多極値大域的最適化問題も,凹最小化問題を逐次解くことで処理することができる [2, 3]. | [[DC計画問題]](d.c. programming problem)や[[逆凸計画問題]](reverse convex programming problem)などのより一般的な多極値大域的最適化問題も,凹最小化問題を逐次解くことで処理することができる [2, 3]. |
2007年7月3日 (火) 13:51時点における版
【たいいきてきさいてきか (global optimization)】
ユークリッド空間上で定義された連続な実数値関数を目的関数とし,の閉部分集合を実行可能集合とする最適化問題:
- 構文解析に失敗 (不明な関数「\begin{array}」): {\displaystyle \begin{array}{ll} \mbox{min.} & f(\{x}) \\ \mbox{s. t.} & \x := (x_1, \ldots, x_n) \in D, \end{array}\, }
の大域的最適解,つまり
- 構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle f(\x^*) \leq f(\x), \quad \forall\, \x \in D,\, }
を満足する構文解析に失敗 (不明な関数「\x」): {\displaystyle \x^* \in D\, }
を求める方法を大域的最適化という.目的関数と実行可能集合が共に凸性を満たす凸計画問題であれば,局所的な最適化によって構文解析に失敗 (不明な関数「\x」): {\displaystyle \x^*\, }
を求めることができる.また,凸性を満たさなくとも,分数計画問題(fractional programming problem)や幾何計画問題(geometric programming problem)の一部は任意の局所的最適解で大域的にも最適となる.したがって,大域的最適化が本質的な意味をもつのは,値が異なる複数の局所的最適解をもつ非凸計画問題に対してであり,これを多極値大域的最適化問題(multiextremal global optimization problem)と呼ぶ.例えば,が凹関数でが凸多面体の凹最小化問題(concave minimization problem)の場合,局所的最適解は一般にの複数の端点に現われる.しかし,端点の数は膨大であり,その中から大域的に最適なものを見つけだすのは容易な作業でない.実際,この単純な例でさえ最悪計算量の上ではNP困難であることが知られている.そのため,現段階で一般の多極値大域的最適化問題を解決する有効な手段はなく,モンテカルロ法(Monte Carlo method)などのヒューリスティクスが唯一現実的なアプローチとなっている [2].
このように困難な問題クラスではあるが,個々の問題の中には,その構造を利用することで現実的な計算時間のうちに大域的最適解の求められるものも少なくない [1].その代表例が,実は上にも述べた凹最小化問題である:
構文解析に失敗 (不明な関数「\x」): {\displaystyle \begin{array}{ll} \mbox{min.} & f(\x) \\ \mbox{s. t.} & \x \in D := \{\x \in \R^n \mid \A \x \geq \b\}. \end{array}\, }
ここで,構文解析に失敗 (不明な関数「\A」): {\displaystyle \A\, }
は行列で構文解析に失敗 (不明な関数「\b」): {\displaystyle \b\, }
は次ベクトル,は凹関数(concave function),つまりが凸関数である.この非凸計画問題を大域的に最適化するアルゴリズムとして,凹性カット法(concavity-cut method),外部近似法(outer approximation method),分枝限定法(branch-and-bound method)などがある [3].
凹性カット法は,以下の操作を繰り返し,から大域的最適解以外の実行可能解をすべて除去しようとする方法である.局所的最適解を与えるの端点構文解析に失敗 (不明な関数「\x」): {\displaystyle \x'\, } を見つけ,構文解析に失敗 (不明な関数「\x」): {\displaystyle \x'\, } から出る本の稜線ベクトル構文解析に失敗 (不明な関数「\u」): {\displaystyle \u^1, \ldots, \u^n\, } と,それまでに得られた最も小さな目的関数値によって集合
- 構文解析に失敗 (不明な関数「\x」): {\displaystyle V := \{\x' + \theta_i \u^i \mid \theta_i \geq 0,\; i = 1, \ldots, n\} \cap \{\x \in \R^n \mid f(\x) = f^\circ\}\, }
を定義する.端点構文解析に失敗 (不明な関数「\x」): {\displaystyle \x'\, }
におけるの値がよりも悪ければ,は丁度個の点から構成されるが,それらを通る次元超平面によって\x'と一緒に見込のない実行可能解もDから切除する.目的関数が2次の凹関数である双線形計画問題 (bilinear programming problem)に対しては,より大きな領域を切除する方法も考案されている.
外部近似法も超平面による切除を行うが,凹性カット法と違って1つの実行可能解も失わない.まず,を次元単体や矩形などの単純な凸多面体で近似し,を上で最小化する.これも凹最小化問題であるが,は端点の数が少ないので,それらの列挙で最小点構文解析に失敗 (不明な関数「\x」): {\displaystyle \x'\, } は比較的容易に求められる.この構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle \x'\, } が満たさないの制約式の1つ構文解析に失敗 (不明な関数「\a」): {\displaystyle \a_i^{\T} \x \geq b_i\, } を選び,を
- 構文解析に失敗 (不明な関数「\x」): {\displaystyle S' := S \cap \{\x \in \R^n \mid \a_i^{\T} \x \geq b_i\}\, }
に更新して構文解析に失敗 (不明な関数「\x」): {\displaystyle \x'\, }
と共に実行不可能な領域を切除する.実行可能集合がの部分集合なので構文解析に失敗 (不明な関数「\x」): {\displaystyle f(\x')\, }
は大域的最適値の下界値を与えるが,以上の操作を繰り返して 構文解析に失敗 (不明な関数「\x」): {\displaystyle \x' \in D\, }
となれば,構文解析に失敗 (MathML、ただし動作しない場合はSVGかPNGで代替(最新ブラウザーや補助ツールに推奨): サーバー「https://en.wikipedia.org/api/rest_v1/」から無効な応答 ("Math extension cannot connect to Restbase."):): {\displaystyle \x'\, }
が大域的最適解である.
分枝限定法には多くのバリエーションが存在するが,最も効力を発揮するのは目的関数が分離可能な場合である:
- 構文解析に失敗 (不明な関数「\x」): {\displaystyle f(\x) := \sum_{j=1}^n f_j(x_j).\, }
ただし,はすべて凹関数である.実行可能集合を含む矩形構文解析に失敗 (不明な関数「\x」): {\displaystyle M := \{\x \in \R^n \mid l_j \leq x_j \leq u_j,\; j = 1, \ldots, n\}\, }
を定義し,これを複数の小さな矩形
- 構文解析に失敗 (不明な関数「\x」): {\displaystyle M^k := \{\x \in \R^n \mid l_j^k \leq x_j \leq u_j^k\}, \quad k = 1, \ldots, K,\, }
に分割していく.基本となる操作は,組合せ最適化問題に使われる分枝限定法と同様で,まず を選んで
限定操作 上におけるの下界値を計算し,その値がそれまでに得られた最も小さな目的関数値以上ならばを考察の対象から外す;
分枝操作 ならば,を2つの矩形 , に分割する
を繰り返す.効率の鍵を握る下界値には,通常とを通るアフィン関数
を定義し,その和構文解析に失敗 (不明な関数「\x」): {\displaystyle g(\x) := \sum_{j=1}^n g_j(x_j)\, }
の上における最小値が用いられる.関数は上におけるの最も大きな下界値を与える凸関数で,凸包絡関数 (convex envelope function)と呼ばれる.しかし,アフィン関数であるので単体法や内点法を使って容易に最小値を計算することができる.
DC計画問題(d.c. programming problem)や逆凸計画問題(reverse convex programming problem)などのより一般的な多極値大域的最適化問題も,凹最小化問題を逐次解くことで処理することができる [2, 3].
参考文献
[1] H. Konno, P.T. Thach and H. Tuy, Optimization on Low Rank Nonconvex Structures, Kluwer Academic Publishers, 1997.
[2] R. Horst and P.M. Pardalos (eds.), Handbook of Global Optimization, Kluwer Academic Publishers, 1995.
[3] R. Horst and H. Tuy, Global Optimization - Deterministic Approaches, 3rd ed., Springer-Verlag, 1996.