资源简介
线性规划单纯形法-大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
- 上一篇:MATLAB实现图片柱面投影
- 下一篇:zernike 波前拟合
评论
共有 条评论