本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

线性约束

什么是线性约束?

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

线性不等式约束

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

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

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

x1 + x3 ≤4,
2x2 – x3 ≥-2,
x1 – x2 + x3 – x4 ≥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];

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

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

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

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

线性等式约束

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

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

相关主题