検索
Close this search box.
NOTE

フィボナッチ探索:単峰関数の最適化と黄金分割探索との違い

目次

記事情報

メール
Xで共有

単峰関数の最小点

\(a<b\)を満たす実数\(a,b\in \mathbb{R} \)を端点とする有界閉区間上に定義された1変数関数\begin{equation*}f:\mathbb{R} \supset \left[ a,b\right] \rightarrow \mathbb{R} \end{equation*}が与えられているものとします。さらに、\(f\)の定義域上にある点\(c\in \left[ a,b\right] \)が存在して、\begin{eqnarray*}&&\left( a\right) \ f\text{は}\left[ a,c\right] \text{上において狭義単調減少である} \\
&&\left( b\right) \ f\text{は}\left[ c,b\right] \text{上において狭義単調増加である}
\end{eqnarray*}がともに成り立つものとします。このような性質を満たす関数を単峰関数(unimodal function)と呼びます。この場合、点\(c\)は\(f\)の唯一の最小点であり、\(f\left( c\right) \)は\(f\)の最小値です。つまり、\begin{equation*}\min_{x\in \left[ a,b\right] }f\left( x\right) =f\left( c\right)
\end{equation*}が成り立ちます。

関数\(f\)が単峰関数であることは分かっているものの、最小点\(c\)が判明していない状況を想定します。さらに、関数\(f\)は微分可能であるとは限らないものとします。つまり、最小点\(c\)を具体的に特定する上で微分を利用できないということです。この場合、\(\left[ a,b\right] \)上の点\(x\)に対して関数\(f\)が定める値\(f\left( x\right) \)どうしを比較しながら最小点\(c\)を見つける必要があります。

例(最小点を持つ単峰関数)
関数\(f:\mathbb{R} \supset \left[ 0,6\right] \rightarrow \mathbb{R} \)はそれぞれの\(x\in \left[ 0,6\right] \)に対して、\begin{equation*}f\left( x\right) =\left( x-2\right) ^{2}
\end{equation*}を定めるものとします。この関数は\(\left[ 0,2\right] \)上において狭義単調減少であり、\(\left[ 2,6\right] \)上において狭義単調増加です。したがって\(f\)は単峰関数であるとともに、最小点は、\begin{equation*}c=2
\end{equation*}であり、最小値は、\begin{equation*}
\min_{x\in \left[ 0,6\right] }f\left( x\right) =f\left( 2\right) =0
\end{equation*}です。

例(最大点を持つ単峰関数)
\(a<b\)を満たす実数\(a,b\in \mathbb{R} \)を端点とする有界閉区間上に定義された1変数関数\(f:\mathbb{R} \supset \left[ a,b\right] \rightarrow \mathbb{R} \)に対してある点\(c\in \left[ a,b\right] \)が存在して、\begin{eqnarray*}&&\left( a\right) \ f\text{は}\left[ a,c\right] \text{上において狭義単調増加である} \\
&&\left( b\right) \ f\text{は}\left[ c,b\right] \text{上において狭義単調減少である}
\end{eqnarray*}がともに成り立つ場合にも、このような関数を単峰関数と呼びます。この場合、点\(c\)は\(f\)の唯一の最大点であり、\(f\left( c\right) \)は\(f\)の最大値です。つまり、\begin{equation*}\max_{x\in \left[ a,b\right] }f\left( x\right) =f\left( c\right)
\end{equation*}が成り立ちます。以降では最小点を持つ単峰関数を議論の対象としますが、最大点を持つ単峰関数に関しても同様の議論が成り立ちます。

 

黄金分割探索の課題

黄金分割探索について簡単に復習します。

単峰関数\(f:\mathbb{R} \supset \left[ a,b\right] \rightarrow \mathbb{R} \)の最小点を特定しようとしている状況を想定します。黄金分割探索では、以下の定数\begin{equation*}\rho =\frac{3-\sqrt{5}}{2}\approx 0.382
\end{equation*}のもとで探索区間を分割していきます。具体的なプロセスは以下の通りです。

図:黄金分割探索
図:黄金分割探索

最初のステップでは、当初の探索範囲\(\left[ a,b\right] \)を以下の割合\begin{equation*}\rho :1-2\rho :\rho
\end{equation*}で三分する2つの点\(x_{1},x_{2}\in \left[ a,b\right] \)を特定し(上図)、それらの点に対して\(f\)が定める値\(f\left( x_{1}\right) ,f\left( x_{2}\right) \)どうしを比較します。具体的には、\begin{eqnarray*}x_{1} &=&a+\rho \left( b-a\right) \\
x_{2} &=&a+\left( 1-\rho \right) \left( b-a\right)
\end{eqnarray*}であるため、\begin{eqnarray*}
f\left( x_{1}\right) &=&f\left( a+\rho \left( b-a\right) \right) \\
f\left( x_{2}\right) &=&f\left( a+\left( 1-\rho \right) \left( b-a\right)
\right)
\end{eqnarray*}です。その上で、新たな探索範囲\(\left[ a^{\prime},b^{\prime }\right] \)を、\begin{eqnarray*}f\left( x_{1}\right) &<&f\left( x_{2}\right) \Rightarrow \left[ a^{\prime
},b^{\prime }\right] =\left[ a,x_{2}\right] \\
f\left( x_{1}\right) &\geq &f\left( x_{2}\right) \Rightarrow \left[
a^{\prime },b^{\prime }\right] =\left[ x_{1},b\right] \end{eqnarray*}と定めます。当初の探索範囲\(\left[ a,b\right] \)と新たな探索範囲\(\left[ a^{\prime },b^{\prime }\right] \)の長さの比は\(1:1-\rho \)であるため、本ステップにおいて探索範囲が\(1-\rho \)に絞り込まれます。

図:黄金分割探索
図:黄金分割探索

