optimize プログラム仕様

最適化アルゴリズムを使用して関数の最小値を探索するスクリプト。

本スクリプトは、シンプレックス法、最急降下法、共役勾配法、ニュートン法などの 様々な最適化アルゴリズムを適用して、指定された目的関数の最小値を見つけます。 ユーザーは、楕円関数、一般関数、円関数の中から目的関数を選択でき、 初期点、アルゴリズム、ラインサーチモード、グラフ表示設定などを コマンドライン引数またはスクリプト内の設定でカスタマイズ可能です。 最適化の過程はグラフとしてリアルタイムに可視化されます。

関連リンク: optimize.py 技術ドキュメント

optimize.optimize.cfunc(optdata)[ソース]

最適化プロセスの各イテレーションで呼び出されるコールバック関数です。

現在の最適化ステップにおけるパラメータをリカバリし、 グラフ表示が有効な場合は最適化の軌跡をプロットして可視化します。 この関数が0より大きい値を返すと、シンプレックスのイテレーションは終了します。

パラメータ:

optdata -- tklib.tksci.tkoptimize.tkOptimizeの内部データオブジェクト - 最適化に関する現在の状態を保持します。

戻り値:

int - 常に0を返し、最適化を継続させます。

optimize.optimize.diff1(i, x, optdata=None)

目的関数がgeneralの場合の第1次偏導関数を計算します。

複雑な一般関数の x_i に関する偏導関数を返します。

パラメータ:
  • i -- int - 偏導関数を計算する変数軸のインデックス (0または1)。

  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 指定された軸 i における目的関数の第1次偏導関数の値。

optimize.optimize.diff2(i, j, x, optdata=None)

目的関数がgeneralの場合の第2次偏導関数(ヘッセ行列の要素)を計算します。

複雑な一般関数の x_i, x_j に関する2次偏導関数を返します。

パラメータ:
  • i -- int - 第1変数軸のインデックス (0または1)。

  • j -- int - 第2変数軸のインデックス (0または1)。

  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 指定された軸 i, j における目的関数の第2次偏導関数の値。

optimize.optimize.ediff1(i, x, optdata=None)[ソース]

目的関数がellipsoidの場合の第1次偏導関数を計算します。

軸が揃った楕円関数 f(x0, x1) = x0^2 + 9x1^2 の x_i に関する偏導関数を返します。

パラメータ:
  • i -- int - 偏導関数を計算する変数軸のインデックス (0または1)。

  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 指定された軸 i における目的関数の第1次偏導関数の値。

optimize.optimize.ediff1b(i, x, optdata=None)[ソース]

目的関数がellipsoid2の場合の第1次偏導関数を計算します。

交差項を持つ楕円関数 f(x0, x1) = ae2xx*x0^2 + ae2xy*x0*x1 + ae2yy*x1^2 の x_i に関する偏導関数を返します。

パラメータ:
  • i -- int - 偏導関数を計算する変数軸のインデックス (0または1)。

  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 指定された軸 i における目的関数の第1次偏導関数の値。

optimize.optimize.ediff1c(i, x, optdata=None)[ソース]

目的関数がcircleの場合の第1次偏導関数を計算します。

円関数 f(x0, x1) = acxx*(x0^2 + x1^2) の x_i に関する偏導関数を返します。

パラメータ:
  • i -- int - 偏導関数を計算する変数軸のインデックス (0または1)。

  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 指定された軸 i における目的関数の第1次偏導関数の値。

optimize.optimize.ediff2(i, j, x, optdata=None)[ソース]

目的関数がellipsoidの場合の第2次偏導関数(ヘッセ行列の要素)を計算します。

軸が揃った楕円関数 f(x0, x1) = x0^2 + 9x1^2 の x_i, x_j に関する2次偏導関数を返します。

