您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > 物流中心选址重心法c++程序设计
1单一物流中心选址重心法c++程序设计(选址)某企业有五个供应商,他们的位置分别是(4+i,4+i),(12+i,4+i),(2+i,7+i),(11+i,11+i),(7+i,14+i),该企业从这五个供应商处的采购量每年为4+i、3+i、2+i、4+i、1+i,假设运输费率相同,i为序号的末位数。请用计算机编写一个通用程序,完成下面的题目。(1)用城市距离为该企业推荐一个地址,使该企业的费用最省。(2)将第1问中的结果作为一个初始解,用欧氏距离进行重新优化,推荐一个最优的位置。要求:(1)前后两次结果之差小于0.001;(2)程序的通用性高,可以满足任何多个供应商;(3)程序的可读性强;(4)操作界面友好;(5)在手册中要记录所有的程序、运行结果及相关界面图形。解:重心法是一种模拟方法。这种方法将物流系统中的需求点和资源点看成是分布在某一平面范围内的物流系统,各点的需求量和资源量分别看成是物体的重量,物体系统的重心作为物流网点的最佳设置点,利用求物体系统重心的方法来确定物流网点的位置。idiRnmiiVTC1min运输总费用(1)式中:Vi—i点运输量;Ri—待定物流中心到i点的运输费率;图供应地和需求地分布情况2di—待定物流中心到i点的距离。求解算法—数值分析法(重心法)1)设供应点和需求点所在地的坐标为(Xi,Yi),待定物流中心的位置坐标为(X0,Y0)则2020YYXXdiii(2)2)将(2)式代入(1)式,然后求运输总费用TC对X0和Y0的偏导数,并令其等于零。2020)()(YYXXRVTCiiii0)(00iiiidXXRVXTC00iiiiiiidRVXdXRV)()(0iiiiiiidRVdXRVX(3))()(0iiiiiiidRVdYRVY(4)上述两式中仍含有未知数di,因此一次不能求得X0和Y0(解析解),需要通过迭代收敛法得到数值解。迭代收敛法具体步骤:1、先用重心公式估算初始选址点(大致位置):)()(0iiiiiRVXRVX(5))()(0iiiiiRVYRVY(6)2、将X0和Y0代入公式2,计算di(i=1,2,…,m+n);3、将di代入公式3和4,解出修正值X0和Y0;4、根据修正值X0和Y0,再重新计算di;5、重复步骤3和4,直至X0和Y0的值在连续迭代过程中不再变化,即△X0≈0,△Y0≈0,即得到精确仓库选址位置,继续计算无意义。程序设计具体步骤:3Step1:利用几何重心公式(5)和(6)估算初始点X0,Y0)()(0iiiiiRVXRVX)()(0iiiiiRVYRVYStep2:将X0,Y0代入距离公式(2),计算di(i=1,2,…,5)2012011)()(YYXXd2022022)()(YYXXd2032033)()(YYXXd2042044)()(YYXXd2052055)()(YYXXdStep3:将di(i=1,2,…,5)代入公式3和公式4,修正值X0和Y0)()(0iiiiiiidRVdXRVX)()(0iiiiiiidRVdYRVYStep4:重复步骤2和3,直至修正值X0和Y0的值在连续迭代过程中不再变化。(用C++程序进行编译),程序如下所示:#includeiostream.h#includemath.h#includestdlib.hvoidmain(){intn;4float*X,*Y,*V,*R;cout请输入需求点和供应点总个数:;cinn;X=newfloat[n];Y=newfloat[n];V=newfloat[n];R=newfloat[n];cout请输入各结点的横坐标:;for(inti=0;in;i++)cinX[i];cout请输入各结点的纵坐标:;for(i=0;in;i++)cinY[i];cout请输入各结点的供货量或需求量:;for(i=0;in;i++)cinV[i];cout请输入各结点的内/外向运输费率:;for(i=0;in;i++)cinR[i];floatsumx=0.0,sumy=0.0,sumqr=0.0;floatavex,avey;for(i=0;in;i++){sumx+=V[i]*R[i]*X[i];sumy+=V[i]*R[i]*Y[i];sumqr+=V[i]*R[i];}avex=sumx/sumqr;avey=sumy/sumqr;cout初始物流中心地址为:X=avex''Y=aveyendl;float*d;5d=newfloat[i];floatxzsumx=0.0,xzsumy=0.0,xzsumqr=0.0;floatxzavex,xzavey;intj=0;while(1){for(i=0;in;i++)d[i]=sqrt((avex-X[i])*(avex-X[i])+(avey-Y[i])*(avey-Y[i]));for(i=0;in;i++){xzsumx+=V[i]*R[i]*X[i]/d[i];xzsumy+=V[i]*R[i]*Y[i]/d[i];xzsumqr+=V[i]*R[i]/d[i];}xzavex=xzsumx/xzsumqr;xzavey=xzsumy/xzsumqr;if(j==50)break;else{cout第j+1次迭代:tempX=xzavex''tempY=xzaveyendl;avex=xzavex;avex=xzavey;xzsumx=0.0;xzsumy=0.0;xzsumqr=0.0;j++;}}6cout物流中心最佳地址为:X=xzavex''Y=xzaveyendl;}物流管理082孙文婷200800847
本文标题:物流中心选址重心法c++程序设计
链接地址:https://www.777doc.com/doc-4701165 .html