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")
创建两个优化变量和一个 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")
确定哪些点对于容差 1 而非默认值 1e-6 是可行的。
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")
对其他三个约束重复此过程。
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")
这些图显示了每个约束的不同的满足区域。
创建一组包含两个优化变量的方程。
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
都有非零值。第二点 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
。第二点 sol
是一个解,且该点的 satisfied
为 1
。方程属性表明,在第一点处两个方程都不满足,在第二点处两个方程均满足。
输入参数
要计算的对象,指定为 OptimizationProblem
对象或 EquationProblem
对象。issatisfied
函数计算 prob
的属性中的目标和约束在 pts
中的点处的值。
示例: prob = optimproblem(Objective=obj,Constraints=constr)
要为 prob
计算的点,指定为结构体或 OptimizationValues
对象。
pts
中的字段名称必须与prob
中的目标和约束表达式中的对应变量名称匹配。pts
中的值必须是与prob
中对应变量大小相同的数值数组。
注意
目前,仅当 prob
是 EquationProblem
对象或 OptimizationProblem
对象时,pts
才可以是 OptimizationValues
对象。
如果对 pts
使用结构体,则 pts
只能包含一个点。换句话说,如果要同时计算多个点,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)
是非线性不等式约束函数,那么当 c(pt)
≤ tol
时,issatisfied
会在点 true
处为该约束返回 pt
。类似地,如果 ceq(x)
是非线性等式约束函数,那么当 abs(ceq(pt))
≤ tol
时,issatisfied
会在点 true
处返回该约束的 pt
。
数据类型: double
输出参量
指示在给定点处满足约束,返回为 OptimizationValues
对于 OptimizationProblem
或 EquationProblem
对象,它是一个向量;对于约束对象,它是一个逻辑数组。
对于问题对象,使用约束(方程)名称对 sat
进行索引。sat
中的每个条目具有与相关的约束表达式相同的大小。例如,如果 pts
是一个具有 OptimizationValues
= 5 个点的 N
对象,并且 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))
。
通常,如果约束值小于或等于某容差,则认为在某一点上满足约束(即可行)。
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.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 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)