linprog

语法

linprog(f, [A], [b], [Aeq], [beq], [lb], [ub], [method='simplex'])

详情

求线性目标函数在约束条件下的最优解。具体模型如下:


linprog

返回结果是具有两个元素的元组。第一个元素是目标函数的最小值,第二个元素是目标函数取最小值时,x的取值。

参数

f 是线性规划中的一次项向量。

A 是线性不等约束的系数矩阵。

b 是线性不等约束的右端向量。

Aeq 是线性等式约束的系数矩阵。

beq 是线性等式约束的右端向量。

lb 表示变量的下界。

ub 表示变量的上界。

method 是字符串,表示算法,目前支持 'simplex' 和 'interior-point'。推荐使用 simplex 算法,部分特殊场景下建议使用 interior-point 算法。

linprog 函数的参数有以下要求:

  • AAeq 必须是列数相同的矩阵

  • f, bbeq 是向量

  • lbub 可以是标量,也可以是和x等长的向量。

    • lbub 是标量,则所有变量都受同一个下界或上界约束。若 lbub 为NULL,表示x无相应的下界或上界约束。

    • lbub 是向量,则x中的元素受 lbub 中相应位置的元素约束。若向量 lbub 中某元素为NULL,表示此位置的x元素无相应的下界或上界约束

例子

例1. 求 x,y 满足以下约束条件时,目标函数 x+2y 的最小值。


linprog1
f = [1, 2];
A = [-1, -1]$1:2;
b = [-2];
ub = 2;
re = linprog(f, A, b, , , , ub);

re[0];
# output
2

re[1];
# output
[2,0]

下面详细解释如何获取上例中的 A, b 和 ub。不等式约束条件为 x+y>=2,而模型中的不等式约束条件的符号为<=,因此需要转换成 -x-y<=-2。因此,不等式约束条件的系数矩阵为 [-1,-1]$1:2,不等式约束条件的右端向量为-2。变量 x, y 的上界都是2,因此 ub 可用标量表示。

例2. 求 x,y 满足以下约束条件时,目标函数 -3x1-2x2 的最小值。


linprog2
f = [-3, -2];
A = [2, 1, 1, 1]$2:2;
b = [10, 8];
ub = [4, NULL];
re = linprog(f, A, b, , , , ub);

re[0];
# output
-18

re[1];
# output
[2,6]

相关函数:scs, quadprog