单纯形法例题讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例1
max z=2x1+3x2
(标准形式即所有的变量均为负、所有约束条件为等式、所有的右端项系数非负)
a=(2,3) b1=(80,160,120) A2=NULL b2=NULL A3=NULL b3=NULL n.iter=n+2*m maxi=TRUE ●
simplex(a=a,A1=A1,b1=b1,maxi=TRUE): m1=3,m2=0,m3=0
m=3,n=2 a.o=a=(2,3)
if(maxi) a=-a(-2,-3) if(m2+m3==0) a=(-2,-3,0,0,0) b=(80,160,120) init=(0,0,0,80,160,120) basic=(3,4,5) eps=1e -10
out1<-simplex1(a=a,A=A,b=b,init=init,basic=basic,eps=eps) ⏹ simplex1(a=a,A=A,b=b,init=init,basic=basic,eps=eps):
N=5,M=3
nonbasic=(1,2)
if(stage==2) obfun=(-2,-3)
it=1
◆ while(!all(obfun > -eps) && (it <= n.iter))循环 pcol=3
if(stage==2) neg=(1,3)
x1+2x2<=80
4x1<=160 4x2<=120 x1,x2>=0
A1= 1 2 4 0 0 4
A= 1 2 1 0 0 4 0 0 1 0 0 4 0 0 1
tableau= 80 -1 -2 160 -4 0 120 0 -4
tableau= 80 -1 -2 160 -4 0
120 0 -4
0 -2 -3
转化为标准形式
x1+2x2+x3=80 4x1+x4=160 4x2+x5=120
x1,x2,x3,x4,x5>=0
ratios=(40,30)
prow=3
pivot(tableau,prow ,pcol) 换基迭代 pv=tableau[3,3]=-4
pcv=tableau[,3]=(-2,0,-4,-3)
tableau[-3, ] = tableau[-3, ] - (tableau[-3, 3]/pv) %o% tableau[3,]
tableau[3, ] = tableau[3, ]/(-pv)=(30,0,-1)
tableau[3,3]=1/pv=-1/4
tableau[-3, 3]=pcv[-3]/(-4)
if(stage==1) else temp=basic[3]=5 basic[3]=nonbasic[2]=2 nonbasic[2]=5 obfun =tableau[4, -1L]=(-2,3/4) it=it+1=2
至此进行了一次换基迭代(basic=(3,4,2) nonbasic=(1,5)) 再从while 循环头部开始,判断循环条件是否满足 pcol=2
if(stage==2) neg=(1,2) ratios=(20,40)
prow=1
pivot(tableau,prow ,pcol) 换基迭代 pv=tableau[1,2]=-1
pcv=tableau[,2]=(-1,-4,0,-2)
tableau[-1, ] = tableau[-1, ] - (tableau[-1, 2]/pv) %o% tableau[1,]
tableau[1, ] = tableau[1, ]/(-pv)=(20,-1,0)
tableau= 20 -1 0 160 -4 0 120 0 -4 -90 -2 0
tableau= 20 -1 0
160 -4 0
30 0 -1/4
-90 -2 0
tableau= 20 -1 0 160 -4 0 30 0 -1 -90 -2 0
tableau= 20 -1 1/2 160 -4 0
30 0 -1/4
-90 -2 3/4
tableau= 20 -1 1/2 80 0 -2 30 0 -1/4 -130 0 -1/4
tableau= 20 -1 1/2 80 0 -2 30 0 -1/4 -130 0 -1/4
tableau[1,2]=1/pv=-1/1
tableau[-1,2]=pcv[-1]/(-1)
if(stage==1) else temp=basic[1]=3 basic[1]=nonbasic[1]=1 nonbasic[21=3 obfun =tableau[4, -1L]=(2,-1/4) it=it+1=3
至此进行了两次换基迭代(basic=(1,4,2) nonbasic=(3,5)) 再从while 循环头部开始,判断循环条件是否满足 pcol=3
if(stage==2) neg=(2,3) ratios=(40,120) prow=2
pivot(tableau,prow ,pcol) 换基迭代
pv=tableau[2,3]=-2
pcv=tableau[,3]=(1/2,-2,-1/4,-1/4)
tableau[-2, ] = tableau[-2, ] - (tableau[-2, 3]/pv) %o% tableau[2,]
tableau[2, ] = tableau[2, ]/(-pv)=(40,2,-1)
tableau[2,3]=1/pv=-1/2
tableau[-2,3]=pcv[-2]/(-2)
if(stage==1) else temp=basic[2]=4 basic[2]=nonbasic[2]=5 nonbasic[21=4
tableau= 20 -1 1/2 80 0 -2 30 0 -1/4 -130 0 -1/4 tableau=
20 -1 1/2 80 4 -2 30 0 -1/4 -130 2 -1/4
tableau= 40 0 0
80 4 -2
20 -1/2 0
-140 3/2 0 tableau=
40 0 0
40 2 -1
20 -1/2 0
-140 3/2 0
tableau=
40 0 0 40 2 -1/2 20 -1/2 0 -140 3/2 0 tableau= 40 0 -1/4 40 2 -1/2 20 -1/2 1/8
-140 3/2 1/8