パラメータ:
  • i -- int - 第1変数軸のインデックス (0または1)。

  • j -- int - 第2変数軸のインデックス (0または1)。

  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 指定された軸 i, j における目的関数の第2次偏導関数の値。

optimize.optimize.ediff2b(i, j, x, optdata=None)[ソース]

目的関数がellipsoid2の場合の第2次偏導関数(ヘッセ行列の要素)を計算します。

交差項を持つ楕円関数 f(x0, x1) = ae2xx*x0^2 + ae2xy*x0*x1 + ae2yy*x1^2 の x_i, x_j に関する2次偏導関数を返します。

パラメータ:
  • i -- int - 第1変数軸のインデックス (0または1)。

  • j -- int - 第2変数軸のインデックス (0または1)。

  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 指定された軸 i, j における目的関数の第2次偏導関数の値。

optimize.optimize.ediff2c(i, j, x, optdata=None)[ソース]

目的関数がcircleの場合の第2次偏導関数(ヘッセ行列の要素)を計算します。

円関数 f(x0, x1) = acxx*(x0^2 + x1^2) の x_i, x_j に関する2次偏導関数を返します。

パラメータ:
  • i -- int - 第1変数軸のインデックス (0または1)。

  • j -- int - 第2変数軸のインデックス (0または1)。

  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 指定された軸 i, j における目的関数の第2次偏導関数の値。

optimize.optimize.efunc(x, optdata=None)[ソース]

軸が揃った楕円関数を評価します。

f(x0, x1) = x0^2 + 9x1^2 を計算します。

パラメータ:
  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 目的関数の値。

optimize.optimize.efuncb(x, optdata=None)[ソース]

交差項を持つ楕円関数を評価します。

f(x0, x1) = ae2xx*x0^2 + ae2xy*x0*x1 + ae2yy*x1^2 を計算します。

パラメータ:
  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 目的関数の値。

optimize.optimize.efuncc(x, optdata=None)[ソース]

円関数を評価します。

f(x0, x1) = acxx*(x0^2 + x1^2) を計算します。

パラメータ:
  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 目的関数の値。

optimize.optimize.func(x, optdata=None)

一般的な非線形関数を評価します。

複数の項からなる複雑な2変数関数 f(x0, x1) を計算します。

パラメータ:
  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 目的関数の値。

optimize.optimize.gdiff1(i, x, optdata=None)[ソース]

目的関数がgeneralの場合の第1次偏導関数を計算します。

複雑な一般関数の x_i に関する偏導関数を返します。

パラメータ:
  • i -- int - 偏導関数を計算する変数軸のインデックス (0または1)。

  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 指定された軸 i における目的関数の第1次偏導関数の値。

optimize.optimize.gdiff2(i, j, x, optdata=None)[ソース]

目的関数がgeneralの場合の第2次偏導関数(ヘッセ行列の要素)を計算します。

複雑な一般関数の x_i, x_j に関する2次偏導関数を返します。

パラメータ:
  • i -- int - 第1変数軸のインデックス (0または1)。

  • j -- int - 第2変数軸のインデックス (0または1)。

  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 指定された軸 i, j における目的関数の第2次偏導関数の値。

optimize.optimize.gfunc(x, optdata=None)[ソース]

一般的な非線形関数を評価します。

複数の項からなる複雑な2変数関数 f(x0, x1) を計算します。

パラメータ:
  • x -- list or numpy.ndarray - 変数 x の現在値 [x0, x1]。

  • optdata -- dict or object, optional - 最適化に関連する追加データ(この関数では未使用)。

戻り値:

float - 目的関数の値。

optimize.optimize.main()[ソース]

メイン処理を実行し、最適化プロセスを初期化、実行、可視化します。

コマンドライン引数を解析して最適化パラメータを設定し、tkOptimizeインスタンスを 作成して最適化関数とアルゴリズムを設定します。 初期パラメータの表示、目的関数の等高線および3D曲面のプロット、 最適化の実行、最終結果の表示と保存を行います。