线性规划单纯形法的matlab程序

线性规划单纯形法的matlab程序

例:max 2x1+3x2

s.t. x1+2*x2<=8

4*x1<=16

4*x2<=12

x1,x2>=0

加入松驰变量,化为标准型,得到

A=[1 2 1 0 0 8;4 0 0 1 0 16;0 4 0 0 1 12;2
3 0 0 0 0];

N=[3 4 5];

然后执行? [sol,val,kk]=ssimplex(A,N)就可以了。

注:基变量对应的基矩阵一定是单位阵。(这一局限将在后面的升级是改善)

% 求解标准型线性规划:max
cx;s.t. Ax=b;x>=0

% 本函数中的A是单纯初始表,包括:最后一行是初始的检验数,最后一列是资源向量b

% N是初始的基变量的下标

%输出变量sol是最优解

%输出变量val是最优值,kk是迭代次数

function [sol,val,kk]=ssimplex(A,N)

[mA,nA]=size(A);

kk=0; %迭代次数

flag=1;

while flag

kk=kk+1;

if A(mA,:)<=0??? % 已找到最优解

flag=0;

sol=zeros(1,nA-1);

for i=1:mA-1

sol(N(i))=A(i,nA);

end

val=-A(mA,nA);

else

for i=1:nA-1

if A(mA,i)>0&A(1:mA-1,i)<=0???
%? 问题有无界解

disp(‘have infinite solution!’);

flag=0;

break;

end

end

if flag % 还不是最优表,进行转轴运算

temp=0;

for i=1:nA-1

if A(mA,i)>temp

temp=A(mA,i);

inb=i; % 进基变量的下标

end

end

sita=zeros(1,mA-1);

for i=1:mA-1

if A(i,inb)>0

sita(i)=A(i,nA)/A(i,inb);

end

end

temp=inf;

for i=1:mA-1

if sita(i)>0&sita(i)

temp=sita(i);

outb=i; %出基变量下标

end

end

%以下更新N

for i=1:mA-1

if i==outb

N(i)=inb;

end

end

% 以下进行转轴运算

A(outb,:)=A(outb,:)/A(outb,inb);

for i=1:mA

if i~=outb

A(i,:)=A(i,:)-A(outb,:)*A(i,inb);

end

end

end

end

end

你可能感兴趣的:(转)