?? 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 + -