Этот репозиторий GitHub состоит из внедрения Python концепции резонанса «сходства» для сопоставления действий в двух моделях процесса. Цель алгоритма состоит в том, чтобы расширить понятие сходства метки и дополнить его глобальным контекстуальным сходством. Оригинальная статья и идея были созданы Nour Assy, Boudewijn F. van Dongen и Wil Mp Van der Aalst в техническом университете Эйндховена. Для справки о теории, пожалуйста, посмотрите на оригинальную статью (ссылку). В качестве альтернативы вы можете проверить слайды презентации, которые автор использовал здесь (PDF Download)
Алгоритм был разработан на Python 3.9. Предоставленный файл Tepss.txt PIP может использоваться для установки всех зависимостей, необходимых для работы программы. Я бы предложил установить это в виртуальной среде. Основными зависимостями являются:
Необязательно: Чтобы получить начальное значение сходства метки для тестирования, использовался пакет SPACY. Эти зависимости довольно велики (700 МБ+) и, следовательно, находятся в отдельном файле (требования_spacy.txt). Если вы планируете использовать этот пакет, установите его тоже. Если вы хотите использовать свое собственное начальное измерение сходства, обязательно сделайте выход SIML в формате словаря, где ключ: Tuple [str, str] -> значение: float.
Обязательно поместите загруженный репозиторий в папку Python Site-Packages. (например,/USR/Local/anaconda3/envs/myenv/lib/python3.9/site-packages/)
Предупреждение: Чтобы вычислить первоначальное сходство метки, я решил использовать Spacy вместе с большой моделью. Это займет некоторое время, чтобы скачать. Установка через файл Telects.txt будет автоматически загружать дополнительный модуль. Если вручную установку зависимости, обязательно получите этот модуль отсюда.
Model1: источник модель (Petri Net)
Модель2: целевая модель (Petri Net)
SIML: Начальные значения сходства метки (словарь | Ключ: Tuple [str, str] -> float)
A: Определяет, насколько ценность сходства должно полагаться на глобальное контекстуальное сходство. 0 совсем не, 1.0 - это все это. a ∈ [0, 1]
К: Определяет расстояние от перехода, которое следует считать соседом. k ∈ N+
L_THRESH: определяет порог соотношения правдоподобия совпадения, который считается аналогичным. l_thresh ∈ [0, 1]
import pm4py
from similarity_resonance . src . label_sim import algorithm as label_sim
from similarity_resonance . src . similarity_resonance import apply as sim_res
from similarity_resonance . src . matching import match_single
petri1 = pm4py . read_petri_net ( 'link/to/petri/net/1' )
petri2 = pm4py . read_petri_net ( 'link/to/petri/net/2' )
siml = label_sim ( petri1 [ 0 ], petri2 [ 0 ])
similarity_values = sim_res ( petri1 , petri2 , siml , a = 0.3 , k = 2 , l_thresh = 0.2 )
top_matches = match_single ( similarity_values )
for key , value in top_matches . items ():
print ( key , value )