发布网友 发布时间:2022-04-22 00:09
共2个回答
热心网友 时间:2023-09-26 01:13
%单纯形法matlab程序-ssimplex
% 求解标准型线性规划:min c'*x; s.t. A*x=b; x>=0
%本函数中的A是单纯初始表,包括:最后一行是初始的检验数,最后一列是资源向量b
% N是初始的基变量的下标
% 输出变量minx是最优解, 其中松弛变量(或剩余变量)可能不为0
% 输出变量minf是最优目标值,k是迭代次数
function [minx,minf,k]=ssimplex(A,N)
[mA,nA]=size(A);
k=0; % 迭代次数
flag=1;
while flag
k=k+1;
if A(mA,:)>=0 % 已找到最优解
flag=0;
minx=zeros(1,nA-1);
for i=1:mA-1
minx(N(i))=A(i,nA);
end
minf=-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
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
热心网友 时间:2023-09-26 01:14
具体想知道什么
去百度文库看看单纯形法的PPT吧
http://wenku.baidu.com/view/6961bf1f650e52ea551827.html
参考资料:http://wenku.baidu.com/view/6961bf1f650e52ea551827.html