c语言超市选址问题实验报告,单仓库设施选址决策方法(重心法,C语言代码)

下面是大二的时候仓储老师布置的一个作业,是关于单仓库选址的问题,要我们用C语言写代码,编一个程序!

这只是一个作业!!!

单仓库设施选址决策方法

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

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

即:

Min TC=

ViRidii

遍历所有目的地

……………(

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 #include 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(); }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值