このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
最適化問題では,目的関数または制約関数は独立変数のほかにパラメーターをもつことがあります。追加パラメーターではデータを使用したり,最適化中に変化しない変数を表したりできます。
問題ベースのアプローチでこれらのパラメーターを含めるには,単に目的関数または制約関数のワークスペース変数を参照します。
たとえば,particle.mat
ファイルに行列C
およびd
があり,これらの行列が問題のデータを表しているとします。データをワークスペースに読み込みます。
负载粒子
行列のサイズを表示します。
disp(大小(C))
2000 400
disp(大小(d))
2000年1
ベクトルC * x
の形成に適切なサイズの最適化変数x
を作成します。
x = optimvar (“x”、大小(C, 2));
x
が非負であるという制約の下でC * x - d
の各項の二乗和を最小化する最適化問題を作成します。
x.LowerBound = 0;概率= optimproblem;expr = sum((C*x - d).^2);概率。目标= expr;
目的関数の式でデータC
およびd
を参照するだけで,これらのデータを問題に含めることができます。問題を解きます。
[溶胶,fval exitflag、输出]=解决(问题)
使用lsqlin解决问题。找到满足约束条件的最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。
索尔=结构体字段:x (x1 400双):
fval = 22.5795
exitflag = OptimalSolution
输出=结构体字段:消息:“……' algorithm: 'interior-point' firstderopt: 9.9673e-07 construct: 0 iterations: 9 linearsolver: 'sparse' cgiterations: [] solver: 'lsqlin'
非線形問題に同じアプローチを使用します。たとえば,複数の変数の目的関数があり、これらの変数の一部が最適化の固定データであるとします。
类型parameterfun
函数y = parameterfun (x, a, b, c) y = x (a - b * (1) ^ 2 + x (1) ^ 4/3) * x (1) ^ 2 + x (1) * (2) + (- c + c * x (2) ^ 2) * x (2) ^ 2;
この目的関数では,x
は2要素ベクトル,一个
、b
,およびc
はスカラーパラメーターです。最適化変数を作成し,ワークスペースでパラメーター値を割り当てます。
= 4;b = 2.1;c = 4;x = optimvar (“x”,2);
最適化問題を作成します。この目的関数はx
の有理関数であるため,目的を最適化変数として指定できます。点x0。x= [1/2;1/2]
から始めて問題を解きます。
概率= optimproblem;概率。目标= parameterfun (x, a, b, c);x0。x= [1/2;1/2]; [sol,fval] = solve(prob,x0)
使用fminunc解决问题。局部最小值。由于梯度的大小小于最优性公差的值,优化完成。
索尔=结构体字段:x (2 x1双):
fval = -1.0316
parameterfun
がサポート対象関数で構成されていない場合は,parameterfun
を最適化式に変換して,その式を目的として設定します。詳細は,最適化変数および式でサポートされる演算と非線形関数から最適化式への変換を参照してください。
expr = fcn2optimexpr (@parameterfun x, a, b, c);概率。目标= expr;[溶胶,fval] =解决(x0概率)
使用fminunc解决问题。局部最小值。由于梯度的大小小于最优性公差的值,优化完成。
索尔=结构体字段:x (2 x1双):
fval = -1.0316
The MathWorks, Inc.版权所有