Optimization Toolbox を使用した問題ベースの最適化
自然な構文を使用して、最適化問題、最小二乗問題、連立非線形方程式を定義して解きます。
| 1.問題の定義 |
|---|
問題ベースのワークフローに従い、まず 例: assignmentProb = optimproblem responseProb = optimproblem initialStateProb = eqnproblem |
| 2.変数の定義 |
|---|
例: x = optimvar("x");
y = optimvar("y");
employees = ["a","b","c"];
tasks = ["t1","t2","t3"];
assign = optimvar("assign",employees,tasks,"LowerBound",0,"UpperBound",1,"Type","integer")
|
| 3.目的関数、制約、方程式の中で使用する式の定義 | |
|---|---|
サポートされる演算を使用して、 例: response = -3*(y - x.^3 - x).^2 - (x - 4/3).^2; totalCost = sum(sum(cost.*assign)); sumByEmployee = sum(assign,2); sumByTask = sum(assign,1); |
任意の MATLAB® 関数を使用するには、 例: a = 4; xyfcn = @(x,y,a)gamma(y)*a*x.^2; xyexpr = fcn2optimexpr(xyfcn,x,y,a); |
| 4.目的関数の定義 | |
|---|---|
最適化の意味を設定します。スカラー |
例: responseProb.ObjectiveSense = "maximize"; responseProb.Objective = response; assignmentProb.ObjectiveSense = "minimize"; assignmentProb.Objective = totalCost; |
| 5.制約と方程式の定義 |
|---|
例: responseProb.Constraints.ellipse = x.^2/2 + y.^2/4 <= 1; responseProb.Constraints.xyconstr = xyexpr >= 1; assignmentProb.Constraints.oneTaskPerEmployee = sumByTask <= 1; assignmentProb.Constraints.oneEmployeePerTask = sumByEmployee == 1; initialStateProb.Equations.eq1 = x*cos(y) + y*sin(x) == 1/2; initialStateProb.Equations.eq2 = exp(-exp(-(x + y))) == y*(1 + x^2); |
| 6.確認 | |
|---|---|
show と showbounds を使用して表示します。write と writebounds を使用してファイルに書き込みます。
|
ワークスペース ブラウザーを使用して表示します。
|
| 7.求解と解析 | |
|---|---|
問題を解きます。非線形問題では初期点を提供します。 例: x0.x = 0; x0.y = 0; [sol,fval,exitflag] = solve(responseProb,x0)
|
最適化オプションを使用して解きます。 例: o = optimoptions(assignmentProb,"MaxTime",10); sol = solve(assignmentProb,"Options",o) さらにできること
|