Ce référentiel GitHub se compose d'une implémentation Python du concept de «résonance de similitude» pour les activités de correspondance dans deux modèles de processus. L'objectif de l'algorithme est d'étendre la notion de similitudes d'étiquette et de le compléter avec une similitude contextuelle mondiale. L'article et l'idée originaux ont été rédigés par Nour Assy, Boudewijn F. Van Dongen et Wil MP van der Aalst à l'Université technique d'Eindhoven. Pour référence à la théorie, veuillez jeter un œil à l'article d'origine (lien). Alternativement, vous pouvez consulter les diapositives de présentation que l'auteur a utilisées ici (téléchargement PDF)
L'algorithme a été développé sur Python 3.9. Le fichier PIP requirements.txt fourni peut être utilisé pour installer toutes les dépendances requises pour que le programme fonctionne. Je suggère d'installer cela dans un environnement virtuel. Les principales dépendances sont:
Facultatif: Pour obtenir une valeur de similitude d'étiquette initiale pour les tests, le package Spacy a été utilisé. Ces dépendances sont assez importantes (700 Mo +) et sont donc dans un fichier séparé (exigence_spacy.txt). Si vous prévoyez d'utiliser ce package, installez-le également. Si vous cherchez à utiliser votre propre mesure de similitude initiale, assurez-vous de faire la sortie SIML au format d'un dictionnaire où la clé: Tuple [Str, Str] -> Valeur: Float.
Assurez-vous de placer le référentiel téléchargé dans le dossier Python Python de l'environnement. (par exemple. /usr/local/anaconda3/envs/myenv/lib/python3.9/site-packages/)
AVERTISSEMENT: Pour calculer la similitude initiale de l'étiquette, j'ai choisi d'utiliser Spacy avec le grand modèle. Cela prendra un certain temps à télécharger. L'installation via le fichier exigence.txt téléchargera automatiquement le module supplémentaire. Si vous installez manuellement les dépendances, assurez-vous également d'obtenir ce module à partir d'ici.
Modèle 1: Modèle source (Petri Net)
Modèle2: Modèle cible (Petri Net)
Siml: valeurs de similitude initiale de l'étiquette (Dictionnaire | Clé: Tuple [Str, Str] -> Float)
R: Définit la valeur de la valeur de similitude devrait s'appuyer sur la similitude contextuelle globale. 0 n'est pas du tout, 1.0 est tout. a ∈ [0, 1]
K: Définit la distance de la transition qui devrait être considérée comme un voisin. k ∈ N +
L_Thresh: définit le seuil de rapport de vraisemblance correspondant à être considéré comme similaire. 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 )