单纯形算法MATLAB编程报告Word格式文档下载.docx
《单纯形算法MATLAB编程报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单纯形算法MATLAB编程报告Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
![单纯形算法MATLAB编程报告Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-2/1/cccc09a0-1f96-418d-abe9-d7d042b26351/cccc09a0-1f96-418d-abe9-d7d042b263511.gif)
(1).解
求得
,
(2).计算单纯形乘子w,
得到
对于非基变量,计算判别数
可直接计算
令
R为非基变量集合
若判别数
则得到一个最优基本可行解,运算结束;
否则,转到下一步
(3).解
;
若
即
的每个分量均非正数,
则停止计算,问题不存在有限最优解,否则,进行步骤(4).确定下标r,使
二.
算法框图
初始化
初始可行基B
否
输出结果,得到最优解
否
不存在有限最优解
确定下标r,使得
三.计算程序
Clear%清空工作区
Clc%清空命令输入框
A=input('
A='
);
b=input('
b='
c=input('
c='
formatrat%可以让结果用分数输出
[m,n]=size(A);
%取维数
E=1:
m;
E=E'
;
F=n-m+1:
n;
F=F'
D=[E,F];
%创建一个一一映射,为了结果能够标准输出
X=zeros(1,n);
%初始化X
if(n<
m)%判断是否为标准型
fprintf('
不符合标准形式需引入松弛变量'
)
flag=0;
else
flag=1;
B=A(:
n-m+1:
n);
%找基矩阵
cB=c(n-m+1:
%基矩阵对应目标值的c
whileflag
w=cB/B%计算单纯形乘子,cB/B=cB*inv(B),左除相当于求逆
panbieshu=w*A-c%计算判别数,后面没有加分号,就是为了计算后能够显示出来
[z,k]=max(panbieshu)%k作为进基变量下标
确定下标并选择进基变量和离基变量为\n'
k);
b'
./(B\A(:
k))%这个式子是为了确定进基变量和离基变量的下标
if(z<
0.00000000001)%为了使判别数尽可能趋近于零
%所有判别数都小于0时达到最优解
已找到最优解!
\n'
xB=(B\b'
)'
f=cB*xB'
fori=1:
n
mark=0;
forj=1:
m
if(D(j,2)==i)
mark=1;
X(i)=xB(D(j,1))%利用D找出xB与X之间的关系
end
ifmark==0
X(i)=0;
%如果D中没有X(i),则X(i)为非基变量,所以X(i)=0
基向量为:
'
X
目标函数值为:
);
f
else
if(B\A(:
k)<
=0)%如果B\A(;
k)中的每一个分量都小于零
\n此问题不存在最优解!
%若B\A(:
k)的第k列均不大于0,则该问题不存在最优解
b1=B\b'
temp=inf;
if((A(i,k)>
0)&
&
(b1(i)/(A(i,k)+eps))<
temp)
temp=b1(i)/A(i,k);
%找离基变量
r=i;
end
x(%d)进基,x(%d)离基\n'
k,D(r,2));
%显示进基变量和离基变量
B(:
r)=A(:
k)
cB(r)=c(k)%确定进基离基变量后,相应的基矩阵及新基对应的目标值的c也相应改变
D(r,2)=k;
%改变D中的映射关系
end
【备注:
文件名字为danchunxing11zly.m】
四.使用方法以及运算实例
在命令窗口中输入rundanchunxing11zly,然后依次按照提示完成约束以及目标函数的矩阵。
例1:
min
S.t
窗口输入rundanchunxing11zly
A=[11-2100;
2-14010;
-12-4001];
b=[1084];
c=[1-21000]
运行结果为:
w=
000
panbieshu=
-12-1000
z=
2
k=
确定下标并选择进基变量和离基变量为
ans=
10
-8
x
(2)进基,x(6)离基
B=
101
01-1
002
cB=
00-2
00-1
00300-1
3
1/0
4
-2
x(3)进基,x(5)离基
1-21
04-1
0-42
01-2
0-3/2-7/4
-9/4000-3/2-7/4
0
xB=
8512
f=
-19
X=
0120000
0125000
0125800
例2:
max
命令窗口中输入:
rundanchunxing11zly
A=[11210;
14-101]
b=[64]
c=[-2-1100]
00
21-100
1
6
x
(1)进基,x(5)离基
11
01
0-2
0-710-2
-4
x(3)进基,x(4)离基
21
-11
1-2
-1/3-5/3
0-60-1/3-5/3
14/30000
14/302/300
-26/3