Matlab は非線形計画法を解きます (fmincon 関数の使用)

最近、記事を書くときに最適化のために fmincon 関数を使用する必要があるので、時間をかけて学習しました; いつものように、学習プロセスを記録するためにブログ記事を開き続けます

参考文献:
[制約付き非線形多変量関数の最小値を求める - MathWorks]
[Matlab で非線形計画法を解く、fmincon 関数の使い方まとめ - Blog Park]
[Matlab 非線形計画法 - Blog Park]

1 はじめに

Matlab では、fminconこの関数は制約付き非線形多変数関数 (制約付き非線形多変数関数) の最小値を解くことができます。つまり、非線形計画問題を解くために使用できます。

Matlab では、非線形計画モデルは次のように記述されます。

最小 f ( x ) s 。と。{ A ⋅ x ≤ b A eq ⋅ x = beqc ( x ) ≤ 0 ceq ( x ) = 0 lb ≤ x ≤ ub min \; f(x) \\ st \begin{cases} A·x ≤b \\ Aeq·x = beq \\ c(x)≤0\\ ceq(x) = 0\\ lb≤x≤ub \end{場合}f ( x )s バツbA e q バツ=ベク_ _c ( x )0ce q ( x )=0l bバツあなた

  • A. Aeq は線形制約に対応する行列です。
  • b. beq は線形制約に対応するベクトルです
  • C(x)、Ceq(x) は非線形制約 (ベクトルを返す関数) です。
  • f(x) は目的関数 (スカラーを返す関数) です。

2. 文法

Matlab 要求解読コマンド:
x = fmincon ( fun , x 0 , A , b , A eq , beq , lb , ub , nonlcon , options ) x = fmincon(fun,x0,A, b,Aeq,beq,lb,ub 、非Lコン、オプション)バツ=f min con ( f un , _ _× 0 b A e q ベク_ _ _l b いいえ_ _ _ _ _オプション) _ _ _ _ _

  • x の戻り値は決定ベクトル x の値、fval の戻り値は目的関数 f(x) の値です。
  • fun は、M ファイルで定義された関数 f(x) であり、(非) 線形目的関数を表します。
  • x0 は x の初期値です
  • A、b、Aeq、beq は線形制約を定義します。線形制約がない場合は、A=[]、b=[]、Aeq=[]、beq=[] となります。
  • lb と ub は、変数 x の下限と上限です。下限と上限に制約がない場合は、lb=[]、ub=[]、lb の各成分が -inf であると書くこともできます。 、ub の各コンポーネントは inf です
  • nonlcon は、M ファイルで定義された非線形ベクトル関数制約です。
  • オプションは最適化パラメータを定義します。入力されていない場合は、Matlab のデフォルトのパラメータ設定を使用することを意味します。

3. 例

次の非線形計画問題を解きます:
min f ( x ) = x 1 2 + x 2 2 + x 3 2 + 8 s . t . { x 1 2 − x 2 + x 3 2 ≥ 0 x 1 2 + x 2 2 + x 3 2 ≤ 20 − x 1 2 − x 2 2 + 2 = 0 x 2 + 2 x 3 2 = 3 x 1 , x 2 , x 3 ≥ 0 分 \; f(x) = x_{1}^ 2 + x_{2}^2+x_{3}^2+8 \\ st \begin{件} x_{1}^2-x_{2} +x_{3}^2≥0 \\ x_{1 }^2+x_{2}^2 +x_{3}^2≤20 \\ -x_{1}^2-x_{2}^2 +2=0\\ x_{2} +2x_{3} ^2=3\\ x_{1}, x_{2} ,x_{3}≥0 \end{件}f ( x )=バツ12+バツ22+バツ32+8s バツ12バツ2+バツ320バツ12+バツ22+バツ3220×12バツ22+2=0バツ2+2倍_32=3バツ1バツ2バツ30

3.1 M 関数 fun1.m を記述し、目的関数を定義する

function f = fun1(x)
f = x(1).^2 + x(2).^2 + x(3).^2 + 8;
end

3.2 M 関数 fun2.m を作成し、非線形制約を定義する

function [g,h] = fun2(x)
g(1) = - x(1).^2 + x(2) - x(3).^2;
g(2) = x(1) + x(2).^2 + x(3).^3 - 20;
% g代表不等式约束,Matlab中默认g<=0,所以这里取相反数
h(1) = - x(1).^2 - x(2).^2 + 2;
h(2) = x(2) + 2 * x(3).^2 - 3;
% h代表等式约束        
end

3.3 メインプログラム関数の作成

options = optimset;
[x, y] = fmincon('fun1', rand(3, 1), [], [], [], [], zeros(3, 1), [], 'fun2', options)
% 'fun1'代表目标函数,rand(3, 1)随机给了x初值,zeros(3, 1)代表下限为0,即x1, x2, x3>=0, 'fun2'即刚才写的约束条件

得られた結果、x は最適解、y は最適値:
x 1 = 0.6312 、 x 2 = 1.2656 、 x 3 = 0.9312 y = 10.8672 x_{1}=0.6312,x_{2}=1.2656,x_{3 } =0.9312\\ y=10.8672バツ1=0.6312 バツ2=1.2656 バツ3=0.9312y=10.8672

おすすめ

転載: blog.csdn.net/Arcann/article/details/109563868