线性规划问题是指在一组线性约束条件的限制下,求一线性目标函数的最大或最小的问题。
Matlab中的线性规划的标准形式如图所示:
其中c和x是n维列向量,A和Aeq是适当维数的矩阵,b和beq是适当维数的列矩阵。
基本函数形式为linprog(c,A,b),他返回的是向量x的值。
它完整的函数调用形式为:
x= linprog(f
,A
,b
,Aeq
,beq
,lb
,ub
,x0
,options
) ,其中x0和options分别x的初始值和控制参数。
用一个例题来进行巩固:
求解下列线性规划问题:
首先,套入线性规划的标准型:得到c=[2,3,-5] a=[2,-5,1;1,3,1] b=[-10;12] aeq=[1,1,1]
beq=[1,1,1] ,在matlab中编写文件:
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;
运行结果:
与线性规划相关的指派问题:如果派n个人去干n项工作,每人干且仅干一件事,若分配第i个人干第j项工作,需要花费的时间,那么问如何分配工作才能使花费的总时间最少。将指派问题实例化,那么仅仅需要一个矩阵。
引入0-1模型,如果分配i干第j个工作,则取Xij=1,否则取Xij=0,上述指派问题的数学模型为:
求解指派问题,可以使用匈牙利算法:如果系数矩阵一行或一列每一个元素都加上或减去同一个数,得到一个新矩阵,则这两个矩阵拥有相同的最优指派。
例如:系数矩阵C为:
可以通过第一列减去15,第二列减去17,第三列减去17,第四列减去16,得到新矩阵:
不难看出最优指派为: