大域的非線形数値最適化の例

複数の最適解を求める,メソッド1

これは複数の極小値を求めるひとつの方法である.異なる乱数の種でNMinimizeを複数回呼び出す.これにより異なる最適化のパスが取られる.

これで,一連の極小値を用いて関数を定義する:
異なる乱数の種を使うことで解の表を作成する:
次に解を点に変換し,関数の等高線プロット上にプロットする:

複数の最適解を求める,メソッド2

次は複数の極小値の別の求め方である.まず通過するすべての点のリストを作るように目的関数を書き,次に最終的な解に近い目的関数の値を持つ点を選ぶ.

以下で一連の極小値を持つ関数を定義する:
ReapNMinimizeの解とEvaluationMonitorで播かれた点を返す:
次は最終的な解に近い目的関数の値のすべての点である.これらを白く,最終解を黒くし,関数の等高線上にプロットする:

データの非線形フィットを求める

次は5つの乱数パラメータに基づくモデルを定義する:
ここで,このモデルとパラメータから関数を作成し,区間 におけるサンプル点を生成する:
次にこの点とFindFitによる解をプロットする.三角関数であるため,解は極小値により捕えられる:
以下でデータから平方和を生成し,NMinimizeを使って最小値を求める.
その点とNMinimizeの解をプロットしたものである:

Solveの例

この連立方程式は非常に非代数的なので,Solveは使えない:
NMinimizeに一定の目的関数と,制約条件として解かれる方程式を与える.これで解が見付かる:

チェス盤上のクィーン

pos1pos2を攻撃している場合にのみattackQ[pos1,pos2]Trueとなる:
countAttacks[vec]は実数のベクトルをクイーンの置換に変換し,攻撃回数を数える:
次の式は,置換されると配置を示す:
次ではどのクイーンも他のクイーンを攻撃しないようにチェス盤上の全クイーンに適用するようにDifferentialEvolutionを用いる.離散問題の性質上後処理は役に立つとは思えないので行わないようにしておく:
次が解である: