1. Matlab求解线性规划问题
matlab2003以后版本中,均提供了求解线性规划命令 linprog,针对模型为:

用法:
x=linprog(f,A,b,Aeq,beq,lb,...)
具体每一个变量对应意义如下:
f:目标函数的系数,也就是目标函数minZ中各个变量的系数; 当我们要求函数的最大值时,需要在linprog中写成-f;
A: 约束条件是不等式中的系数,同时在该条件下需要注意,不等号的方向不同可能我们需要对系数做一个正负变换,如果不等式为≥,那么在A中需要取原系数的相反数;
b: 不等式右边的数值,同理不等号的方向不同可能我们需要对系数做一个正负变换,如果不等式为≥,那么在b中需要取原系数的相反数;
Aeq:等式部分的系数,该题目中约束条件不存在等式,所以在函数中Aeq可以用[]来表示空白;
beq:等式等号右边的值,该问题中不存在等式,同理用[]表示;
lb:指X的下限,在我们题目中所有的变量都要求≥0,在这里lb就可以用一个0矩阵来表示,因为我们题目中有五个变量,就可以设置为lb=zeros[5,1],就是zeros生成一个5行1列的零矩阵,通过该矩阵表示五个变量的下限。
详细参数说明,参见:https://www.mathworks.com/help/optim/ug/linprog.html.
案例:
, 
案例代码如下:
c=[-2,4];
A=[-3 1;-1 -2];
b=[6;-4];
Aeq=[1,3]; beq=[4];
lb=[0,-3];
[x,fval]=linprog(c,A,b,Aeq,beq,lb);
disp(x); %x为最优解
disp(fval); %fval为我们要求的最小或者最大值
简单的matlab中linprog函数应用如上,在这里可以总结给大家几点容易报错的地方:
2. python 求解线性规划问题
Python 的scipy包中有求解线性规划命令,即
scipy.optimize.linprog
针对模型为:
参数选择:linprog(c, A_ub, b_ub, A_ed, b_ed, bounds=None)
参数解释:
c:价值向量,只规划最小值,若规划最大值需改为-c,但注意得出的结果应再加负号即为所求最大值;
A_ub和b_ub:分别对应于不等式约束的向量,注意只取小于等于时的数组,而且A_ub必须为二维数组;
A_ed和b_ed:分别对应于等式约束的向量,取法同上;
bounds:为决策向量的上下界,例:bounds=([0, None], [None, None])表示第一个元素的取值大于等于0,第二个为实数取值。
详细参数说明,参见:https://docs.scipy.org/doc/scipy/reference/optimize.linprog-simplex.html.
案例:
,
案例代码如下:
import numpy as np
from scipy.optimize import linprog
c = np.array([-2, 4])
a_ub = np.array([[-3, 1], [-1, -2]])
b_ub = np.array([6, -4])
a_ed = np.array([[1, 3]])
b_ed = np.array([4])
linprog(c, a_ub, b_ub, a_ed, b_ed, bounds=([None, None], [-3, None]))
输出如下:
con: array([0.])
fun: -38.0
message: 'Optimization terminated successfully.'
nit: 5
slack: array([48., 3.])
status: 0
success: True
x: array([13., -3.])
fun为最优解的值,x为取得最优解时对应的决策向量的取值。
3. R求解线性规划
R语言-条件约束最优化_整数规划、线性规划求解(Rglpk)。
Rglpk包中主要的函数有:
Rglpk_solve_LP((obj, mat, dir, rhs, bounds = NULL, types = NULL, max = FALSE,control = list(), ...))
其中参数:
obj规划目标系数
mat约束向量矩阵
dir约束方向向量,有’>’、’<’、’=’构成
rhs约束值
bounds上下限的约束,默认0到INF
type限定目标变量的类型,’B’指的是0-1规划,’C’代表连续,’I’代表整数,默认是’C’
control包含四个参数verbose、presolve、tm_limit、canonicalize_status。
详细参数说明,参见:https://cran.r-project.org/web/packages/lpSolve/lpSolve.pdf.
实例:

obj <- c(2, 4, 3)
mat <- matrix(c(3, 2, 1, 4, 1, 3, 2, 2, 2), nrow = 3)
# [,1] [,2] [,3]
# [1,] 3 4 2
# [2,] 2 1 2
# [3,] 1 3 2
dir <- c("<=", "<=", "<=")
rhs <- c(60, 40, 80)
max <- TRUE
Rglpk_solve_LP(obj, mat, dir, rhs, max = max)
输出结果:
$optimum
[1] 76.66667
$solution
[1] 0.000000 6.666667 16.666667
$status
[1] 0
$solution_dual
[1] -1.833333 0.000000 0.000000
$auxiliary
$auxiliary$primal
[1] 60.00000 40.00000 53.33333
$auxiliary$dual
[1] 0.8333333 0.6666667 0.0000000