运筹学——解对偶单纯形法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(i=0;i<m;i++)
sea nf("%f",&b[i]);
prin tf("\n请输入目标函数各个变量的系数所构成的系数阵
for(i=0;i <n ;i++)
sea nf("%f",&C[i]);
}
int duiouda nchu nxin g1()
{
int i,k;
int flag;
float min=0;
for(i=0;i<m;i++)
if(b[i]>=0)
flag=1;
else {flag=0;break;}
if(flag==1)
return -1;
for(i=0;i<m;i++)
{
if(mi n>b[i])
{mi n=b[i];k=i;}
}
return k;
} int duiouda nchu nxin g2(i nt a)
if(q==-1) break;
duiouda nchunxin g3(p,q);
流程图
duiouda nchunxin g1();
if(q==-1)
{
printf("\n所得解已经是最优解!\n");
prin t();
for(i=0;i<m;i++)
{pri ntf("x(%d)=%.3f\t", nu m[i],b[i]);}
prin tf("z=%.3f",z);
break;
}
prin t();
p=duiouda nchu nxin g2(q);
{
int i,j,c,l;
float temp1,temp2,temp3;
c=q;
l=p;
temp仁A[c][l];
b[c]=b[c]/temp1;
for(j=0;j <n ;j++)
A[c][j]=A[c][j]/temp1;
for(i=0;i<m;i++)
{
if(i!=c)
if(A[c][l]!=0)
{
if(A[a][j]<0)
seta[j]=-C[j]/A[a][j];
else seta[j]=M;
}
mi n=M;
for(j=0;j <n ;j++)
{
if(min>=seta[j])
{mi n=seta[j];i=j;}
}
nu m[a]=i+1;
return i;
}
void duiouda nchunxin g3(i nt p,i nt q)
算法:
用对偶单纯形法解决生产资料分配问题的步骤:
Stepl找出一组以定基元素xOi和人工变量为基变量的正则解X0,
若X0是可行的则X0是最优解,
停止,否则转向STEP2;
Step2确定换出变量xOI,其中x0l=min{xOr;xOr<O};
Step3如果对所有非基变量xOj,0jX),则该问题无可行解,运算停止,
题目:对偶单纯形法解线性规划问题
小组成员:
摘要:
运筹学是辅助人们进行科学管理的一种数学方法.而对偶单纯形 法是线性规划中重要的数学方法,在简化运算,解决实际问题中具有 重要的应用。它是解决研究线性约束条件下线性目标函数的极值问题 的数学理论和方法,广泛应用于军事作战、经济分析、经营管理和工 程技术等方面。为合理地利用有限的人力、物力、财力等资源作出的 最优决策,提供科学的依据。在经济管理、交通运输、工农业生产等 经济活动中,提高经济效果是人们不可缺少的要求。关键词:对偶单纯形法线性规划最优解正文:单纯形法和对偶单纯形法的基本思想:
float M=1000000.0;
float A[100][100];
float C[100];
float b[100];
float seta[100];
int num[100];
float z=0;
void in put();
void prin t();
int duiouda nchu nxin g1();
for(j=0;j <n ;j++)
prin tf("%.3f\t",A[i][j]);
prin tf("%.3f\n",b[i]);
}
printf("\n
\n");
} mai n()
{
int i,j=0;
in t p,q;
in put();
for(i=0;i<m;i++)
{
if(A[i][ nu m[i]-1]<=0)
{
int i,j;
int flag=O;
float min;
for(j=0;j <n ;j++)
if(A[a][j]>=0)
flag=1;
else {flag=O;break;}
if(flag==1)
{printf("\n该线性规划无最优解!\n"); return -1;}
for(j=0;j <n ;j++)
对偶单纯形法正是的检验数全部非正,对应的对偶问题的基解Y0二
CBB-1是基可行解从X0迭代到另一个基解X1,在迭代过程中保持它 对应的对偶问题的基解是基可行解,逐步消除原问题基解的不可行性,最终达到两者同时为可行解,也就同时是最优解了。这就是对偶单纯 形法的基本思想。
给出一个线性规划问题:
Max z=CX
AX<b
X X)
其对偶问题是:
Min w = Yb
YAXC
YX)
单纯形法解决线性规划问题的思想是:
从问题(1)的一个基解X0开始迭代到另一个基解,在迭代过程中 保持基解的可行性,同时它对应的对偶问题 ⑵的基解Y0二CBB-1的 不可行性逐步消失,直到Y0是问题 ⑵的可行解时,X0就是问题(1)的 最优解了。
{
b[i]=-b[i];
for(j=0;jv n;j++)
A[i][j]=-A[i][j];
}
}
printf("\n
\n");
prin tf("\t");
for(i=0;i <n ;i++)
prin tf("X(%d)\t",i+1);pri ntf("RHS\n");
while(1)
{
q=duiouda nchu nxin g1();
}
void prin t()
{
int i,j;
printf("\n
\n");
prin tf("\t");
for(i=0;i <n ;i++)
{
prin tf("%.3f\t",-C[i]);
}
prin tf("%.3f",z);
printf("\n
\n");
for(i=0;i<m;i++)
{
prin tf("x(%d)\t", nu m[i]);
{
temp2=A[i][l];
b[i]=b[i]-b[c]*temp2;
for(j=0;j< n;j++)
A[i][j]=A[i][j]-A[c][j]*temp2;
}
}
temp3=C[l];
for(i=0;i <n ;i++)
C[i]=C[i]-A[c][i]*temp3;
z=z+b[c]*temp3;
否则转向STEP4;
Step4确定换入变量xOk,其中 水0k=min ot [3lt; [3lt<0;1 <t<n+m ;
Step5取x0l为换出变量,x0k为换入变量进行迭代,然后重复上过程 直到得到最优解。
程序
#i nclude<stdio.h>
#in clude<math.h>
int m,n;
for(i=0;i<m;i++)
for(j=0;j <n ;j++)
sca nf("%f",&A[i][j]);
prin tf("\n请输入初始基变量的数字代码num矩阵:\n");
for(i=0;i<m;i++)
sca nf("%d",&n um[i]);
prin tf("\n请输入方程组右边的值矩阵b:\n");
int duiouda nchu nxin g2(i nt a);
void duiouda nchunxin g3(i nt a,i nt b);
void in put()
{printf("请输入方程组的系数矩阵维数,m行n列:\n");
sca nf("%d%d",&m,&n);
int i,j;
printf("请输入方程组的系数矩阵A(%d行%£列):\n",m,n);
相关文档
最新文档