evaluate
最適化式または問題に含まれる目的関数と制約の評価
説明
evaluate
は、ある点における最適化式の数値を求めたり、最適化問題に含まれる目的関数と制約式の一連の点における値を求めたりする場合に使用します。
ヒント
完全なワークフローについては、問題ベースの最適化ワークフローまたは方程式を解くための問題ベースのワークフローを参照してください。
例
点での最適化式の評価
2 変数の最適化式を作成します。
x = optimvar("x",3,2); y = optimvar("y",1,2); expr = sum(x,1) - 2*y;
点で式を評価します。
xmat = [3,-1; 0,1; 2,6]; sol.x = xmat; sol.y = [4,-3]; val = evaluate(expr,sol)
val = 1×2
-3 12
解での目的関数の評価
線形計画問題を解きます。
x = optimvar('x'); y = optimvar('y'); prob = optimproblem; prob.Objective = -x -y/3; prob.Constraints.cons1 = x + y <= 2; prob.Constraints.cons2 = x + y/4 <= 1; prob.Constraints.cons3 = x - y <= 2; prob.Constraints.cons4 = x/4 + y >= -1; prob.Constraints.cons5 = x + y >= 1; prob.Constraints.cons6 = -x + y <= 2; sol = solve(prob)
Solving problem using linprog. Optimal solution found.
sol = struct with fields:
x: 0.6667
y: 1.3333
解での目的関数の値を求めます。
val = evaluate(prob.Objective,sol)
val = -1.1111
最適化問題の値の評価
いくつかの線形制約と非線形制約を含む最適化問題を作成します。
x = optimvar("x"); y = optimvar("y"); obj = (10*(y - x^2))^2 + (1 - x)^2; cons1 = x^2 + y^2 <= 1; cons2 = x + y >= 0; cons3 = y <= sin(x); cons4 = 2*x + 3*y <= 2.5; prob = optimproblem(Objective=obj); prob.Constraints.cons1 = cons1; prob.Constraints.cons2 = cons2; prob.Constraints.cons3 = cons3; prob.Constraints.cons4 = cons4;
100 個のテスト ポイントをランダムに作成します。
rng default % For reproducibility xvals = randn(1,100); yvals = randn(1,100);
点を問題の OptimizationValues
オブジェクトに変換します。
pts = optimvalues(prob,x=xvals,y=yvals);
点 pts
で目的関数と制約関数を評価します。
val = evaluate(prob,pts);
目的関数の値は val.Objective
に格納され、制約関数の値は val.cons1
~ val.cons4
に格納されます。目的関数の値に 1 を加算した値の対数をプロットします。
figure
plot3(xvals,yvals,log(1 + val.Objective),"bo")
制約 cons1
と cons4
の値をプロットします。制約が満たされるのは、値が非正の数値になる場合であることに注意してください。非正の値を円、正の値を x のマークでプロットします。
neg1 = val.cons1 <= 0; pos1 = val.cons1 > 0; neg4 = val.cons4 <= 0; pos4 = val.cons4 > 0; figure plot3(xvals(neg1),yvals(neg1),val.cons1(neg1),"bo") hold on plot3(xvals(pos1),yvals(pos1),val.cons1(pos1),"rx") plot3(xvals(neg4),yvals(neg4),val.cons4(neg4),"ko") plot3(xvals(pos4),yvals(pos4),val.cons4(pos4),"gx") hold off
最後の図に示されているように、evaluate
では点の値と実行可能性の両方を計算できます。これに対し、issatisfied
では実行可能性のみが計算されます。
入力引数
expr
— 最適化式
OptimizationExpression
オブジェクト
最適化式。OptimizationExpression
オブジェクトとして指定します。
例: expr = 5*x+3
(x
は OptimizationVariable
)
pt
— 式の変数の値
構造体
式の変数の値。構造体として指定します。構造体 pt
の要件は以下のとおりです。
expr
のすべての変数がpt
のフィールド名と一致しなければならない。一致するフィールド名の値が数値でなければならない。
pt
のフィールドのサイズがexpr
の対応する変数のサイズと一致しなければならない。
たとえば、pt
を、solve
によって返される最適化問題の解にすることができます。
例: pt.x = 3, pt.y = -5
データ型: struct
prob
— 最適化問題
OptimizationProblem
オブジェクト
最適化問題。OptimizationProblem
オブジェクトとして指定します。optimproblem
を使用して、prob
を作成します。関数 evaluate
は、prob
のプロパティに含まれる目的関数と制約を pts
の点で評価します。
例: prob = optimproblem(Objective=obj,Constraints=constr)
pts
— prob
について評価する点
構造体 | OptimizationValues
オブジェクト
prob
について評価する点。構造体または OptimizationValues
オブジェクトとして指定します。
pts
のフィールド名はprob
の目的関数と制約式の対応する変数名と一致しなければならない。pts
の値はprob
の対応する変数と同じサイズの数値配列でなければならない。
pts
に構造体を使用する場合、pts
に含めることができる点は 1 つだけになります。つまり、複数の点を同時に評価する場合は、pts
は OptimizationValues
オブジェクトでなければなりません。
例: pts = optimvalues(prob,x=xval,y=yval)
出力引数
val
— 評価結果
double | OptimizationValues
オブジェクト
評価結果。double または OptimizationValues
オブジェクトとして返されます。val
が double の場合は、pt
における式の数値が格納されます。val
が OptimizationValues
オブジェクトの場合は、prob
の目的関数と制約関数の pts
の点で評価された値が格納されます。
警告
問題ベースのアプローチでは、目的関数、非線形等式、および非線形不等式における複素数値はサポートされていません。関数の計算に複素数値が含まれていると、それが中間値としてであっても、最終結果が不正確になる場合があります。
詳細
制約式の値
点 pt
の制約式の条件は、以下のとおりです。
制約が
L <= R
の場合、制約の値はevaluate(L,pt)
–evaluate(R,pt)
。制約が
L >= R
の場合、制約の値はevaluate(R,pt)
–evaluate(L,pt)
。制約が
L == R
の場合、制約の値はabs(evaluate(L,pt) – evaluate(R,pt))
。
一般に、ある点で制約の値が許容誤差以下である場合に、その点において制約が満たされている (実行可能である) と見なします。
バージョン履歴
R2017b で導入R2024a: 最適化問題に含まれる目的関数と制約式の複数の点での評価
OptimizationProblem
オブジェクト内の目的関数と制約式に関数 evaluate
が適用されるようになりました。評価点を OptimizationValues
オブジェクトとして関数に渡すと、そのオブジェクト内のすべての点で式が評価されます。例については、最適化問題の値の評価を参照してください。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)