运筹学_运输问题课程设计报告.doc

上传人:夺命阿水 文档编号:11290 上传时间:2022-06-24 格式:DOC 页数:16 大小:136KB
返回 下载 相关 举报
运筹学_运输问题课程设计报告.doc_第1页
第1页 / 共16页
运筹学_运输问题课程设计报告.doc_第2页
第2页 / 共16页
运筹学_运输问题课程设计报告.doc_第3页
第3页 / 共16页
运筹学_运输问题课程设计报告.doc_第4页
第4页 / 共16页
运筹学_运输问题课程设计报告.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《运筹学_运输问题课程设计报告.doc》由会员分享,可在线阅读,更多相关《运筹学_运输问题课程设计报告.doc(16页珍藏版)》请在课桌文档上搜索。

1、工厂原料运输问题课程设计报告一、课程设计的目的运筹与最优化方法是信息与计算科学专业的一门重要的专业课程,是一门综合应用课程。主要容包括:线性规划、整数规划、动态规划、非线性规划、库存论、排队论、博奕论、图与网络分析的基本概念、方法和模型等,以及有广泛应用前景的运筹学问题的启发式算法。运筹学与最优化方法中的运输问题是一种应用广泛的网络最优化模型,该模型的主要目的是为物资调运,车辆调度选择最经济的运输路线。运筹学与最优化方法运输问题课程设计的目的是为了适应信息管理与信息系统培养目标的要求,使我们学习掌握如何应用运筹学中的数量方法与模型来分析通过计算机来实现研究现代企业生产与技术管理以及经营管理决策

2、问题。课程设计使我们能成熟的理解和应用运筹学模型,使我们认识运筹学在生产与技术管理和经营管理决策中的作用,领会其基本思想和分析与解决问题的思路。为我们以后毕业参加工作单位的策略策划打下坚实的基础。二、课程设计地点:第三实验楼4楼,运筹学实验室三、课程设计时间:第十八周,第十九周四、课程设计原理与过程一运输问题的容及其解决方法运输问题是一种应用广泛的网络最优化模型,该模型的主要目的是为物资调运、车辆高度选择最经济的运输路线。有些问题,如m台机床加工零件问题、工厂合理布局问题,虽要求与提法不同,经适当变化也可以使用本模型求得最付佳方案。运输问题的一般提法:某种物资有m个产地Ai,产量是aii1,2

3、,m,有m个销售地Bi,销量是bj。若从Ai运到Bi单位运价为dij,又假设产销平衡,即问如何安排运输可使总运费最小? 若用xij表示由Ai运到Bj的运输量,则平衡运输问题可写出以下线性规划模型: 约束条件具体问题如下:三个工厂B1,B2,B3,它们需要同一种原料,数量分别是72吨、102吨、41吨,另外有三座仓库A1、A2、A3可以供应上述原料56吨、82吨、77吨,由于工厂和仓库位置不同,单位运价不同,具体数据如表1。应如何安排运输方案,才能使总运费最小?表1B1B2B3产量A148856A216241682A38162477销量7210241215解决方法用表上作业法,具体原理和方法如下

4、:观察运输问题的线性规划模型可知:它有m*n具变量,个约束方程,其系数矩阵为0-1矩阵,且有大量的零,通常称为稀疏矩阵,形如:x11x12 x1nx21x22 x2n xm1xm2 xmn易知此矩阵的任何一个m+n阶子方阵对应的行列式等于零,所以系数矩阵的秩m+n-1,并可证明运输问题的约束方程组系数矩阵的秩为m+n-1.由此可知运输问题只有m+n-1个独立的约束方程,即其基本可行解中基变量个数为m+n-1,其余均为非基变量。由于运输问题的以上特征,可用更简便的方法进行计算,即表上作业法。表上作业法原理同于单纯形法,首先给出一个初始的调运方案,求出各非基变量的检验数去判定当前解是否为最优解,若

5、不是则进行方案调整,再判定是否为最优解,重复以上步骤,直到获得最优解为止。这些步骤在表上进行十分方便。操作过程在表上进行,具体的表如下:表2B1B2B3产量A14x118x128x1356A216x2124x2216x2382A38x3116x3224x3377销量7210241215初始调运方案如下表:表3B1B2B3产量A14 568856A21624 4116 4182A38 1616 612477销量7210241215上表中表示非基变量。 最优解的判定如下表B1B2B3产量uiA14 5688560A21624 4116 418212A38 1616 6124774销量7210241

6、215vj4124上表中带圈的数字所表示的是非基变量。若令ij=dij-,称ij为空格检验数。可以证明ij就是单纯形法中的检验数。所以用判定最优解的原则也同于单纯形法中的判定定理。当ij0时,即可得到最优解,若ij0,则返回上一级操作。直到得到最优解。二 运输问题课程设计源程序代码/ #include stdafx.h #include #include #include #include using namespace std; #define a * C+*N+j / 销量数组 #define b * / 产量数组 #define c * / 运价数组 #define x * X+i*+j

