Алгоритм размещения с использованием Python - PullRequest
2 голосов
/ 24 марта 2019

Я пытаюсь создать модель, в которой производители могут размещать груз, который должен быть отправлен, а перевозчик может сообщать, что его грузовик едет из пункта А в пункт Б. и грузоподъемность) соответствует, то оба они уведомляются как матч трут.

Я пытался исследовать автоматическое сопоставление, но ближе всего я подхожу к венгерскому алгоритму, который решает проблему назначения, но я не уверен, правильное ли это направление или нет.

В модели я уже создал формы ввода для обоих разделов, то есть производителей и перевозчиков, и данные сохраняются в базе данных. Я думаю о применении функции триггера, которая перепроверяет для лучшего соответствия каждый раз, когда новая запись поступает в базу данных

Вот данные из обеих форм ввода:

Производитель

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

Transporter

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

Мы видим, что Transporter 4595 - лучший выбор для производителя 1025, а Transporter 6569 - второй лучший. Я хочу сопоставить их обоих, а также показать производителю, что у него тоже есть другой вариант.

1 Ответ

1 голос
/ 24 марта 2019

Эту проблему можно рассматривать как ориентированный граф, где ребро от вершины A до другой вершины B представляет грузовик, идущий от A до B (или производитель, желающий перевезти груз от A до B), а вес кромки можно использовать для представления величины нагрузки (или грузоподъемности).

Вы можете использовать матрицу смежности для каждого производителя и перевозчика. Каждый раз, когда новая запись заполняется в любой из матриц (скажем, в матрице производителя), соответствующая запись проверяется, проверяется в другой матрице (матрице транспортера), и нагрузки также сравниваются, чтобы увидеть, есть ли совпадение.

```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
#
```


Я написал здесь только некоторые функции. Я написал только функцию, которая проверяет, когда создается новая запись для производителя, но не наоборот. Вы можете добавить дополнительные ограничения, такие как дата, время и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...