用matlab解决运筹学中的LP问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 07:30:36
用matlab编程,使用单纯形法解决LP问题
只需解决max:z=CX,AX≤B,X≥0的情况即可。
我不要那么麻烦的,只需要解决上面那种情况就行

http://www.ilovematlab.cn/viewthread.php?tid=29019
这里有,里面还有 说明 文档。

以下是,采用大M法及字典序规则的 单纯型法 算法 参考程序:
function [x,f]=Lps_Mlex(c,A,b,M,N,pre)
% [x,f]=Lps_Mlex(c,A,b,M,N,pre) 采用单纯型法中的
% 大M法,并给字典序规则解下列线性规划
% min f=ct*x s.t. Ax=b,x 所有分量 >=0
% M是一个充分大的数,N是引进人工变量的个数,N应不超过
% (通常等于)约束等式的个数,pre 是精度
% 返回结果 x 是最优解,f 是最优解处的函数值

[m,n]=size(A);
if nargin<6,pre=0;end;if nargin<5,N=0;end
if N>m,error('N不能超过约束条件的个数m');
else,
A=[A,[zeros(N,m-N);eye(m-N)]];
c=[c(:)',zeros(1,m-N)];
A=[A,eye(m)];c=[c,M*ones(1,m)];
m1=n+m-N+1:n+2*m-N;B=A(:,m1);
x=zeros(n+2*m-N,1);x=x(:);
tb=find(b<0);b(tb)=-b(tb);A(tb,:)=-A(tb,:);
xB=B\b;x(m1)=xB;f=c*x;
criterion=c(m1)*(B\A)-c;[z1,z2]=max(criterion);
while z1>pre
az2=B\A