7、 / 运量数组 const double BIG_NUM = 1.0E15; / 任意大数 / = BIG_NUM : 运量为 0 #define s *S+i*+j / 检验数数组Sij */ #define u * / 位势数组 Ui #define v * / 位势数组 Vi #define cpi -i / 闭回路点 i 标 #define cpj -j / 闭回路点 j 标 #define cpf -f / 闭回路点 f 标 /* f = 0: j+; f = 1: i-; f = 2: j-; f = 3: i+; */ void TP; int main int M, N, i,

8、 j; double* C; / 存储运价, 产量及销量 double* X; / 存储运量分配方案 double z; ifstream infile; char fn80; double sum; cout.setf; cout.setf; cout.precision; coutfn; infile.open; if cout文件打开失败!n; system; exit; infileMN; M+; N+; X=new doublesizeof*; C=new doublesizeof*M*N; / 把运价, 供应量和需求量的数据读入到数组 c fori=0;i forj=0;j inf

9、ilez; c=z; infile.close; coutn= 数据文件 =n; fori=0;i forj=0;j coutsetwc; coutendl; system; TP; / 输出产销分配方案 coutn= 最优解 =n; sum=0; fori=0;i forj=0;j ifx=BIG_NUM coutsetw*; else coutsetwx; sum+=x*c; coutendl; /cout; coutnnt最高产量:setwsumendl; /我们现在是在求max,max=-min free; free; system; return 0; / 记录闭回路点结构 stru

10、ct PATH int i,j,f; ; void TP double *U, *V, *S; int MN1,m,n; struct PATH* CP; int k,i,j,l,k1,l1,ip; double Cmin,sum; int I0,J0,Imin,Jmin; int fi,fj,fc,f; MN1=+-1; m=M-1; n=N-1; S=new doublesizeof*; U=new doublesizeof*M; V=new doublesizeof*N; CP=new PATHsizeof*; / 解初始化 Xij = BIG_NUM fori=0;i forj=0;j

11、 x=BIG_NUM; / 最小元素法求初始可行解 for k = 0; k Cmin = BIG_NUM; for i = 0; i fi = 0; for l = 0; l / 去除已经用过的行 if i = cpi fi = 1; break; if continue; for j = 0; j fj = 0; for l = 0; l / 去除已经用过的列 if j = cpj fj = 1; break; if continue; if c Cmin = c; I0 = i; J0 = j; / end for j / end for i / 得到了未划去的最小运价所在格的坐标和最小

12、运价Cmin if 0 ifCmin=BIG_NUM & cpi=0 forl1=0;l1 ifxl1,cpj=BIG_NUM xl1,cpj=0; else ifCmin=BIG_NUM & cpi!=0 forl1=0;l1 ifxcpi,l1=BIG_NUM xcpi,l1=0; if b a cpi = I0; cpj = -1; x = b; a -= b; b = 0; else cpi = -1; cpj = J0; x = a; b -= a; a = 0; / end for k 用最小元素法求得了初使可行解 / 输出初始可行解 cout n= 初始解 =n; sum = 0

13、; for i = 0; i for j = 0; j if x = BIG_NUM cout setw *; else cout setw x; sum += x * c ; cout endl; coutnnt初始产量:setwsumendl;/我们现在是在求max,max=-min system; while / 位势置初值 Ui, Vi = BIG_NUM for i = 0; i u = BIG_NUM; for j = 0; j v = BIG_NUM; / 求位势 l = 0; u = 0; for i = 0; i for j = 0; j ifu=BIG_NUM & v=BI

14、G_NUM & x / 记录未求过位势的位置 cpi=i; cpj=j; l+; else ifxBIG_NUM & u v=c-u; else ifxBIG_NUM & v u=c-v; / 按记录位置求其余位势 if0 while ip=0; fork=0;k i=cpi; j=cpj; ifu=BIG_NUM & v=BIG_NUM & x /记录未求过位势的位置 cpi=i; cpj=j; ip+; else ifxBIG_NUM & u v=c-u; else ifxBIG_NUM & v u=c-v; /end for k if break; l = ip; / end for w

15、hile / 求检验数 for i = 0; i forj=0;j s=BIG_NUM; ifx= BIG_NUM s=c-u-v; / 求最小检验数 Cmin = BIG_NUM; fori=0;i forj=0;j ifs Cmin=s; I0= i; J0=j; if = 0 return; / 已经得到最优解,返回主程序 / 此时找到了入基变量 X / 求闭回路 for k = 0; k cpf = -1; cpi = I0; cpj = J0; k = 0; while f = cpf; / 设置闭回路搜索方向 while i = cpi; j = cpj; fc = 0; f+; cpf = f; if = 4 break; / 避免反向搜索 if0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号