线性约束
什么是线性约束?
有几个优化求解器接受线性约束,这些线性约束对解 x 进行限制以满足线性等式或不等式。接受线性约束的求解器包括 fmincon
、intlinprog
、linprog
、lsqlin
、quadprog
、多目标求解器,以及一些 Global Optimization Toolbox 求解器。
线性不等式约束
线性不等式约束的形式为 A·x ≤ b。当 A 为 m×n 时,表示对包含 n 个分量的变量 x 有 m 个约束。您需要提供 m×n 形式的矩阵 A 和包含 m 个分量的向量 b。
在 A
和 b
参量中传递线性不等式约束。
例如,假设您有以下线性不等式作为约束:
x1 + x3 ≤ 4,
2x2 – x3 ≥ –2,
x1 – x2 + x3 – x4 ≥ 9。
此处,m = 3 且 n = 4。
请使用下面的矩阵 A 和向量 b 编写这些约束:
请注意,需要先将“大于”不等式乘以 –1 以转换为“小于”不等式形式。在 MATLAB® 语法中:
A = [1 0 1 0; 0 -2 1 0; -1 1 -1 1]; b = [4;2;-9];
您不需要为线性约束提供梯度;求解器会自动计算它们。线性约束对黑塞函数没有影响。
即使您将初始点 x0
作为矩阵进行传递,求解器也会将当前点 x 作为列向量传递给线性约束。请参阅矩阵参量。
有关线性约束的更复杂示例,请参阅基于求解器设置线性规划。
中间迭代可能违反线性约束。请参阅迭代可能违反约束。
线性等式约束
线性等式的形式为 Aeq·x = beq,表示 m 个方程,其中的向量 x 包含 n 个分量。您需要提供 m×n 形式的矩阵 Aeq 和包含 m 个分量的向量 beq。
按照线性不等式约束中对 A
和 b
参量的相同方式,在 Aeq
和 beq
参量中传递线性等式约束。