主要内容

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

线性约束

什么是线性约束?

有几个优化求解器接受线性约束,这些线性约束对解 x 进行限制以满足线性等式或不等式。接受线性约束的求解器包括 fminconintlinproglinproglsqlinquadprog、多目标求解器,以及一些 Global Optimization Toolbox 求解器。

线性不等式约束

线性不等式约束的形式为 A·x ≤ b。当 Am×n 时,表示对包含 n 个分量的变量 xm 个约束。您需要提供 m×n 形式的矩阵 A 和包含 m 个分量的向量 b

Ab 参量中传递线性不等式约束。

例如,假设您有以下线性不等式作为约束:

x1 + x3 ≤ 4,
2x2x3 ≥ –2,
x1x2 + x3x4 ≥ 9。

此处,m = 3n = 4

请使用下面的矩阵 A 和向量 b 编写这些约束:

A=[101002101111],b=[429].

请注意,需要先将“大于”不等式乘以 –1 以转换为“小于”不等式形式。在 MATLAB® 语法中:

A = [1 0 1 0;
    0 -2 1 0;
    -1 1 -1 1];
b = [4;2;-9];

您不需要为线性约束提供梯度;求解器会自动计算它们。线性约束对黑塞函数没有影响。

即使您将初始点 x0 作为矩阵进行传递,求解器也会将当前点 x 作为列向量传递给线性约束。请参阅矩阵参量

有关线性约束的更复杂示例,请参阅基于求解器设置线性规划

中间迭代可能违反线性约束。请参阅迭代可能违反约束

线性范围约束

从 R2026a 版本开始,您可以使用一个包含两个元素的元胞数组,为 linprogintlinprog 求解器指定下界和上界线性不等式。将 A{b} 作为线性约束传递,意味着求解器将强制执行

blAxb.

例如,考虑以下不等式。

–2 ≤ x1 + 2 x3 ≤ 4,
x2 – 3 x3 ≥ –2,
x1x2 + x3x4 ≤ 8。
(1)

通过输入这些数组来指定不等式。

A = [1 0 2 0;
    0 1 -3 0;
    1 -1 1 -1];
bl = [-2 -2 -inf];
b = [4 inf 8]; % Pass the range constraints as {bl,b}

对于每个未指定的下限区间(例如不等式组的第三行),应将 -inf 指定为 bl 的值。同样地,对于每个未指定的上界范围(例如不等式组的第二行),应将 inf 指定为 b 的值。

除了使用元胞数组语法外,您还可以对每个不等式使用 形式。例如,下面的两个不等式是等价的。

–2 ≤ x1 + 2 x3(2)
x1 – 2 x3 ≤ 2。(3)

当每个线性表达式同时存在下限和上限时,范围约束的语法尤为方便,例如不等式中的第一行。

–2 ≤ x1 + 2 x3 ≤ 4。(4)

若要表明 blb 不适用于某个问题,请传入一个空数组,例如 {bl []}

线性等式约束

线性等式的形式为 Aeq·x = beq,表示 m 个方程,其中的向量 x 包含 n 个分量。您需要提供 m×n 形式的矩阵 Aeq 和包含 m 个分量的向量 beq

按照线性不等式约束中对 Ab 参量的相同方式,在 Aeqbeq 参量中传递线性等式约束。

另请参阅

主题