线性规划大家都很熟悉,就直接写如何使用matlab解线性规划问题了

MATLAB的线性规划

在MATLAB中,规定线性规划的标准形式为

其中$c$和$x$为$n$维列向量,$A$ 、$Aeq$ 为适当维数的矩阵, $b$ 、$beq$ 为适当维数的列向量。

例如线性规划

的MATLAB标准形式为

matlab代码为

1
[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)

这里x是结果,fval 返回目标函数的值,c是目标函数的参数,LB 和UB 分别是变量x 的下界和上界, x0是x的初始值,OPTIONS 是控制参数。

官方文档: https://ww2.mathworks.cn/help/optim/ug/linprog.html

例子

求解线性规划问题

对应的MATLAB代码为

1
2
3
4
5
6
c=[2;3;-5];
a=[-2,5,-1;1,3,1]; b=[-10;12];
aeq=[1,1,1];
beq=7;
x=linprog(-c,a,b,aeq,beq,zeros(3,1))
value=c'*x

其中,c为目标函数的参数矩阵,a为约束条件矩阵,其中a必须是转化为MATLAB形式的线性规划问题的参数矩阵,即$Ax\le b$

aeq和beq为等式约束条件,形如$Aeq \cdot b = beq$

最后的zeros(3,1)为下界,在这里的意思是三个变量最小值为0

1
2
3
4
c=[2;3;1];
a=[1,4,2;3,2,0];
b=[8;6];
[x,y]=linprog(c,-a,-b,[],[],zeros(3,1))

一样的方法,如果缺少一个变量对应的参数就是0,这里没有等式约束所以aeq,beq为0

MATLAB 中的整数规划

许多问题要求解必须为整数,在最新的matlab中应该使用intlinprog来计算。对应文档为: https://ww2.mathworks.cn/help/optim/ug/intlinprog.html

intlinprog函数的签名如下

1
x = intlinprog(c,intcon,A,b,Aeq,beq,lb,ub) 

可以看到,和linprog相比,该函数多出了intcon参数, 该参数的作用是高速MATLAB哪些变量取值必须是整数

例子

对应的MATLAB代码

1
2
3
4
5
6
7
c = [8;1];
intcon = 2;
A = [-1,-2;
-4,-1;
2,1];
b = [14;-33;20];
x = intlinprog(c,intcon,A,b)

其中intcon = 2代表第二个x只能取整数,如果有多个变量就使用intcon=[]