物流管理单设施选址(single facility location)
这是一个根据不同到工厂运输量、运输费率、位置求解最佳仓库位置的问题。
下边是我用VB写的代码(仅供参考)
'外部接口变量
Public V(), R(), X(), Y() As Double
'V() 运输量
'R() 运输费率
'X,Y 地点的相对位置
Public n As Integer
'n表示仓库数量
'内部函数变量
Public X1, Y1, SX1, SX2, SY1, SY2, D(), Cxy As Double
Public flagcheck As Boolean
'初始化过程
Sub init()
Dim i As Integer
SX1 = 0
SX2 = 0
SY1 = 0
SY2 = 0
For i = 0 To n - 1
SX1 = SX1 + V(i) * R(i) * X(i)
SX2 = SX2 + V(i) * R(i)
SY1 = SY1 + V(i) * R(i) * Y(i)
SY2 = SY2 + V(i) * R(i)
Next
X1 = SX1 / SX2
Y1 = SY1 / SY2
End Sub
'求解仓库的最佳位置
Function slove() As Integer
Dim flag As Boolean
Dim i, re As Integer
Dim TempX, TempY As Double
Dim intRValue As Integer
intRValue = 1
Call init
If n = 1 Then
re = MsgBox("只有一个地点", vbOKOnly)
Else
Do
TempX = X1
TempY = Y1
For i = 0 To n - 1
D(i) = Sqr((X(i) - X1) * (X(i) - X1) + (Y(i) - Y1) * (Y(i) - Y1))
If D(i) = 0 Then
D(i) = 1
End If
Next
SX1 = 0
SX2 = 0
SY1 = 0
SY2 = 0
For i = 0 To n - 1
SX1 = SX1 + V(i) * R(i) * X(i) / D(i)
SX2 = SX2 + V(i) * R(i) / D(i)
SY1 = SY1 + V(i) * R(i) * Y(i) / D(i)
SY2 = SY2 + V(i) * R(i) / D(i)
Next
X1 = SX1 / SX2
Y1 = SY1 / SY2
intRValue = intRValue + 1
Loop While (Abs(X1 - TempX) <= Cxy And Abs(Y1 - TempY) <= Cxy) = False
End If
slove = intRValue
End Function
'求解的最小费率函数
Function FindMinTc() As Double
Dim TC As Double
Dim i As Integer
For i = 0 To n - 1
D(i) = Sqr((X(i) - X1) * (X(i) - X1) + (Y(i) - Y1) * (Y(i) - Y1))
Next
TC = 0
For i = 0 To n - 1
TC = TC + V(i) * R(i) * D(i)
Next
FindMinTc = TC
End Function
评论0