2单设施重心法选址
2.1实验目的
掌握单设施重心法选址的原理,能够计算简单选址题目中待选设施的位置; 掌握单设施重心选址的算法流程,能够设计类似题目的算法流程,并编写程序。 2.2实验过程
(1)单设施重心法选址的原理
重心法选址模型示意图如图2-1所示。
Y?X图2-1 单设施重心法选址选址示意图
求解目标:C-总成本最低
n MinC?fiVidi i?1
其中:fi-序号为i的点的运输费率; Vi-序号为i的点的产量或者销量;
di-序号为i的点到待选设施点的相对距离。
待选设施位置的计算公式: nn(fiViyi/di) (fiVixi/di)i?1 i?1Y?cXc?nn (fV/diii)(fV/d)iii i?1i?1
其中:Xc-重心的X坐标; Yc-重心的Y坐标; Xi-第i个地点X坐标; Yi-第i个地点Y坐标;
22di?(X?d)?(Yc?diy)cix
?????
(2)算法流程图,如图2-2所示。
初始化 Xc=0,Yc=0JD=0.001
赋值 SumCOld = 0SumCNew = 0 Sum1 = 0Sum2 = 0 Sum3 = 0 计算di SumCOldj=j+1Xc,Yc DiSumCNew 否 判断(SumCOld-SumCNew)<=JD
是
输出 Xc,YcSumCNew j(跌代次数)
停止
图2-2 算法流程图
2.3实验结果
(1)单设施重心法选址程序参数设定及其求解界面如图2-3所示。
图2-3 单设施重心法选址程序参数设定及其求解界面
(2)参数设定及其求解界面变量声明部分(代码) Private Sub Command1_Click() If Text1.Text = \
MsgBox \横坐标不允许为空\ Text1.SetFocus Exit Sub
ElseIf IsNumeric(Text1.Text) = False Then MsgBox \横坐标必须为数值型数据!\ Text1.Text = \ Text1.SetFocus Exit Sub End If
If Text2.Text = \
MsgBox \纵坐标不允许为空\ Text2.SetFocus Exit Sub
ElseIf IsNumeric(Text2.Text) = False Then MsgBox \纵坐标必须为数值型数据!\ Text2.Text = \ Text2.SetFocus Exit Sub End If
If Text3.Text = \
MsgBox \产量或销量不允许为空\ Text3.SetFocus Exit Sub
ElseIf IsNumeric(Text3.Text) = False Then MsgBox \产量或销量应为数值型数据!\ Text3.Text = \ Text3.SetFocus Exit Sub
ElseIf Val(Text3.Text) < 0 Then
MsgBox \产量或销量应为正数,否则无实际意义!\ Text3.Text = \ Text3.SetFocus Exit Sub End If
If Text4.Text = \
MsgBox \运输费率不允许为空\ Text4.SetFocus Exit Sub
ElseIf IsNumeric(Text4.Text) = False Then MsgBox \运输费率应为数值型数据!\ Text4.Text = \ Text4.SetFocus Exit Sub
ElseIf Val(Text4.Text) < 0 Then
MsgBox \运输费率应为正数,否则无实际意义!\ Text4.Text = \ Text4.SetFocus Exit Sub End If
If Text5.Text = \
MsgBox \横坐标不允许为空\ Text5.SetFocus Exit Sub
ElseIf IsNumeric(Text5.Text) = False Then MsgBox \横坐标必须为数值型数据!\ Text5.Text = \ Text5.SetFocus Exit Sub End If
If Text6.Text = \
MsgBox \纵坐标不允许为空\ Text6.SetFocus Exit Sub
ElseIf IsNumeric(Text6.Text) = False Then MsgBox \纵坐标必须为数值型数据!\ Text6.Text = \ Text6.SetFocus Exit Sub End If
If Text7.Text = \ MsgBox \精度不允许为空\ Text7.SetFocus Exit Sub
ElseIf IsNumeric(Text7.Text) = False Then MsgBox \精度应为数值型数据!\ Text7.Text = \ Text7.SetFocus Exit Sub
ElseIf Val(Text7.Text) < 0 Then
MsgBox \精度应为正数,否则无实际意义!\ Text7.Text = \ Text7.SetFocus Exit Sub End If
For i = 1 To List1.ListCount
If Text1.Text = Val(List1.List(i - 1)) And Text2.Text = Val(List2.List(i - 1)) Then
MsgBox \与第\输入坐标值相同,请重新输入\ Text1.Text = \ Text2.Text = \ Text3.Text = \ Text4.Text = \ Text1.SetFocus Exit Sub End If Next i
List1.AddItem Text1.Text List2.AddItem Text2.Text List3.AddItem Text3.Text List4.AddItem Text4.Text Text1.Text = \ Text2.Text = \ Text3.Text = \ Text4.Text = \ Text1.SetFocus
If List1.ListCount >= 2 Then Command2.Enabled = True End If End Sub
Private Sub Command2_Click() Xc = Val(Text5.Text) Yc = Val(Text6.Text) JD = Val(Text7.Text)
Dim SumCO As Double Dim SumCN As Double Dim Sum1 As Double Dim Sum2 As Double Dim Sum3 As Double
For j = 1 To 10000
重心法选址



