使用Python的分配算法

时间:2019-03-24 03:50:58

标签: python database algorithm computer-science

我正在尝试创建一个模型,在该模型中,制造商可以过帐需要运输的货物,而运输商可以过帐卡车从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是第二好的选择。我想将它们都匹配,还向制造商表明他也有另一个选择。

1 个答案:

答案 0 :(得分:1)

此问题可以看作是有向图,其中从顶点A到另一个顶点B的边代表卡车从AB(或想要将货物从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
#
```


我在这里只写了一些功能。我仅编写了用于检查何时为制造商创建新条目的函数,反之亦然。您可以添加其他约束,例如日期,时间等。