主要内容

本页采用了机器翻译。点击此处可查看英文原文。

infeasibility

一个点处的约束违反值

说明

使用 infeasibility 求在某点处的约束违反值数值。

提示

有关完整的工作流,请参阅基于问题的优化工作流基于问题的方程求解工作流

infeas = infeasibility(constr,pt) 返回约束 constr 在点 pt 处的违反度量。

示例

infeas = infeasibility(var,pt) 返回点 pt 处的边界约束和整数约束违反值。

示例

示例

全部折叠

检查一个点是否满足约束。

设置优化变量和两个约束。

x = optimvar("x");
y = optimvar("y");
cons = x + y <= 2;
cons2 = x + y/4 <= 1;

检查点 x = 0y = 4 是否满足名为 cons 的约束。当点的不可行性为零时,该点可行。

pt.x = 0;
pt.y = 4;
infeas = infeasibility(cons,pt)
infeas = 
2

该点在此约束下不可行。

检查对于其他约束的可行性。

infeas = infeasibility(cons2,pt)
infeas = 
0

该点对于此约束可行。

检查点是否满足一个具有多个条件的约束。

设置优化变量和约束向量。

x = optimvar("x",3,2);
cons = sum(x,2) <= [1;3;2];

检查点 pt.x = [1,-1;2,3;3,-1] 是否满足这些约束。

pt.x = [1,-1;2,3;3,-1];
infeas = infeasibility(cons,pt)
infeas = 3×1

     0
     2
     0

该点对于第二个约束不可行。

创建带有边界约束、整数约束和半连续约束的优化变量。

x = optimvar("x",LowerBound=-2,UpperBound=2,Type="integer");
y = optimvar("y",LowerBound=1/2,Type="semi-continuous");

检查某些要点的可行性。

pt.x = 1;
pt.y = 1;
infeasibility(x,pt)
ans = 
0
infeasibility(y,pt)
ans = 
0

在点 x = 1, y = 1 处,变量 xy 均可行。

pt.x = 1.5;
infeasibility(x,pt)
ans = 
0.5000

由于 x 是整数变量,因此 x 变量在 x = 1.5 处存在 1/2 的不可行性。

pt.y = 0;
infeasibility(y,pt)
ans = 
0

尽管 y 的下界为 1/2,但由于 y 是一个半连续变量,因此 yy = 0 处的不可行性为 0。

pt.y = -2;
infeasibility(y,pt)
ans = 
2

变量 yy = -2 处不可行(不可行性为 2),因为 y 是下半连续的,而在 y = 0 处可行。

pt.x = -4;
infeasibility(x,pt)
ans = 
2

变量 xx = -4 处具有 2 的不可行性,因为 x 的下界为 -2

pt.y = 1/4;
infeasibility(y,pt)
ans = 
0.2500

变量 yy = 1/4 处存在 1/4 的不可行性,因为 y 的下界为 1/2

输入参数

全部折叠

优化约束,指定为 OptimizationEquality 对象、OptimizationInequality 对象或 OptimizationConstraint 对象。constr 可以表示单个约束或约束数组。

示例: xy 是标量变量时,constr = x + y <= 1 是单个约束。

示例: x 是二维或多维数组时,constr = sum(x) == 1 是约束数组。

优化变量,指定为一个 OptimizationVariable 对象。infeasibility 按以下方式计算边界约束和整数约束的违反值。

变量类型边界和类型的不可行性
连续max(0,lb - x,x - ub)
整数max(0,lb - x,x - ub,abs(x - round(x)))
半连续min(max(0,lb - x,x - ub),abs(x))
半整数min(max(0,lb - x,x - ub,abs(x - round(x))),abs(x))

示例: var = optimvar("var",LowerBound=0,UpperBound=10.5)

要计算的点,对于约束中的优化变量,指定为具有与优化变量名称匹配的字段名称的结构体。pt 中每个字段的大小必须与对应优化变量的大小相匹配。

示例: pt.x = 5*eye(3)

数据类型: struct

输出参量

全部折叠

约束或变量的不可行性,以实数数组形式返回。对于约束条件,每个为零的条目代表一个可行的约束,每个为正数的条目代表一个不可行性约束。infeas 的大小与约束 constr 的大小相同。有关非标量 infeas 的示例,请参阅计算多个约束违反值

从 R2026a 版本开始,infeasibility 还会根据变量的类型,计算优化变量相对于边界约束和整数约束的不可行性。

变量类型边界和类型的不可行性
连续max(0,lb - x,x - ub)
整数max(0,lb - x,x - ub,abs(x - round(x)))
半连续min(max(0,lb - x,x - ub),abs(x))
半整数min(max(0,lb - x,x - ub,abs(x - round(x))),abs(x))

例如,

x = optimvar("x",Type="integer",LowerBound=6.5,UpperBound=10);
pt.x = 5;
infeasibility(x,pt)
ans =

    1.5000

警告

基于问题的方法不支持在目标函数、非线性等式和非线性不等式中使用复数值。如果某函数计算具有复数值,即使是作为中间值,最终结果也可能不正确。

详细信息

全部折叠

提示

该工具箱提供了三项函数,用于计算点的位置可行性。

版本历史记录

在 R2017b 中推出

全部展开