我正在尝试创建一个模型,在该模型中,制造商可以过帐需要运输的货物,而运输商可以过帐卡车从A点到B点。如果要运输的原点,目的地和货物和卡车载重量)匹配项,然后像火种匹配项一样通知他们。
我曾尝试研究自动匹配,但是最接近的是匈牙利算法,它可以解决分配问题,但是我不确定这是否是正确的方向。
在模型中,我已经为两个部分(即制造商和运输商)创建了输入表单,并将数据保存在数据库中。我正在考虑应用一个触发函数,该函数每次在数据库中出现新条目时都会重新检查是否最匹配
这是来自两种输入形式的数据:
制造商
M_ID From To M_Type T_Type T_Length T_Weight #Trucks Loading_Time
1025 A B Boxes Open 12-Tyre 22 3 27-March-2019 6:00PM
1029 C D Cylinders Trailer HIGH 23 2 28-March-2019 6:00PM
1989 G H Scrap Open 14-Tyre 25 5 26-March-2019 9:00PM
运输车
T_ID From To T_Type T_Length T_Weight #Trucks Price
6569 A B Open 12-Tyre 22 5 1500
8658 G H Open 14-Tyre 25 10 1200
4595 A B Open 12-Tyre 22 3 1000
1252 A B Trailer Low 28 5 1800
我们可以看到,运输车4595是制造商1025的最佳搭配,运输车6569是第二好的选择。我想将它们都匹配,还向制造商表明他也有另一个选择。
答案 0 :(得分:1)
此问题可以看作是有向图,其中从顶点A
到另一个顶点B
的边代表卡车从A
到B
(或想要将货物从A
运送到B
的制造商),边缘的重量可以用来表示货物的数量(或卡车的载重量)。
您可以为制造商和运输商分别使用一个邻接矩阵。每次将新条目填充到任一矩阵(例如制造商的矩阵)中时,在另一个矩阵(运输商的矩阵)中检查相应的条目,并比较负载以查看是否匹配。 / p>
```python
class trans_struct(T_ID, T_Type, T_Length, Trucks, Price):
def __init__(self, T_ID, T_Type, T_Length, Trucks, Price)
self.T_ID = T_ID
self.T_Length = T_Length
self.T_Trucks = T_Trucks
self.T_Type = T_Type
self.T_Price = T_Price
class man_struct(M_ID, M_Type, T_Length, Trucks, Loading_Time):
def __init__(self, M_ID, M_Type, T_Length, Trucks, Loading_Time)
self.M_ID = M_ID
self.T_Length = T_Length
self.T_Trucks = T_Trucks
self.T_Type = T_Type
self.T_Price = T_Price
dicti = {A:0, B:1, C:2} #dictionary to map places to integeral indexes
num_places = len(dicti)
trans_mat = [[[] for __ in range(num_places)] for _ in range(num_places)] #initialize transport matrix to a default value
manf_mat = [[[] for __ in range(num_places)] for _ in range(num_places)]
def manf_input():
#take input for manufacturer's data in this func into the structure object
manf_mat[dicti[A]][dicti[B]].append((struct.T_Weight, struct)) #assuming manufacturer wanted to move goods from A to B
check_for_match(A, B) #function to compare corresponding matrix entries each time a new entry is inserted
def check_for_match(A, B, T_Length):
for entry in trans_mat[dicti[A]][dicti[B]]:
if entry[0]>= T_Length:
#match found display required info by retreiving from the structure
#
```
我在这里只写了一些功能。我仅编写了用于检查何时为制造商创建新条目的函数,反之亦然。您可以添加其他约束,例如日期,时间等。