下面是大二的时候仓储老师布置的一个作业,是关于单仓库选址的问题,要我们用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(); }