资源简介

线性规划单纯形法-大M法和两阶段法程序实现(MATLAB)。程序有详细的注释。通俗易懂。 程序共有三个函数:main函数、twophase.m函数、MySimplex_method.m函数。 其中twophase.m函数是利用两阶段单纯形法。MySimplex_method.m函数是利用大M法单纯形法求解。 MySimplex_method.m函数既包含大M法,也包含单纯形法。twophase.m的单纯形法求解是通过调用MySimplex_method.m函数实现的。 在main函数中输入约束方程和目标函数,自动调用twophase.m函数、 MySimplex_method.m函数去进行规划求解。 如有需要,请联系私信我索取利用该程序求解实际问题的演讲PPT和Word。

资源截图

代码片段和文件信息

 A=[0 1 0 0 1 0 0 1 0 0;      % 不等式约束            
    3 0 0 1 0 0 2 0 0 0;
    0 3 0 0 1 0 0 2 0 0;
    0 0 3 0 0 1 0 0 2 0;
    1 1 1 0 0 0 0 0 0 0;
    0 0 0 1 1 1 0 0 0 0];
b=[650;650;850;400;650;555];
AA=[0 0 0 1 1 1 0 0 0 -1    % 等式约束
    1 0 0 1 0 0 1 0 0 0;
    0 0 1 0 0 1 0 0 1 0;
    0 0 0 0 0 0 1 1 1 0];
 bb=[185;450;350;400];
c= [-1150 -1150 -1150 -760 -760 -760 -350 -350 -350 0 ];   % 目标函数系数

A=input(‘请输入不等式约束方程组系数矩阵:‘);             % 单纯形法求解标准形线性规划问题: min c*x s.t. A*x<=b  AA*x=bb  
b=input(‘请输入不等式约束方程组常数项向量b(b>=0):‘);   %其中bb>=0  b>0,  x>=0
AA=input(‘请输入等式约束方程组系数矩阵:‘);               
bb=input(‘请输入等式约束方程组常数项向量bb(bb>=0):‘);
c=input(‘请输入目标函数系数向量:‘);
model=input(‘请输入采用的单纯形法,选择大M法请输入1,选择两阶段法请输入2:‘);


if isempty(AA)&&isempty(A)                   %矩阵全为空
    disp(‘矩阵全为空,无法计算退出程序‘);
end


if (~isempty(AA))&&(~isempty(A))            %矩阵全不空,
    [e1f1]=size(A);
    A=[Aeye(e1)];
    [e2f2]=size(AA);
    AA=[AAzeros(e2e1)];
    A=[A;AA];                              %得到了添加了松弛变量的系数矩阵 。
    b=[b;bb];                        %b为约束方程组常数项。  
    c1=[czeros(1e1)];          %到这,已经化成了标准型。
      if model==2
         [xzstage1_sturct_STstage2_sturct_STST] = twophase(c1Ab);
          x=x(1:f1)    % 输出参数: x最优解 z最优目标函数值ST存储单纯形表数据
          z
          ST %stage1_sturct_ST是第一阶段的单纯形表的集合。%stage2_sturct_ST是第二阶段的单纯形表的集合。若需显示,你自行写入
                %ST是最终的单纯形表。
      elseif model==1
         [xz~~~sturct_STST] = MySimplex_method(c1Ab) ;
          x=x(1:f1)
          z
          ST                 %sturct_ST是单纯形表的集合(大M法只需要一个单纯形表)%ST是最终的单纯形表。
      else
         disp(‘方法选择错误,退出程序。‘)
 
      end
   
end




if isempty(AA)&&(~isempty(A))    %当AA为空,A不为空时。
     [e1f1]=size(A);
      A=[Aeye(e1)];
      b=b;
      c1=[czeros(1e1)]; %到这,已经化成了标准型。
      if model==2
      [xzstage1_sturct_STstage2_sturct_STST] = twophase(c1Ab);
      z
       x=x(1:f1)
       ST
      
     elseif model==1
      [xz~~~sturct_STST] = MySimplex_method(c1Ab) ;
       x=x(1:f1)
       z
       ST
     else
        disp(‘方法选择错误,退出程序。‘)
 
     end

end



if (~isempty(AA))&&isempty(A)    %当A为空,AA不为空时。
    A=AA;
    b=bb;
    c1=c;  %本身已经是标准型
    if model==2
     [xzstage1_sturct_STstage2_sturct_STST] = twophase(c1Ab);
      x
      z
      ST
   %stage1_sturct_ST是第一阶段的单纯形表的集合。%stage2_sturct_ST是第二阶段的单纯形表的集合。
   elseif model==1
      [xz~~~sturct_STST] = MySimplex_method(c1Ab) ;
       x
       z
       ST
     else
        disp(‘方法选择错误,退出程序。‘)
    end
 

end


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3015  2020-05-27 11:07  程序\main.m

     文件       3626  2020-05-27 10:38  程序\MySimplex_method.m

     文件       2728  2020-05-27 10:57  程序\twophase.m

     目录          0  2020-06-03 10:26  程序

----------- ---------  ---------- -----  ----

                 9369                    4


评论

共有 条评论