前言
线性规划问题,相信任何一个上过高中的人都对它不陌生。给你多个变量,让你求在某个约束条件下目标函数的最大或者最小值。
在高中,我们做的一般都是规模较小情况下的线性规划问题,但如果约束条件或者变量多达几万个,手算就不太可能做出来了。幸运的是,matlab提供了相应的工具帮助我们求解线性规划问题。
标准方程
首先,我们先规定线性规划方程的标准方程,具体如下:
其中,f、x、b、beq、lb、ub均为列向量,其中f为价值向量,b为资源向量;A,Aeq为不等式约束的相关矩阵。你可能会问,假如我要求的是最大值或者方程中不等号是大于号怎么办?很简单,给两边加上负号,不等号变号(或者max变成min,不过要记得最后要取最优目标函数值相反数),就和标准方程一样了。
linprog函数
matlab为我们提供了一个linprog函数,具体使用方式是[x,y] = linprog(f,A,b,Aeq,beq,lb,ub) (如果方程里没有lb和ub则可以直接忽略这两项,Aeq和beq同理),其中y为目标函数值,其他和上述标准方程定义一致。
具体实例
我们从这个方程可以提取到:
使用linprog函数即可求得答案:当x取5,y取2时,z的最大值为8(如果显示是-8,那么是因为你求的是最小值,需要取相反数)
样例matlab代码
clear;
clc;
f=[-2;1];
A=[1,1;1,-3;-3,1];
b=[7;-1;-5];
Aeq=[2,-1];
beq=[8];
lb=[4;2];
ub=[5;3];
[x,z]=linprog(f,A,b,Aeq,beq,lb,ub);
z=-z;
最后输出找到最优解,同时x变成[5;2],z变成8。