次のステップでは、新たに得られた探索範囲\(\left[ a^{\prime },b^{\prime }\right] \)を先と同じ割合\begin{equation*}\rho :1-2\rho :\rho
\end{equation*}で三分する2つの点\(x_{1}^{\prime },x_{2}^{\prime }\in \left[ a^{\prime },b^{\prime }\right] \)を特定し、それらの点に対して\(f\)が定める値\(f\left( x_{1}^{\prime }\right) ,f\left( x_{2}^{\prime }\right) \)どうしを比較します。上図では\(\left[ a^{\prime },b^{\prime }\right] =\left[ a,x_{2}\right] \)の場合を想定していますが、\(\left[a^{\prime },b^{\prime }\right] =\left[ x_{1},b\right] \)の場合も同様です。具体的には、\begin{eqnarray*}x_{1}^{\prime } &=&a^{\prime }+\rho \left( b^{\prime }-a^{\prime }\right) \\
x_{2}^{\prime } &=&a^{\prime }+\left( 1-\rho \right) \left( b^{\prime
}-a^{\prime }\right)
\end{eqnarray*}であるため、\begin{eqnarray*}
f\left( x_{1}^{\prime }\right) &=&f\left( a^{\prime }+\rho \left( b^{\prime
}-a^{\prime }\right) \right) \\
f\left( x_{2}^{\prime }\right) &=&f\left( a^{\prime }+\left( 1-\rho \right)
\left( b^{\prime }-a^{\prime }\right) \right)
\end{eqnarray*}です。ここでのポイントは、先の値\(\rho \)のもとでは新たな三分点\(x_{1}^{\prime },x_{2}^{\prime }\)のどちらか一方が最初の三分点\(x_{1},x_{2}\)のどちらか一方と一致することが保証されるため、\(f\left(x_{1}^{\prime }\right) ,f\left( x_{2}^{\prime }\right) \)のどちらか一方が\(f\left( x_{1}\right),f\left( x_{2}\right) \)のどちらか一方と一致し、ゆえに実際には\(f\left( x_{1}^{\prime }\right) ,f\left(x_{2}^{\prime }\right) \)のどちらか一方を計算するだけです。その上で、新たな探索範囲\(\left[ a^{\prime \prime },b^{\prime\prime }\right] \)を、\begin{eqnarray*}f\left( x_{1}^{\prime }\right) &<&f\left( x_{2}^{\prime }\right)
\Rightarrow \left[ a^{\prime \prime },b^{\prime \prime }\right] =\left[
a^{\prime },x_{2}^{\prime }\right] \\
f\left( x_{1}^{\prime }\right) &\geq &f\left( x_{2}^{\prime }\right)
\Rightarrow \left[ a^{\prime \prime },b^{\prime \prime }\right] =\left[
x_{1}^{\prime },b^{\prime }\right] \end{eqnarray*}と定めます。もとの探索範囲\(\left[ a^{\prime },b^{\prime }\right] \)と新たな探索範囲\(\left[a^{\prime \prime },b^{\prime \prime }\right] \)の長さの比は\(1:1-\rho \)であるため、本ステップにおいても探索範囲が\(1-\rho \)に絞り込まれます。

以降も同様のプロセスを繰り返します。最初のステップでは2つの値\(f\left( x_{1}\right) ,f\left( x_{2}\right) \)を評価する必要がありますが、以降のステップでは、直前のステップにおいて得られた2つの関数値のうちの一方を再利用できるため、関数評価を1回行えば次のステップへ進めます。各ステップにおいて探索範囲が\(1-\rho \)に絞り込まれるため、同様のステップを\(k\in \mathbb{N} \)回繰り返すことにより、探索範囲の長さが、\begin{equation*}\left( b-a\right) \left( 1-\rho \right) ^{k}
\end{equation*}にまで絞り込まれます。

以前に解説した三分探索では各ステップにおいて関数評価を2回行う必要があるため、各ステップにおいて関数評価を1回行うだけでよい黄金分割探索は効率的なアルゴリズムです。ただし、黄金分割探索にも改善の余地がないわけではありません。黄金分割探索ではすべてのステップにおいて同一の割合のもとで区間を三分します。一方、各ステップにおいて異なる割合のもとで区間を三分することにより、黄金分割探索と同様に直前のステップにおいて得られた関数値を再利用しつつも、黄金分割探索より素早く探索範囲を絞り込める可能性があります。以上の課題を解決するのがフィボナッチ探索(Fibonacci search)です。

 

フィボナッチ探索の基本戦略

