Compose-4030:OMLでの最適化アルゴリズム
ComposeのOML言語は、関数値の最小化とゼロ値の検出に使用する最適化ソルバーを提供します。このソルバーには、非制約最小化に使用するfminunc、制約最小化に使用するfminconとga、および連立非線形方程式の解法に使用するfsolveが用意されています。
このチュートリアルでは、次のように定義した2つの交差していない楕円体間の最小距離を探し出す問題で、それぞれのソルバーの機能を紹介します。
(x-1)2/25 + (y-2)2/16 + (z-3)2/9 = 1
(x-12)2/49 +(y-13)2/81 + (z-14)2/36 = 1

最適化問題の定義
(x1,y1,z1)を1番目の楕円体上にあるポイント、(x2,y2,z2)を2番目の楕円体上にあるポイントとします。ここでの目標は、これらのポイント間の距離が最短になるようにポイントを選択することにあります。距離の二乗を最小化すると都合がいいので、次のように目的関数fを定義します。
f(x1,y1,z1,x2,y2,z2) = (x1-x2)^2 + (y1-y2)^2 + z1-z2)^2
この最小化問題には、これらのポイントが楕円体上に存在するという制約を適用します。
fsolveで使用する連立方程式の作成
fsolveを使用した最短距離の計算ではラグランジュ乗数法を使用します。この方法は、制約付き最小化問題を連立非線形方程式に変換します。
このチュートリアルでは詳しく説明しませんが、基本的な考え方は、解となるポイントには、それらを結ぶベクトルがそれら各ポイントにおける楕円体の法線ベクトルと平行になるという特性があるということです。この平行条件および解となるポイントが楕円体上に存在するという要件を連立方程式で適用します。その結果は、8 つの方程式から成る連立方程式になります。
fsolveによる初期値と解の定義
fsolve関数では、解の初期推定値が必要です。この問題の場合は、ほとんどの推定値が適切ですが、便宜上、楕円体の中心に近いポイントを選択します(実際の中心を選択すると、Residualsに過剰な数の0が生成されます)。

各ポイントとそれらの間隔は次のようになります。

fminconで使用する目的関数と制約関数の作成
fsolveで使用するラグランジュ法は、fminconで内部的に実装されるので、fminconでは設定が通常とは異なります。次のように、目的関数と制約関数を明示的に記述します。
fminconによる初期値と解の定義
fminconでは、fsolveと同様に初期推定値が必要です。また、この関数では、設計変数に対する限度値も使用できます。コードは次のようになります。

この問題に設定された制約が線形であればConFunc()関数は不要です。その代わり、fminconには、線形不等式制約が3番目と4番目の引数で行列として渡され、線形等式制約が5番目と6番目の引数で行列として渡されます。
各ポイントとそれらの間隔は次のようになります。

gaで使用する目的関数と制約関数の作成
gaは遺伝的アルゴリズムです。この関数は導関数を使用しないので、このデモの問題に関しては、他の方法よりも非効率的です。
gaによる初期値と解の定義

試行錯誤により、この問題では、母集団サイズがデフォルト値を上回ると、より優れた結果が得られることがわかります。

gaには、高精度な結果を期待することはできません。導関数を使用した方法を適用できない問題で使用することをお勧めします。
fminuncで使用する目的関数の作成
fminuncを使用して問題を解くには、その問題を非制約問題に変換する必要があります。その変換を実現するには、制約の記述が別途必要になることがないように、制約に関して目的関数をパラメーター化し直す必要があります。通常は、この処理は不可能です。
fminuncによる初期値と解の定義
fminuncでは、角度の初期推定値が必要です。この問題の場合は、0以外のほとんどの推定値が適切です。コードは次のようになります。

各ポイントとそれらの間隔は次のようになります。




