《运筹学》 运输问题课程设计报告Word文档格式.docx
- 文档编号:15744753
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:22
- 大小:60.61KB
《运筹学》 运输问题课程设计报告Word文档格式.docx
《《运筹学》 运输问题课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《《运筹学》 运输问题课程设计报告Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
问如何安排运输可使总运费最小?
若用xij(i=1,2,…,m;
j=1,2,…,n)表示由Ai运到Bj的运输量,则平衡运输问题可写出以下线性规划模型:
约束条件
具体问题如下:
三个工厂B1,B2,B3,它们需要同一种原料,数量分别是72吨、102吨、41吨,另外有三座仓库A1、A2、A3可以供应上述原料56吨、82吨、77吨,由于工厂和仓库位置不同,单位运价不同,具体数据如表1。
应如何安排运输方案,才能使总运费最小?
表1
B1
B2
B3
产量
A1
4
8
56
A2
16
24
82
A3
77
销量
72
102
41
215
解决方法用表上作业法,具体原理和方法如下:
观察运输问题的线性规划模型可知:
它有m*n具变量,(m+n)个约束方程,其系数矩阵为0-1矩阵,且有大量的零,通常称为稀疏矩阵,形如:
x11x12…x1nx21x22…x2n…xm1xm2…xmn
易知此矩阵的任何一个m+n阶子方阵对应的行列式等于零,所以系数矩阵的秩≤m+n-1,并可证明运输问题的约束方程组系数矩阵的秩为m+n-1.
由此可知运输问题只有m+n-1个独立的约束方程,即其基本可行解中基变量个数为m+n-1,其余均为非基变量。
由于运输问题的以上特征,可用更简便的方法进行计算,即表上作业法。
表上作业法原理同于单纯形法,首先给出一个初始的调运方案(实际上是初始基本可行解),求出各非基变量的检验数去判定当前解是否为最优解,若不是则进行方案调整(即从一个基本可行解转换成另一个基本可行解),再判定是否为最优解,重复以上步骤,直到获得最优解为止。
这些步骤在表上进行十分方便。
操作过程在表上进行,具体的表如下:
表2
x11
x12
x13
x21
x22
x23
x31
x32
x33
初始调运方案如下表:
表3
56
×
41
16
61
上表中“×
”表示非基变量。
最优解的判定如下表
ui
12
vj
上表中带圈的数字所表示的是非基变量。
若令λij=dij-(ui+vj)(dij为非基变量所在的空格处的运费),称λij为空格检验数。
可以证明λij就是单纯形法中的检验数。
所以用判定最优解的原则也同于单纯形法中的判定定理。
当λij>
0时,即可得到最优解,若λij≯0,则返回上一级操作。
直到得到最优解。
(二)运输问题课程设计源程序代码
//#include"
stdafx.h"
#include<
fstream>
iomanip>
iostream>
cmath>
usingnamespacestd;
#definea(j)(*(C+(M-1)*N+j))//销量数组
#defineb(i)(*(C+i*N+N-1))//产量数组
#definec(i,j)(*(C+i*N+j))//运价数组
#definex(i,j)(*(X+i*(N-1)+j))//运量数组
constdoubleBIG_NUM=1.0E15;
//任意大数
//(<
BIG_NUM:
基本解,>
=BIG_NUM:
运量为0)
#defines(i,j)(*(S+i*(N-1)+j))//检验数数组Sij*/
#defineu(i)(*(U+i))//位势数组Ui
#definev(i)(*(V+i))//位势数组Vi
#definecpi(k)((CP+k)->
i)//闭回路点i标
#definecpj(k)((CP+k)->
j)//闭回路点j标
#definecpf(k)((CP+k)->
f)//闭回路点f标
/*
f=0:
j++;
f=1:
i--;
f=2:
j--;
f=3:
i++;
*/
voidTP(intM,intN,double*C,double*X);
intmain()
{
intM,N,i,j;
double*C;
//存储运价,产量及销量
double*X;
//存储运量分配方案
doublez;
ifstreaminfile;
charfn[80];
doublesum;
cout.setf(ios_base:
:
left,ios_base:
adjustfield);
fixed,ios_base:
floatfield);
cout.precision(3);
cout<
<
"
请输入数据文件名:
"
;
cin>
>
fn;
infile.open(fn);
if(!
infile)
文件打开失败!
\n"
system("
pause"
);
exit(0);
}
infile>
M>
N;
M++;
N++;
X=newdouble[sizeof(double)*(M-1)*(N-1)];
C=newdouble[sizeof(double)*M*N];
//把运价,供应量和需求量的数据读入到数组c(i,j)
for(i=0;
i<
M;
++i)
for(j=0;
j<
++j)
z;
c(i,j)=z;
infile.close();
\n=============数据文件================\n"
setw(10)<
c(i,j);
endl;
TP(M,N,C,X);
//输出产销分配方案
\n=============最优解===================\n"
sum=0;
M-1;
N-1;
if(x(i,j)>
=BIG_NUM)
******"
else
x(i,j);
sum+=(x(i,j)*c(i,j));
//cout<
\n\n\tTheminCostis:
%-10.4f\n"
sum);
\n\n\t最高产量:
sum<
//我们现在是在求max,max=-min
free(X);
free(C);
return0;
//记录闭回路点结构
structPATH
inti,j,f;
};
voidTP(intM,intN,double*C,double*X)
double*U,*V,*S;
intMN1,m,n;
structPATH*CP;
intk,i,j,l,k1,l1,ip;
doubleCmin,sum;
intI0,J0,Imin,Jmin;
intfi,fj,fc,f;
MN1=(M-1)+(N-1)-1;
m=M-1;
n=N-1;
S=newdouble[sizeof(double)*(M-1)*(N-1)];
U=newdouble[sizeof(double)*M];
V=newdouble[sizeof(double)*N];
CP=newPATH[sizeof(structPATH)*(MN1+1)];
//解初始化Xij=BIG_NUM
m;
n;
x(i,j)=BIG_NUM;
//最小元素法求初始可行解
for(k=0;
k<
MN1;
++k)
Cmin=BIG_NUM;
for(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运筹学 运筹学 运输问题课程设计报告 运输 问题 课程设计 报告