フィボナッチ探索ではフィボナッチ数列(Fibonacci sequence)を利用します。フィボナッチ数列\(\left\{ F_{n}\right\} \)は以下の再帰式\begin{equation*}\left\{
\begin{array}{l}
F_{0}=F_{1}=1 \\
F_{n}=F_{n-1}+F_{n-2}\quad \left( n=2,3,\cdots \right)
\end{array}\right.
\end{equation*}によって定義されます。定義にもとづいて項を列挙すると、\begin{eqnarray*}
F_{0} &=&1 \\
F_{1} &=&1 \\
F_{2} &=&2 \\
F_{3} &=&3 \\
F_{4} &=&5 \\
F_{5} &=&8 \\
&&\vdots
\end{eqnarray*}などとなります。つまり、直前の2つの項を足して次の項を作るということです。

黄金分割探索と同様、フィボナッチ探索においても探索範囲を三分した上で、三分点における関数値を評価するプロセスを繰り返します。フィボナッチ探索の特徴の1つは、そのようなプロセスを何回繰り返すか、その回数を事前に設定する必要があるということです。そこで、実行するステップ数を規定する自然数を、\begin{equation*}
N\in \mathbb{N} \end{equation*}で表記します。

黄金分割探索では定数\(\rho =\frac{3-\sqrt{5}}{2}\)を採用し、任意のステップ\(k\)において同一の割合\begin{equation*}\rho :1-2\rho :\rho
\end{equation*}で探索範囲を分割します。一方、フィボナッチ探索では、各ステップ\(k\)ごとに異なる値\(\rho _{k}\)を採用し、その値にもとづいて探索範囲を、\begin{equation*}\rho _{k}:1-2\rho _{k}:\rho _{k}
\end{equation*}の割合で分割します。その際、\(\rho _{k}\)の値は、フィボナッチ数列\(\left\{ F_{n}\right\} \)と総ステップ数を規定する数値\(N\in \mathbb{N} \)より、\begin{equation}\rho _{k}=\frac{F_{N-k-1}}{F_{N-k+1}} \quad \cdots (1)
\end{equation}と定められます。このとき、\begin{eqnarray*}
1-\rho _{k} &=&1-\frac{F_{N-k-1}}{F_{N-k+1}}\quad \because \left( 1\right)
\\
&=&\frac{F_{N-k+1}-F_{N-k-1}}{F_{N-k+1}} \\
&=&\frac{\left( F_{N-k}+F_{N-k-1}\right) -F_{N-k-1}}{F_{N-k+1}}\quad
\because F_{N-k+1}=F_{N-k}+F_{N-k-1} \\
&=&\frac{F_{N-k}}{F_{N-k+1}}
\end{eqnarray*}すなわち、\begin{equation}
1-\rho _{k}=\frac{F_{N-k}}{F_{N-k+1}} \quad \cdots (2)
\end{equation}であることに注意してください。以上をもとに、プロセスを具体的に記述すると以下のようになります。

単峰関数\(f:\mathbb{R} \supset \left[ a,b\right] \rightarrow \mathbb{R} \)の最小点を特定しようとしている状況を想定します。フィボナッチ数列を\(\left\{ F_{n}\right\} \)で表記し、総ステップ数を規定する数値を\(N\in \mathbb{N} \)で表記します。

図:フィボナッチ探索
図:フィボナッチ探索

まずは、区間\(\left[ a,b\right] \)を以下の割合、\begin{equation*}\rho _{1}:1-2\rho _{1}:\rho _{1}
\end{equation*}で三分する2つの点\(x_{1},x_{2}\in \left[ a,b\right] \)を特定し(上図)、それらの点に対して\(f\)が定める値\(f\left( x_{1}\right) ,f\left( x_{2}\right) \)どうしを比較します。ただし、\(\left( 1\right) ,\left( 2\right) \)より、\begin{eqnarray*}\rho _{1} &=&\frac{F_{N-2}}{F_{N}} \\
1-\rho _{1} &=&\frac{F_{N-1}}{F_{N}}
\end{eqnarray*}であるとともに、\begin{eqnarray*}
x_{1} &=&a+\rho _{1}\left( b-a\right) \\
x_{2} &=&a+\left( 1-\rho _{1}\right) \left( b-a\right)
\end{eqnarray*}となり、したがって、\begin{eqnarray*}
f\left( x_{1}\right) &=&f\left( a+\rho _{1}\left( b-a\right) \right) \\
f\left( x_{2}\right) &=&f\left( a+\left( 1-\rho _{1}\right) \left(
b-a\right) \right)
\end{eqnarray*}の大小を比較することになります。その結果、以下の2つの場合が起こり得ます。

1つ目のケースは、\begin{equation*}
f\left( x_{1}\right) <f\left( x_{2}\right)
\end{equation*}である場合です。つまり、変数\(x\)の値が\(x_{1}\)から\(x_{2}\)へ増加すると\(f\left( x\right) \)の値は増加しますが、単峰性の仮定より、この場合には\(x\)が\(x_{2}\)を出発点に大きくなると\(f\left( x\right) \)の値は大きくなり続けます。したがって、\(f\)の最小点は\(\left[ x_{2},b\right] \)上に存在しないため、\(\left[ x_{2},b\right] \)上の点を最小点の候補から外すことができます。

2つ目のケースは、\begin{equation*}
f\left( x_{1}\right) \geq f\left( x_{2}\right)
\end{equation*}である場合です。つまり、変数\(x\)の値が\(x_{1}\)から\(x_{2}\)へ増加すると\(f\left( x\right) \)の値は減少しますが、単峰性の仮定より、この場合には\(x\)が\(x_{1}\)を出発点に小さくなると\(f\left( x\right) \)の値は大きくなり続けます。したがって、\(f\)の最小点は\(\left[ a,x_{1}\right] \)上に存在しないため、\(\left[ a,x_{1}\right] \)上の点を最小点の候補から外すことができます。

以上の議論より、新たな探索範囲\(\left[ a^{\prime},b^{\prime }\right] \)が、\begin{eqnarray*}f\left( x_{1}\right) &<&f\left( x_{2}\right) \Rightarrow \left[ a^{\prime
},b^{\prime }\right] =\left[ a,x_{2}\right] \\
f\left( x_{1}\right) &\geq &f\left( x_{2}\right) \Rightarrow \left[
a^{\prime },b^{\prime }\right] =\left[ x_{1},b\right] \end{eqnarray*}と定まります。当初の探索範囲\(\left[ a,b\right] \)と新たな探索範囲\(\left[ a^{\prime},b^{\prime }\right] \)の長さの比は\(1:1-\rho _{1}\)であるため、本ステップにおいて探索範囲が\(1-\rho _{1}\)に絞り込まれます。

続いて、新たな探索範囲\(\left[ a^{\prime },b^{\prime }\right] \)を対象に、同様のプロセスを繰り返します。つまり、\(\left[ a^{\prime },b^{\prime }\right] \)を以下の割合\begin{equation*}\rho _{2}:1-2\rho _{2}:\rho _{2}
\end{equation*}で三分する2つの点\(x_{1}^{\prime },x_{2}^{\prime }\in \left[ a^{\prime },b^{\prime }\right] \)を特定し、それらの点に対して\(f\)が定める値\(f\left( x_{1}\right) ,f\left( x_{2}\right) \)どうしを比較します。ただし、\(\left( 1\right) ,\left( 2\right) \)より、\begin{eqnarray*}\rho _{2} &=&\frac{F_{N-3}}{F_{N-1}} \\
1-\rho _{2} &=&\frac{F_{N-2}}{F_{N-1}}
\end{eqnarray*}です。ただし、新たな点\(x_{1}^{\prime },x_{2}^{\prime }\)のどちらか一方は先の点\(x_{1},x_{2}\)のどちらか一方と一致します。理由は以下の通りです。

図:フィボナッチ探索
図:フィボナッチ探索

最初のステップにおいて\(f\left( x_{1}\right) <f\left( x_{2}\right) \)であった状況を想定します。この場合、新たな探索範囲\(\left[ a^{\prime },b^{\prime }\right] \)は\(\left[ a,x_{2}\right] \)です。その上で、新たな探索範囲\(\left[ a,x_{2}\right] \)を\(\rho _{2}:1-2\rho _{2}:\rho_{2}\)の割合で三分する2つの点\(x_{1}^{\prime },x_{2}^{\prime }\in \left[ a,x_{2}\right] \)を特定します(上図)。\(x_{1}^{\prime }<x_{2}^{\prime }\)です。ただし、\(a<x_{1}<x_{2}\)であるため、先に特定した点\(x_{1}\)を再利用できれば関数評価を1回節約できます。\(\rho _{2}<\frac{1}{2}\)ゆえに点\(x_{1}\)は新たな探索範囲\(\left[ a,x_{2}\right] \)の中点よりも右側にあるため、\(x_{1}^{\prime }\)ではなく\(x_{2}^{\prime }\)として\(x_{1}\)を再利用することになります。実際、\begin{eqnarray*}x_{2}^{\prime } &=&a+\left( 1-\rho _{2}\right) \left( x_{2}-a\right) \\
&=&a+\frac{F_{N-2}}{F_{N-1}}\left\{ \left[ a+\frac{F_{N-1}}{F_{N}}\left(
b-a\right) \right] -a\right\} \\
&=&a+\frac{F_{N-2}}{F_{N-1}}\cdot \frac{F_{N-1}}{F_{N}}\left( b-a\right) \\
&=&a+\frac{F_{N-2}}{F_{N}}\left( b-a\right) \\
&=&x_{1}
\end{eqnarray*}となるため、\(x_{2}^{\prime }\)は\(x_{1}\)と一致することが明らかになりました。つまり、\begin{eqnarray*}x_{1}^{\prime } &=&a+\rho _{2}\left( x_{2}-a\right) \\
x_{2}^{\prime } &=&x_{1}
\end{eqnarray*}です。その上で、これらの点に対して\(f\)が定める値\(f\left( x_{1}^{\prime }\right) ,f\left(x_{2}^{\prime }\right) \)どうしを比較することにより、新たな探索範囲\(\left[ a^{\prime \prime},b^{\prime \prime }\right] \)が、\begin{eqnarray*}f\left( x_{1}^{\prime }\right) &<&f\left( x_{2}^{\prime }\right)
\Rightarrow \left[ a^{\prime \prime },b^{\prime \prime }\right] =\left[
a^{\prime },x_{2}^{\prime }\right] \\
f\left( x_{1}^{\prime }\right) &\geq &f\left( x_{2}^{\prime }\right)
\Rightarrow \left[ a^{\prime \prime },b^{\prime \prime }\right] =\left[
x_{1}^{\prime },b^{\prime }\right] \end{eqnarray*}となり、探索範囲が\(1-\rho _{2}\)に絞り込まれます。

図:フィボナッチ探索
図:フィボナッチ探索

最初のステップにおいて\(f\left( x_{1}\right) \geq f\left( x_{2}\right) \)であった場合についても同様です。この場合、この場合、新たな探索範囲\(\left[ a^{\prime },b^{\prime }\right] \)は\(\left[ x_{1},b\right] \)です。その上で、新たな探索範囲\(\left[ x_{1},b\right] \)を\(\rho _{2}:1-2\rho _{2}:\rho_{2}\)の割合で三分する2つの点\(x_{1}^{\prime },x_{2}^{\prime }\in \left[ x_{1},b\right] \)を特定します(上図)。\(x_{1}^{\prime }<x_{2}^{\prime }\)です。ただし、\(x_{1}<x_{2}<b\)であるため、先に特定した点\(x_{2}\)を再利用します。\(\rho _{2}<\frac{1}{2}\)ゆえに点\(x_{2}\)は新たな探索範囲\(\left[x_{1},b\right] \)の中点よりも左側にあるため、\(x_{2}^{\prime }\)ではなく\(x_{1}^{\prime }\)として\(x_{2}\)を再利用することになります。実際、\begin{eqnarray*}x_{1}^{\prime } &=&x_{1}+\rho _{2}\left( b-x_{1}\right) \\
&=&\left[ a+\frac{F_{N-2}}{F_{N}}\left( b-a\right) \right] +\frac{F_{N-3}}{F_{N-1}}\left\{ b-\left[ a+\frac{F_{N-2}}{F_{N}}\left( b-a\right) \right] \right\} \\
&=&a+\frac{F_{N-2}}{F_{N}}\left( b-a\right) +\frac{F_{N-3}}{F_{N-1}}\left(
b-a\right) -\frac{F_{N-3}F_{N-2}}{F_{N-1}F_{N}}\left( b-a\right) \\
&=&a+\left( \frac{F_{N-2}}{F_{N}}+\frac{F_{N-3}}{F_{N-1}}-\frac{F_{N-3}F_{N-2}}{F_{N-1}F_{N}}\right) \left( b-a\right) \\
&=&a+\left( \frac{F_{N-2}F_{N-1}+F_{N-3}F_{N}-F_{N-3}F_{N-2}}{F_{N-1}F_{N}}\right) \left( b-a\right)
\end{eqnarray*}となりますが、\begin{eqnarray*}
\frac{F_{N-2}}{F_{N}}+\frac{F_{N-3}}{F_{N-1}}-\frac{F_{N-3}F_{N-2}}{F_{N-1}F_{N}} &=&\frac{F_{N-2}F_{N-1}+F_{N-3}F_{N}-F_{N-3}F_{N-2}}{F_{N-1}F_{N}} \\
&=&\frac{F_{N-2}F_{N-1}+F_{N-3}\left( F_{N-1}+F_{N-2}\right) -F_{N-3}F_{N-2}}{F_{N-1}F_{N}}\quad \because F_{N}=F_{N-1}+F_{N-2} \\
&=&\frac{F_{N-2}F_{N-1}+F_{N-3}F_{N-1}+F_{N-3}F_{N-2}-F_{N-3}F_{N-2}}{F_{N-1}F_{N}} \\
&=&\frac{F_{N-2}F_{N-1}+F_{N-3}F_{N-1}}{F_{N-1}F_{N}} \\
&=&\frac{F_{N-2}+F_{N-3}}{F_{N}} \\
&=&\frac{F_{N-1}}{F_{N}}\quad \because F_{N-1}=F_{N-2}+F_{N-3}
\end{eqnarray*}ゆえに、\begin{eqnarray*}
x_{1}^{\prime } &=&a+\frac{F_{N-1}}{F_{N}}\left( b-a\right) \\
&=&x_{2}
\end{eqnarray*}となるため、\(x_{1}^{\prime }\)は\(x_{2}\)と一致することが明らかになりました。つまり、\begin{eqnarray*}x_{1}^{\prime } &=&x_{2} \\
x_{2}^{\prime } &=&x_{1}+\left( 1-\rho _{2}\right) \left( b-x_{1}\right)
\end{eqnarray*}です。その上で、これらの点に対して\(f\)が定める値\(f\left( x_{1}^{\prime }\right) ,f\left(x_{2}^{\prime }\right) \)どうしを比較することにより、新たな探索範囲\(\left[ a^{\prime \prime},b^{\prime \prime }\right] \)が、\begin{eqnarray*}f\left( x_{1}^{\prime }\right) &<&f\left( x_{2}^{\prime }\right)
\Rightarrow \left[ a^{\prime \prime },b^{\prime \prime }\right] =\left[
a^{\prime },x_{2}^{\prime }\right] \\
f\left( x_{1}^{\prime }\right) &\geq &f\left( x_{2}^{\prime }\right)
\Rightarrow \left[ a^{\prime \prime },b^{\prime \prime }\right] =\left[
x_{1}^{\prime },b^{\prime }\right] \end{eqnarray*}となり、探索範囲が\(1-\rho _{2}\)に絞り込まれます。

以降も同様のプロセスを繰り返します。

例(フィボナッチ探索)
関数\(f:\mathbb{R} \supset \left[ 0,6\right] \rightarrow \mathbb{R} \)はそれぞれの\(x\in \left[ 0,6\right] \)に対して、\begin{equation*}f\left( x\right) =\left( x-2\right) ^{2}
\end{equation*}を定めるものとします。先に示したように\(f\)は単峰関数であるとともに、最小点は\(c=2\)です。同じことをフィボナッチ探索を用いて確認します。ただし、\begin{equation*}N=4
\end{equation*}を採用します。この場合、\begin{eqnarray*}
\rho _{1} &=&\frac{F_{4-1-1}}{F_{4-1+1}}=\frac{F_{2}}{F_{4}}=\frac{2}{5} \\
\rho _{2} &=&\frac{F_{4-2-1}}{F_{4-2+1}}=\frac{F_{1}}{F_{3}}=\frac{1}{3} \\
\rho _{3} &=&\frac{F_{4-3-1}}{F_{4-3+1}}=\frac{F_{0}}{F_{2}}=\frac{1}{2}
\end{eqnarray*}であることに注意してください。区間\(\left[ 0,6\right] \)の三分点は、\begin{eqnarray*}x_{1} &=&0+\rho _{1}\cdot 6=\frac{12}{5} \\
x_{2} &=&0+\left( 1-\rho _{1}\right) 6=\frac{18}{5}
\end{eqnarray*}であるため、\begin{eqnarray*}
f\left( x_{1}\right) &=&f\left( \frac{12}{5}\right) \approx 0.16 \\
f\left( x_{2}\right) &=&f\left( \frac{18}{5}\right) \approx 2.56
\end{eqnarray*}を得ます。したがって、\begin{equation*}
f\left( x_{1}\right) <f\left( x_{2}\right)
\end{equation*}であり、ゆえに探索範囲は\(\left[ 0,x_{2}\right] \)すなわち\(\left[ 0,\frac{18}{5}\right] \)に絞られます。新たな区間\(\left[ 0,\frac{18}{5}\right] \)の三分点は、\begin{eqnarray*}x_{1}^{\prime } &=&0+\rho _{2}\cdot \frac{18}{5}=\frac{6}{5} \\
x_{2}^{\prime } &=&x_{1}=\frac{12}{5}
\end{eqnarray*}であるため、\begin{eqnarray*}
f\left( x_{1}^{\prime }\right) &=&f\left( \frac{6}{5}\right) \approx 0.64 \\
f\left( x_{2}^{\prime }\right) &=&f\left( \frac{12}{5}\right) \approx 0.16
\end{eqnarray*}を得ます。したがって、\begin{equation*}
f\left( x_{1}^{\prime }\right) >f\left( x_{2}^{\prime }\right)
\end{equation*}であり、ゆえに探索範囲は\(\left[ x_{1}^{\prime },\frac{18}{5}\right] \)すなわち\(\left[ \frac{6}{5},\frac{18}{5}\right] \)に絞られます。新たな区間\(\left[ \frac{6}{5},\frac{18}{5}\right] \)の三分点は、\begin{eqnarray*}x_{1}^{\prime \prime } &=&x_{2}^{\prime }=\frac{12}{5} \\
x_{2}^{\prime \prime } &=&\frac{6}{5}+\left( 1-\rho _{3}\right) \left( \frac{18}{5}-\frac{6}{5}\right) =\frac{12}{5}
\end{eqnarray*}であり、両者は\(x_{2}^{\prime }\)と一致します。つまり、新たな三分点をとることはできないため、\(\left[ \frac{6}{5},\frac{18}{5}\right] \)が最終的な探索範囲となります。真の最小点\(c\)はこの区間上にあるため、この区間の中点\(x^{\ast }\)を最小点の候補として採用した場合には、\begin{equation*}\left\vert x^{\ast }-c\right\vert \leq \frac{1}{2}\left( \frac{18}{5}-\frac{6}{5}\right) =\frac{6}{5}
\end{equation*}が成り立つため、誤差は\(\frac{6}{5}\)以下になります。

 

フィボナッチ探索の定式化

単峰関数\(f:\mathbb{R} \supset \left[ a,b\right] \rightarrow \mathbb{R} \)の最小点を特定しようとしている状況を想定します。フィボナッチ探索は以下のように定式化されます。ただし、フィボナッチ数列を\(\left\{ F_{n}\right\} \)で表記し、数値を\(N\in \mathbb{N} \)で表記します。その上で、それぞれの\(k\in\left\{ 1,\cdots ,N\right\} \)に対して、\begin{equation*}\rho _{k}=\frac{F_{N-k-1}}{F_{N-k+1}}
\end{equation*}と定義します。

    1. ステップ\(1\):当初の探索範囲を、\begin{equation*}\left[ a_{1},b_{1}\right] =\left[ a,b\right] \end{equation*}で表記する。この区間の三分点は、\begin{eqnarray*}
      \rho _{1} &=&\frac{F_{N-2}}{F_{N}} \\
      1-\rho _{1} &=&\frac{F_{N-1}}{F_{N}}
      \end{eqnarray*}のもとで、\begin{equation*}
      \left( x_{1}^{\left( 1\right) },x_{1}^{\left( 2\right) }\right) =\left(
      a_{1}+\rho _{1}\left( b_{1}-a_{1}\right) ,a_{1}+\left( 1-\rho _{1}\right)
      \left( b_{1}-a_{1}\right) \right)
      \end{equation*}と定まる。その上で、新たな探索範囲\(\left[a_{2},b_{2}\right] \)を、\begin{equation*}\left[ a_{2},b_{2}\right] =\left\{
      \begin{array}{cl}
      \left[ a_{1},x_{1}^{\left( 2\right) }\right] & \left( if\ f\left(
      x_{1}^{\left( 1\right) }\right) <f\left( x_{1}^{\left( 2\right) }\right)
      \right) \\
      \left[ x_{1}^{\left( 1\right) },b_{1}\right] & \left( if\ f\left(
      x_{1}^{\left( 1\right) }\right) \geq f\left( x_{1}^{\left( 2\right) }\right)
      \right)
      \end{array}\right.
      \end{equation*}と定める。
    2. ステップ\(2\):探索範囲\(\left[ a_{2},b_{2}\right] \)の三分点は、\begin{eqnarray*}\rho _{2} &=&\frac{F_{N-3}}{F_{N-1}} \\1-\rho _{2} &=&\frac{F_{N-2}}{F_{N-1}}
      \end{eqnarray*}のもとで、\begin{equation*}
      \left( x_{2}^{\left( 1\right) },x_{2}^{\left( 2\right) }\right) =\left\{
      \begin{array}{cl}
      \left( a_{2}+\rho _{2}\left( b_{2}-a_{2}\right) ,x_{1}^{\left( 1\right)
      }\right) & \left( if\ f\left( x_{1}^{\left( 1\right) }\right) <f\left(
      x_{1}^{\left( 2\right) }\right) \right) \\
      \left( x_{1}^{\left( 2\right) },a_{2}+\left( 1-\rho _{2}\right) \left(
      b_{2}-a_{2}\right) \right) & \left( if\ f\left( x_{1}^{\left( 1\right)
      }\right) \geq f\left( x_{1}^{\left( 2\right) }\right) \right)
      \end{array}\right.
      \end{equation*}と定まる。その上で、新たな探索範囲\(\left[a_{3},b_{3}\right] \)を、\begin{equation*}\left[ a_{3},b_{3}\right] =\left\{
      \begin{array}{cl}
      \left[ a_{2},x_{2}^{\left( 2\right) }\right] & \left( if\ f\left(
      x_{2}^{\left( 1\right) }\right) <f\left( x_{2}^{\left( 2\right) }\right)
      \right) \\
      \left[ x_{2}^{\left( 1\right) },b_{2}\right] & \left( if\ f\left(
      x_{2}^{\left( 1\right) }\right) \geq f\left( x_{2}^{\left( 2\right) }\right)
      \right)
      \end{array}\right.
      \end{equation*}と定める。
    3. ステップ\(k\):探索範囲\(\left[ a_{k},b_{k}\right] \)の三分点は、\begin{eqnarray*}\rho _{k} &=&\frac{F_{N-k-1}}{F_{N-k+1}} \\1-\rho _{k} &=&\frac{F_{N-k}}{F_{N-k+1}}
      \end{eqnarray*}のもとで、\begin{equation*}
      \left( x_{k}^{\left( 1\right) },x_{k}^{\left( 2\right) }\right) =\left\{
      \begin{array}{cl}
      \left( a_{k}+\rho _{k}\left( b_{k}-a_{k}\right) ,x_{k-1}^{\left( 1\right)
      }\right) & \left( if\ f\left( x_{k-1}^{\left( 1\right) }\right) <f\left(
      x_{k-1}^{\left( 2\right) }\right) \right) \\
      \left( x_{k-1}^{\left( 2\right) },a_{k}+\left( 1-\rho _{k}\right) \left(
      b_{k}-a_{k}\right) \right) & \left( if\ f\left( x_{k-1}^{\left( 1\right)
      }\right) \geq f\left( x_{k-1}^{\left( 2\right) }\right) \right)
      \end{array}\right.
      \end{equation*}と定まる。その上で、新たな探索範囲\(\left[a_{k+1},b_{k+1}\right] \)を、\begin{equation*}\left[ a_{k+1},b_{k+1}\right] =\left\{
      \begin{array}{cl}
      \left[ a_{k},x_{k}^{\left( 2\right) }\right] & \left( if\ f\left(
      x_{k}^{\left( 1\right) }\right) <f\left( x_{k}^{\left( 2\right) }\right)
      \right) \\
      \left[ x_{k}^{\left( 1\right) },b_{k}\right] & \left( if\ f\left(
      x_{k}^{\left( 1\right) }\right) \geq f\left( x_{k}^{\left( 2\right) }\right)
      \right)
      \end{array}\right.
      \end{equation*}と定める。
    4. ステップ\(N-1\):探索範囲\(\left[ a_{N-1},b_{N-1}\right] \)の三分点は、\begin{eqnarray*}\rho _{N-1} &=&\frac{F_{0}}{F_{2}}=\frac{1}{2} \\1-\rho _{N-1} &=&\frac{F_{1}}{F_{2}}=\frac{1}{2}
      \end{eqnarray*}のもとで、\begin{equation*}
      \left( x_{N-1}^{\left( 1\right) },x_{N-1}^{\left( 2\right) }\right) =\left(
      \frac{1}{2}\left( a_{N-1}+b_{N-1}\right) ,\frac{1}{2}\left(
      a_{N-1}+b_{N-1}\right) \right)
      \end{equation*}と定まる。つまり、\(x_{N-1}^{\left( 1\right) }=x_{N-1}^{\left( 2\right) }\)であるとともに、これは\(\left[ a_{N-1},b_{N-1}\right] \)の中点であるため三分点は存在しない。したがって、\begin{equation*}\left[ a_{N-1},b_{N-1}\right] \end{equation*}を最終的な候補と定める。真の最小点\(c\)はこの区間上にあるため、この区間の中点\(x^{\ast }\)を最小点の候補として採用した場合には、\begin{equation*}\left\vert x^{\ast }-c\right\vert \leq \frac{1}{2}\left(
      b_{N-1}-a_{N-1}\right)
      \end{equation*}が成り立つ。つまり、誤差は\(\frac{1}{2}\left( b_{N-1}-a_{N-1}\right) \)以下になる。

フィボナッチ探索の任意のステップにおいて、最小点は常に探索範囲内に残ることを確認しておきます。

命題(フィボナッチ探索の区間保持)
単峰関数\(f:\mathbb{R} \supset \left[ a,b\right] \rightarrow \mathbb{R} \)の最小点を\(c\in \left[ a,b\right] \)で表記する。番号\(N\in \mathbb{N} \)のもとでのフィボナッチ探索のステップ\(k\in \left\{ 1,\cdots ,N-1\right\} \)における探索範囲を\(\left[ a_{k},b_{k}\right] \subset \left[ a,b\right] \)で表記する場合、\begin{equation*}\forall k\in \mathbb{N} :c\in \left[ a_{k},b_{k}\right] \end{equation*}が成り立つ。

証明

プレミアム会員専用コンテンツです
ログイン】【会員登録

 

所与の誤差以内で真の最小点の近似値を実現する回数

番号\(N\in \mathbb{N} \)に関するフィボナッチ探索を実行した場合に最終的に得られる区間は、\begin{equation*}\left[ a_{N-1},b_{N-1}\right] \end{equation*}です。真の最小点\(c\)はこの区間上にあるため、この区間の中点\begin{equation*}x^{\ast }=\frac{a_{N-1}+b_{N-1}}{2}
\end{equation*}を最小点の候補として採用した場合には、\begin{equation*}
\left\vert x^{\ast }-c\right\vert \leq \frac{1}{2}\left(
b_{N-1}-a_{N-1}\right)
\end{equation*}が成り立ちます。では、逆に、真の最小点\(c\)との誤差として\(\varepsilon >0\)を採用した場合に、\begin{equation*}\left\vert x^{\ast }-c\right\vert \leq \varepsilon
\end{equation*}を満たすためには、番号\(N\)をいくつに設定すればよいでしょうか。

ちなみに、番号\(N\)のもとでのフィボナッチ探索を実行した場合、ステップ\(1\)において関数評価を2回行い、ステップ\(2\)からステップ\(N-2\)までは関数評価を1回ずつ行います。ステップ\(N-1\)では新たな三分点は出現しないため、関数評価の合計回数は、\begin{equation*}2+1\left[ \left( N-2\right) -2+1\right] =N-1
\end{equation*}となります。

命題(所与の誤差以内で真の最小値を実現する回数)
単峰関数\(f:\mathbb{R} \supset \left[ a,b\right] \rightarrow \mathbb{R} \)の最小点を\(c\in \left[ a,b\right] \)で表記する。番号\(N\in \mathbb{N} \)のもとでのフィボナッチ探索のステップ\(k\in \left\{ 1,\cdots ,N-1\right\} \)における探索範囲を\(\left[ a_{k},b_{k}\right] \subset \left[ a,b\right] \)で表記し、\(\left[ a_{N-1},b_{N-1}\right] \)の中点を、\begin{equation*}x^{\ast }=\frac{a_{N-1}+b_{N-1}}{2}
\end{equation*}と表記する。また、フィボナッチ数列を\(\left\{ F_{n}\right\} \)で表記する。真の最小点\(c\)との誤差として\(\varepsilon >0\)を採用した場合、\begin{equation*}F_{N}\geq \frac{b-a}{2\varepsilon }
\end{equation*}を満たす\(N\in \mathbb{N} \)のもとでは、\begin{equation*}\left\vert x^{\ast }-c\right\vert \leq \varepsilon
\end{equation*}が成り立つ。

証明

プレミアム会員専用コンテンツです
ログイン】【会員登録

例(所与の誤差以内で真の最小値を実現する回数)
初期の区間\(\left[ a,b\right] \)の長さが、\begin{equation*}b-a=1
\end{equation*}であるとともに、誤差が、\begin{equation*}
\varepsilon =10^{-6}
\end{equation*}である場合には、\begin{eqnarray*}
F_{N} &\geq &\frac{b-a}{2\varepsilon } \\
&=&\frac{1}{2\cdot 10^{-6}} \\
&=&5\times 10^{5} \\
&=&500000
\end{eqnarray*}となります。その一方で、フィボナッチ数列\(\left\{ F_{n}\right\} \)は、\begin{eqnarray*}F_{28} &=&317811 \\
F_{29} &=&514229
\end{eqnarray*}であるため、\begin{eqnarray*}
F_{28} &<&500000 \\
F_{29} &>&500000
\end{eqnarray*}が成り立ちます。したがって、\begin{equation*}
N=29
\end{equation*}と定まります。関数評価の合計回数は、\begin{equation*}
N-1=28
\end{equation*}です。

 

フィボナッチ探索と黄金分割探索の比較

先の命題の証明において明らかにしたように、初期区間が\(\left[ a,b\right] \)である場合、番号\(N\)のもとでのフィボナッチ探索を行うと関数評価が\(N-1\)回行われるとともに、最終的な区間\(\left[ a_{N-1},b_{N-1}\right] \)の長さは、\begin{equation*}b_{N-1}-a_{N-1}=\frac{b-a}{F_{N}}
\end{equation*}となります。ただし、\(F_{N}\)はフィボナッチ数列\(\left\{ F_{n}\right\} \)の第\(N\)項です。この値\(\frac{b-a}{F_{N}}\)は、関数評価回数が\(N-1\)回であるという制約のもとで達成できる最小の区間長であることが知られています。つまり、フィボナッチ探索は、限られた回数の関数評価のもとで誤差を最小化するため、黄金分割探索よりも効率的なアルゴリズムです。

一方、黄金分割探索では、各ステップで区間を一定の値\(\rho =\frac{\sqrt{5}-1}{2}\)にもとづいて分割するため、実装が簡単であり、途中で停止しても近似解が得られるという利点を持ちます。ただし、先述のように、関数評価の回数を固定した場合には、フィボナッチ探索のほうが正確な結果をもたらします。

以上を踏まえると、評価回数が制限されている場合にはフィボナッチ探索が最適であり、柔軟に計算を打ち切りたい場合には黄金分割探索が実用的であることが明らかになりました。つまり、両者は競合する手法ではなく、目的に応じて使い分けるべき手法であると言えます。

alg-005 alg-004 alg-003

関連知識

メール
Xで共有
イスラエルとイランの対立はなぜ起きるのか。本記事ではジョン・ミアシャイマーの攻撃的リアリズムをもとに、イランの核開発、イスラエルの先制攻撃、米国の中東戦略、安全保障ジレンマの観点から今回の紛争を解説します。
技術分野では誤った判断が即座に故障や事故を招くため慎重になりますが、政治・教育・財政政策などの社会科学分野では結果が長期的で目に見えにくく、独りよがりの意見を述べやすくなります。本稿では、社会科学分野の知識を軽視する危うさと、専門知識を尊重する姿勢の重要性を解説します。
ランナーが怪我をしているのに走ってしまう理由を、簡単な経済学のモデルを用いて説明します。ポイントは時間不整合性(現在バイアス)です。
黄金分割探索(Golden section search)は単峰関数の最小値(最大値)を求めるための基本的な探索アルゴリズムです。本稿では黄金分割探索の仕組みを定式化し、区間保持、収束、誤差評価を数学的に証明するとともに、三分探索との違いを解説します。
三分探索(Ternary Search)は単峰関数の最小値(最大値)を求めるための基本的な探索アルゴリズムです。本稿では三分探索の仕組みを定式化し、区間保持、収束、誤差評価を数学的に証明します。
経済学でよく用いられる対応(correspondence)の連続性について、誤解が多いと思われる事実について整理します。
ユダヤ教はキリスト教やイスラム教徒と同様、唯一絶対の神から与えられた啓典を信仰の基盤にする啓典宗教です。ユダヤ教の特徴は、集団救済の宗教であり、外的規範の実践を重視する規範宗教であるという点です。その意味を解説します。
写真が本格的に発達した19世紀の中頃は、絵画を中心に印象派が勃興した時代でもあります。印象派の作風は写実主義の対極にあるように見えますが、実は、その成り立ちは写真の発明や普及と深い関係があることが指摘されています。写真が普及するまでの歴史的経緯を追いながら、印象派に及ぼした影響について解説します。
0は自然数なのでしょうか。0を自然数に含める流儀と含めない流儀がありますが、どちらが正しいか決め手はありません。重要なのは定義を共有しておくことです。ここでは後続集合を用いた定義や、帰納的集合を用いた定義などを紹介します。
オークションの入札者は商品への評価額などを私的情報として持っています。入札者たちが自身の利益を最大化するために真の評価額とは異なる金額を入札する結果、オークション市場ではインセンティブの問題が発生します。オークション理論はインセンティブの問題を解消するためのオークションメカニズムを設計する学問です。
もともとメキシコ領であったカリフォルニアからテキサスへ至る領域は、テキサス併合やメキシコ・アメリカ戦争(米墨戦争)などを経てアメリカへ編入されます。こうした動きを正当化するスローガンとして叫ばれたのが「明白な使命(マニフェスト・デスティニー)」。その意味を、時代背景やアメリカという国の成り立ちとともに解説します。
アダム・スミスの経済に関する思想は、社会秩序を導く人間本性について考察した著作である『道徳感情論』と関連付けながら理解する必要があります。今回はそのような立場からスミスの思想を概観します。
デカルトは『方法序説』において、理性の力を取り戻し、理性を活用するための方法を 4 つの準則としてまとめました。今回はデカルトの準則を参考にして、簡単には解けそうにない数学の問題に直面したときの対処方法を準則としてまとめます。
小学校などで割り算を学ぶ際に、「0では割ってはいけない」ことを理屈で説明するのではなく、守るべき「お約束」として習います。今回はその理由を体と呼ばれる数学概念を利用して解説します。
対戦競技におけるプレイヤーの実力を表す指標をレーティングと呼びます。対戦競技には相手がいるため、レーティングは実際の対戦結果から決定すべきです。イロ・レーティングシステムは1対1の対戦競技におけるレーティング決定ルールであり、チェスや将棋、囲碁、アメフト、サッカー、テニスなどの様々な対戦競技において採用されています。
日本では計算機が登場する前にそろばんが広く使われていましたが、西欧社会ではどのような道具が使われていたのでしょうか。フランス人の鉄道技術者ヘンリ・ルーカスが 1891 年に開発したジェナイル・ルーカスの定規は、計算機が登場する以前の西欧社会において科学者や会計士の間で広く使われていた計算道具です。
金利とは何でしょうか?また、経済に大きな影響を与える金利は長期の実質金利ですが、それはなぜでしょうか?金利の水準はどのように決まるでしょうか?また、中央銀行である日銀が行う金利引き下げと量的緩和とはどのような政策であり、それはどのような効果を持つのでしょうか。以上のポイントについて分かりやすく解説します。
17 世紀にオランダで起きたチューチップ・バブルとはどのような現象でしょうか?また、その原因は?バブルを加速させた金融商品であるコール・オプションとは何か?また、資産価値を評価する考え方としてファンダメンタル価値理論と群集心理説の 2 つが有力ですが、これらの考え方を用いるとチューリップ・バブルはどのように解釈できるでしょうか?これらのポイントについて解説します。

質問とコメント

プレミアム会員専用コンテンツです

会員登録

有料のプレミアム会員であれば、質問やコメントの投稿と閲覧、プレミアムコンテンツ(命題の証明や演習問題とその解答)へのアクセスなどが可能になります。

WIISでは、年齢・性別・学歴・職業・社会的立場などにかかわらず、すべてのユーザーが「学ぶ人」として対等であると考えています。ここは、知識を競う場所ではなく、互いに尊重し合いながら理解を深めていく場です。安心して思考し、質問し、考え続けられる環境を、みなさんと一緒につくっていきたいと考えています。

誤字脱字、リンク切れ、内容の誤りを発見した場合にはコメントに投稿するのではなく、以下のフォームからご連絡をお願い致します。

プレミアム会員専用コンテンツです
ログイン】【会員登録