⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c

📁 单仓库设施选址决策方法,用于配送中心选址或者单仓库设施选址
💻
字号:
单仓库设施选址决策方法




       单设施选址模型有不同的名称,如:精确重心法、网格法和重心法等,因为选址因素只包括运输费率和该点的货物运输量,所以此方法较为简单。


       我们以预计仓库点位到达各个目的点位的成本最低为考察目标:


       即:


              Min TC=∑ViRidi                            i 遍历所有目的地           ……………(0)


       其中:  TC——总运输成本;


                     Vi——i 点运输量;


                     Ri——到 i 点的运输费率;


                     di——从待定仓库位置到i 点的距离。


       


       在坐标平面中设待定仓库坐标为(X0,Y0)


               ∑ViRiXi/di

    

  X0=                               ........(1)


                 ∑ViRi/di




                  ∑ViRiYi/di


     Y0=                             …(2)


                   ∑ViRi/di




       其中di可以坐标间公式

    di =SQR((X0-Xi)2+(Y0-Yi)2)                 …(3)


       该方法求解过程:


1、确定各目的地点的坐标,同时确定各点货物运输量和直线距离运费;


2、不考虑距离因素,用重心公式估算初始选址点:




              ∑ViRiXi


  X0=                                …(4)


               ∑ViRi






                 ∑ViRiYi


   Y0                                …(5)


                ∑ViRi




3、根据公式(3),用步骤2得到的(X0,Y0)计算di;


4、将di代入公式(1),(2),得到修正的(X0,Y0)坐标;


5、根据修正的(X0,Y0)坐标,再重新计算di;


6、  重复步骤4和步骤5直至(X0,Y0)坐标在连续迭代过程中都不再变化或变化在误差范围内;


7、最后,如果需要,利用公式(0)计算最优选址的总成本。



#include <stdio.h>
#include <math.h>
struct xuanzhi
{
  double x,y,v,r;

}xz[5]={{3,8,2000,0.050},{8,2,3000,0.050},{2,5,2500,0.075},{6,4,1000,0.075},{8,8,1500,0.075}};

main()
{
    struct xuanzhi;
    int i;
    double d[5];
    double x0=0.0,y0=0.0,min=0.0,TC=0.0,t=0.0,m=0.0,w=0.0,x1=0.0,y1=0.0,m1=0.0,m2=0.0,w2=0.0,t1=0.0,m3=0.0,w3=0.0;

     for(i=0;i<5;i++)
       {
           m+=xz[i].v*xz[i].r*xz[i].x;
           w+=xz[i].v*xz[i].r;
           m1+=xz[i].v*xz[i].r*xz[i].y;
       }
           x0=m/w;
           y0=m1/w;
     for(i=0;i<5;i++)
       {
            d[i]=sqrt((xz[i].x-x0)*(xz[i].x-x0)+(xz[i].y-y0)*(xz[i].y-y0));
            m3+=xz[i].v*xz[i].r*xz[i].x/d[i];
            t1+=xz[i].v*xz[i].r*xz[i].y/d[i];
            w3+=xz[i].v*xz[i].r/d[i];
        }
            x1=m3/w3;
            y1=t1/w3;
    do
    {     
            x0=x1;
            y0=y1;
       for(i=0;i<5;i++)
       {
            d[i]=sqrt((xz[i].x-x0)*(xz[i].x-x0)+(xz[i].y-y0)*(xz[i].y-y0));
            m2+=xz[i].v*xz[i].r*xz[i].x/d[i];
            t+=xz[i].v*xz[i].r*xz[i].y/d[i];
            w2+=xz[i].v*xz[i].r/d[i];
        }

        x1=m2/w2;
        y1=t/w2;
        m2=0.0;
        t=0.0;
        w2=0.0;
    }while(fabs(x0-x1)-0.00000001>0&&fabs(y0-y1)-0.00000001>0);
    printf("x0=%12lf,y0=%12lf\n",x0,y0);
    for(i=0;i<5;i++)
    {
        d[i]=sqrt((xz[i].x-x0)*(xz[i].x-x0)+(xz[i].y-y0)*(xz[i].y-y0));
        min=xz[i].v*xz[i].r*d[i];
        TC+=min;
    }
    printf("min TC=%12lf\n",TC);
    getch();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -