issatisfied
構文
説明
例
いくつかの線形制約と非線形制約を含む最適化問題を作成します。
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
オブジェクトに変換し、それらの点の中からすべての制約を満たす点を特定します。
vals = optimvalues(prob,x=xvals,y=yvals); allsat = issatisfied(prob,vals);
実行可能な (満たされている) 点を緑の円、実行不可能な点を赤の x 印でプロットします。
xsat = xvals(allsat); ysat = yvals(allsat); xnosat = xvals(~allsat); ynosat = yvals(~allsat); plot(xsat,ysat,"go",xnosat,ynosat,"rx")
2 つの最適化変数と 3 行 2 列の不等式制約の配列を作成します。
x = optimvar("x"); y = optimvar("y"); cons = optimconstr(3,2); cons(1,1) = x^2 + y^2/4 <= 2; cons(1,2) = 3*x + y <= 4; cons(2,1) = -x - y^3 <= -3; cons(2,2) = 2*x^2 + x*y + 4*y^2 <= 6; cons(3,1) = 2*x + 4*x*y + y^2 <= 5; cons(3,2) = (4 + x*y)^2 <= 24;
点 x = 1/2
、y = -1/2
ですべての制約が満たされているかどうかをチェックします。
pt.x = 1/2; pt.y = -1/2; allsat = issatisfied(cons,pt)
allsat = logical
0
すべての制約は満たされていません。どれが満たされているかを調べます。
[allsat,sat] = issatisfied(cons,pt)
allsat = logical
0
sat = 3×2 logical array
1 1
0 1
1 1
constraint(2,1) 以外はすべて満たされています。
いくつかの線形制約と非線形制約を含む最適化問題を作成します。
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
オブジェクトに変換し、それらの点の中からすべての制約を満たす点を特定します。
vals = optimvalues(prob,x=xvals,y=yvals); allsat = issatisfied(prob,vals);
実行可能な (満たされている) 点を緑の円、実行不可能な点を赤の x 印でプロットします。
xsat = xvals(allsat); ysat = yvals(allsat); xnosat = xvals(~allsat); ynosat = yvals(~allsat); plot(xsat,ysat,"go",xnosat,ynosat,"rx")
既定の 1e-6 ではなく、許容誤差 1 に関して実行可能な点を特定します。
tol = 1; allsat1 = issatisfied(prob,vals,tol);
実行可能な (満たされている) 点を緑の円、実行不可能な点を赤の x 印でプロットします。
xsat1 = xvals(allsat1); ysat1 = yvals(allsat1); xnosat1 = xvals(~allsat1); ynosat1 = yvals(~allsat1); plot(xsat1,ysat1,"go",xnosat1,ynosat1,"rx")
制約満足度の定義を緩くすると、より多くの点が実行可能になります。
いくつかの線形制約と非線形制約を含む最適化問題を作成します。
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
オブジェクトに変換します。
vals = optimvalues(prob,x=xvals,y=yvals);
点で制約を評価します。issatisfied
は、すべての制約満足度をすべてのテスト ポイントで同時に評価します。
[~,sat] = issatisfied(prob,vals);
最初の制約について、実行可能な (満たされている) 点を緑の円、実行不可能な点を赤の x 印でプロットします。
x1sat = xvals(sat.cons1); y1sat = yvals(sat.cons1); x1nosat = xvals(~sat.cons1); y1nosat = yvals(~sat.cons1); plot(x1sat,y1sat,"go",x1nosat,y1nosat,"rx") title("Constraint 1 Satisfaction")
この処理を他の 3 つの制約について繰り返します。
x2sat = xvals(sat.cons2); y2sat = yvals(sat.cons2); x2nosat = xvals(~sat.cons2); y2nosat = yvals(~sat.cons2); plot(x2sat,y2sat,"go",x2nosat,y2nosat,"rx") title("Constraint 2 Satisfaction")
x3sat = xvals(sat.cons3); y3sat = yvals(sat.cons3); x3nosat = xvals(~sat.cons3); y3nosat = yvals(~sat.cons3); plot(x3sat,y3sat,"go",x3nosat,y3nosat,"rx") title("Constraint 3 Satisfaction")
x4sat = xvals(sat.cons4); y4sat = yvals(sat.cons4); x4nosat = xvals(~sat.cons4); y4nosat = yvals(~sat.cons4); plot(x4sat,y4sat,"go",x4nosat,y4nosat,"rx") title("Constraint 4 Satisfaction")
プロットは、制約ごとに異なる満足度の領域を示します。
2 つの最適化変数で一連の方程式を作成します。
x = optimvar("x"); y = optimvar("y"); prob = eqnproblem; prob.Equations.eq1 = x^2 + y^2/4 == 2; prob.Equations.eq2 = x^2/4 + 2*y^2 == 2;
から始めて連立方程式を解きます。
x0.x = 1; x0.y = 1/2; sol = solve(prob,x0)
Solving problem using fsolve. Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient. <stopping criteria details>
sol = struct with fields:
x: 1.3440
y: 0.8799
点 x0
と sol
で方程式を評価します。
vars = optimvalues(prob,x=[x0.x sol.x],y=[x0.y sol.y]); vals = evaluate(prob,vars)
vals = 1×2 OptimizationValues vector with properties: Variables properties: x: [1 1.3440] y: [0.5000 0.8799] Equation properties: eq1: [0.9375 8.4322e-10] eq2: [1.2500 6.7431e-09]
最初の点 x0
は、eq1
と eq2
の両方の方程式の値が非ゼロです。2 つ目の点 sol
は、解に期待されるとおり、それらの方程式の値がほぼゼロになります。
issatisfied
を使用して方程式の満足度を調べます。
[satisfied details] = issatisfied(prob,vars)
satisfied = 1×2 logical array
0 1
details = 1×2 OptimizationValues vector with properties: Variables properties: x: [1 1.3440] y: [0.5000 0.8799] Equation properties: eq1: [0 1] eq2: [0 1]
最初の点 x0
は解ではなく、その点の satisfied
は 0
です。2 つ目の点 sol
は解であり、その点の satisfied
は 1
です。方程式のプロパティは、最初の点ではどちらの方程式も満たされず、2 つ目の点では両方が満たされることを示しています。
入力引数
評価対象のオブジェクト。OptimizationProblem
オブジェクトまたは EquationProblem
オブジェクトとして指定します。関数 issatisfied
は、prob
のプロパティに含まれる目的関数と制約を pts
の点で評価します。
例: prob = optimproblem(Objective=obj,Constraints=constr)
prob
について評価する点。構造体または OptimizationValues
オブジェクトとして指定します。
pts
のフィールド名はprob
の目的関数と制約式の対応する変数名と一致しなければならない。pts
の値はprob
の対応する変数と同じサイズの数値配列でなければならない。
メモ
現在、pts
を OptimizationValues
オブジェクトにできるのは、prob
が EquationProblem
オブジェクトまたは OptimizationProblem
オブジェクトの場合のみです。
pts
に構造体を使用する場合、pts
に含めることができる点は 1 つだけになります。つまり、複数の点を同時に評価する場合は、pts
は OptimizationValues
オブジェクトでなければなりません。
例: pts = optimvalues(prob,x=xval,y=yval)
制約。OptimizationConstraint
オブジェクト、OptimizationEquality
オブジェクト、または OptimizationInequality
オブジェクトとして指定します。これらの制約オブジェクトに issatisfied
が適用されるのは、点を OptimizationValues
オブジェクトとしてではなく構造体として指定した場合のみです。
例: cons = expr1 <= expr2
(expr1
と expr2
は最適化式)
式の変数の値。構造体として指定します。構造体 pt
の要件は以下のとおりです。
expr
のすべての変数がpt
のフィールド名と一致しなければならない。一致するフィールド名の値が数値でなければならない。
pt
のフィールドのサイズがexpr
の対応する変数のサイズと一致しなければならない。
たとえば、pt
を、solve
によって返される最適化問題の解にすることができます。
例: pt.x = 3, pt.y = -5
データ型: struct
制約満足度の許容誤差。非負のスカラーとして指定します。制約の評価結果が tol
を超えない場合、その制約は満たされていると見なされます。それ以外の場合、制約は満たされません。
たとえば、c(x)
が非線形不等式制約関数の場合、その制約が点 pt
において c(pt)
≤ tol
であれば、issatisfied
は true
を返します。同様に、ceq(x)
が非線形等式制約関数の場合、その制約が点 pt
において abs(ceq(pt))
≤ tol
であれば、issatisfied
は true
を返します。
データ型: double
出力引数
与えられた点において制約が満たされていることを示す指標。OptimizationProblem
オブジェクトまたは EquationProblem
オブジェクトの場合はOptimizationValues
ベクトル、制約オブジェクトの場合は logical 配列として返されます。
問題オブジェクトの場合、制約 (式) の名前を使用して sat
にインデックスを付けます。sat
の各エントリのサイズは関連付けられている制約式と同じです。たとえば、pts
が N
= 5 個の点をもつ OptimizationValues
オブジェクトで、con
が 2 行 3 列のサイズの制約式の場合、sat.con
のサイズは 2×3×5 になります。エントリは、許容誤差 tol
内で満たされている制約に対して true
になります。
制約オブジェクト (OptimizationConstraint
、OptimizationEquality
、または OptimizationInequality
) の場合、sat
のサイズは関連付けられている制約のサイズと同じです。
詳細
点 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))
。
一般に、ある点で制約の値が許容誤差以下である場合に、その点において制約が満たされている (実行可能である) と見なします。
バージョン履歴
R2024a で導入issatisfied
関数が次のオブジェクトに適用されるようになりました。
例については、方程式の式の評価を参照してください。
OptimizationProblem
オブジェクト内の目的関数と制約式に関数 issatisfied
が適用されるようになりました。評価点を OptimizationValues
オブジェクトとして関数に渡すと、そのオブジェクト内のすべての点で満足度が判定されます。例については、満たされている制約の特定を参照してください。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)