单纯形法的MATLAB实现

单纯形法的MATLAB实现function[y,T]=Optimize(A,b,c)%作者:莫昊宇%创作时间:2018/10/10%A为系数矩阵%b为常数约束矩阵%c为目标函数系数矩阵%以上条件默认优化问题是标准形式的l=size(A,2);r=rank(A);Choose=nchoosek(1:l,r);fori=size(Choose,1):-1:1choose=Choose(i…

大家好,欢迎来到IT知识分享网。单纯形法的MATLAB实现"

单纯形函数定义如下:

function [y,T]=Optimize(A,b,c)

%作者:MOK
%创作时间:2018/10/10
%A为系数矩阵
%b为常数约束矩阵
%c为目标函数系数矩阵
%y为最优函数值,T为最优化时的单纯形表
%以上条件默认优化问题是标准形式的


l=size(A,2);
r=rank(A);

Choose=nchoosek(1:l,r);
for i=size(Choose,1):-1:1
    choose=Choose(i,:);
    if (det(A(:,choose))~=0)
        B=A(:,choose);
        tem=A;
        tem(:,choose)=[];
        N=tem;
        cB=c(choose);
        tem=c;
        tem(choose)=[];
        cN=tem;
        break
     end
end

T=[(cB)*inv(B)*b,zeros(1,r),cB*(B)^(-1)*N-cN;(B^-1)*b,diag(ones(r,1)),(B^-1)*N];


flag=0;
while(any(T(1,2:end)>0))

frow=T(1,:);
[~,loc1]=max(frow);
fcolumn=T(2:end,loc1);
base=T(2:end,1);
cita=base./fcolumn;
[~,loc2]=min(cita);
loc2=loc2+1;
T(loc2,:)=T(loc2,:)/T(loc2,loc1);
%if (all(T(2:end,loc1)<=0)&&(T(1,loc1)>0))
%    flag=1;
%    break
%end

tem=T(2:end,loc1);
for i=2:(r+1)
    if i~=loc2
    T(i,:)=T(i,:)-tem(i-1)*T(loc2,:);
    end
end
T(1,:)=T(1,:)-T(1,loc1)*T(loc2,:);

check=find(T(1,2:end)>0);
check=check+1;
if (~isempty(check))
for i=1:length(check)
   if all(T(2:end,check(i))<=0)
       flag=1;
       %break
   end
end
end
if flag
    break
end
end



if flag==0
    y=T(1,1);
else
    y=-inf;
end


end

使用方法:

clear;clc
A=[1,2,-2,1,0,0;3,-1,-1,0,1,0;1,1,-1,0,0,-1];
b=[2;3;1];
c=[1,3,-2,0,0,0];
[y,T]=Optimize(A,b,c);

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/22843.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信