重心法选址的C++编程问题,请高手赐教

重心法选址的C++编程问题,请高手赐教,第1张

据我所知:

公式:x0 = ( ∑ xiwi ) / ( ∑ wi )

y0 = ( ∑ yiwi ) / ( ∑ wi )

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

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

即:

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=0i<5i++)

{

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=0i<5i++)

{

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=0i<5i++)

{

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=0i<5i++)

{

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()

}

精确重心法为一种设置单个厂房或仓库的方法,这种方法主要考虑的因素是现有设施之间的距离和要运输的货物量,经常用于中间仓库或分销仓库的选择。商品运输量是影响商品运输费用的主要因素,仓库尽可能接近运量较大的网点,从而使较大的商品运量走相对较短的路程,就是求出本地区实际商品运量的重心所在的位置。

扩展资料

重心法

为了获得准确的控制量,就要求模糊方法能够很好的表达输出隶属度函数的计算结果。重心法是取隶属度函数曲线与横坐标围成面积的重心,作为模糊推理的最终输出值,即

对于具有m个输出量化级数的离散阈情况:

与最大隶属度法相比较,重心法具有更平滑的输出推理控制。即使对应于输入信号的微小变化,输出也会发生变化。

推理得到的模糊子集要转换为精确值,以得到最终控制量输出y。常用两种精确化方法:

1、最大隶属度法。在推理得到的模糊子集中,选取隶属度最大的标准论域元素的平均值作为精确化结果。

2、重心法。将推理得到的模糊子集的隶属函数与横坐标所围面积的重心所对应的标准论域元素作为精确化结果。在得到推理结果精确值之后,还应按对应关系,得到最终控制量输出y。

参考资料来源:百度百科-模糊控制规则

参考资料来源:百度百科-去模糊化

参考资料来源:百度百科-重心法


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12062998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存