非線形計画法(Nonlinear Programming、NLP)
非線形計画法(Nonlinear Programming、NLP)は、目的関数と制約条件が非線形となる最適化問題を扱います。
今回は、非線形最適化の典型的な例題として、以下の問題を考えます。
例題
最小化する関数と条件は以下の通りです。
minimize f(x,y)=(x−1)2+(y−1)2
制約条件:
g1(x,y)=x2+y2−1≤0
g2(x,y)=x≥0
g3(x,y)=y≥0
この問題をPythonのscipy.optimize
を使って解き、その結果をグラフ化します。
必要なライブラリのインストール
Google Colab環境で以下のコマンドを実行して必要なライブラリをインストールします。
1 | !pip install scipy matplotlib |
コード
以下がこの問題を解き、その結果をグラフ化するPythonコードです。
1 | import numpy as np |
解説
最適化する関数の定義:
目的関数 (f(x,y)=(x−1)2+(y−1)2)を定義します。制約条件の定義:
非線形制約 (g1(x,y)=x2+y2−1≤0)を定義します。境界条件の定義:
(x≥0)および(y≥0)に対応する境界条件を定義します。制約条件のリスト
constraints
:
制約条件をリスト形式で定義します。初期点の設定
x0
:
最適化アルゴリズムの初期点を設定します。最適化の実行
result
:
scipy.optimize.minimize
を使用して最適化を実行します。
methodにはSLSQP
(Sequential Least Squares Programming)を使用します。結果の出力:
得られた最適解と最小値を表示します。グラフ化:
- 目的関数の等高線を描画。
- 制約条件 (x2+y2≤1)の境界線を描画。
- 最適解を赤い点でプロット。
- 制約条件を満たす領域を灰色で塗りつぶします。
以上で、非線形最適化問題の解と制約条件を含む結果をグラフで視覚的に確認できます。