La recherche a été soutenue par ECSEL JU dans le cadre du projet H2020 826060 AI4DI - Artificial Intelligence for Digitizing Industry. AI4DI est financé par le ministère fédéral autrichien des transports, de l'innovation et de la technologie (BMVIT) dans le cadre du programme « TIC du futur » entre mai 2019 et avril 2022. De plus amples informations peuvent être obtenues sur https://iktderzukunft.at/en/.
Outil de diagnostic de modèle ASP basé sur le solveur de théorème CLINGO 5.4.1.
"diagnostiquer" est un fichier exécutable qui inclut toutes les bibliothèques nécessaires comme CLINGO 5.4.1. Ce fichier n'est exécutable que sur MAC OS. "diagnose_win.exe" est le fichier exécutable pour les systèmes Windows comprenant toutes les bibliothèques permettant d'exécuter CLINGO 5.4.1.
Pour appeler et utiliser les scripts Python (python 3.6.15), une installation clino (version 5.4.1) est nécessaire, ce qui peut être effectué en créant un environnement Conda basé sur le fichier prédéfini fourni dans le répertoire d'environnement :
cd environment
conda env create -f environment.yml
conda activate diagnose
Si une importation python de l'outil est nécessaire, on peut utiliser la classe diagnostique.py pour importer dans le script python associé. Le dictionnaire des arguments "paramètres" pour cette classe peut être vu dans main_diagnose.py (voir les arguments facultatifs)
| Argument | Argument | Description |
| ------ | ------ | ------ |
| --help | -h | show this help message and exit |
| --index | -i | index to identify actual call (E.g.: time, call counter, etc.) |
| --file | -f | load ASP model file |
| --path | -p | load ASP model directory path |
| --faultsize | -fault | size of faults to search |
| --hidediagoutput | -hidediag | hide diagnose output in terminal (no argument needed) |
| --output | -out | define output file name and path for CSV (overview result) and JSON (detailed results) / default path: actual directory and file name with date and time |
| --json | -j | JSON output file is written (no argument needed) |
| --csv | -c | CSV output file is written (no argument needed) |
| --answersets | -a | number of answer sets (0: all, 1: compute one answer set, 2: two answer sets, ... |
| --observation | -obs | add additional observation file to ground with ASP file (e.g.: example.pl) |
| --adapt | -adapt | adapt data (comment out all constraints ':- not no_ab(X)' |
| --strongfaults | -strongfaults | use argument to activate search for strong fault 'only' or 'without' constraints, if argument is not used strong faults constraints are not implemented. choices=["only", "without"] |
application/diagnose --index "0" --path data/asp_test_data --faultsize 3 --answersets 0 --output application/filename --json --csv --hidediagoutput --strongfaults "only"
python app/main_diagnose.py --index "*" --path data/asp_test_data --faultsize 3 --answersets 0 --output application/filename --json --csv --strongfaults "without"
python app/main_diagnose.py --index "1" --file testfile.pl --faultsize 3 --answersets 0 --output application/filename --json --csv
Une fois le calcul terminé, les données peuvent être stockées dans un fichier CSV (--csv) et JSON (--json) en fonction du nom et du chemin du fichier de sortie (--output) donnés. Si l'outil est appelé dans une boucle avec le même nom de fichier de sortie, ses fichiers sont développés avec les nouvelles données. Ceci est utile si, par exemple, le diagnostic est effectué sur un système dépendant du temps et pour chaque pas de temps, un diagnostic est exécuté. Pour suivre l'appel, utilisez l'option index (--index). Cela permet par exemple d'ajouter le pas de temps corrélé pour identifier les données. (ex : temps : 0,01 -> index=0,01, temps : 0,02 -> index=0,02, ...)
L'en-tête du fichier de données CSV : "Index, Model,Time 0,Time 1,Time 2,Time 3,NoD 0,NoD 1,NoD 2,NoD 3,ASPDiagTime"
Par exemple :
Index,Model,Time 0,Time 1,NoD 0,NoD 1,ASPDiagTime
0,test_heater_circuit.pl,0.007652997970581055,0.009721755981445312,0,1,0.017589092254638672
1,test_heater_circuit.pl,0.007380962371826172,0.010998964309692383,0,0,0.018507003784179688
2,test_heater_circuit.pl,0.007673025131225586,0.0077838897705078125,0,0,0.015599727630615234
Le fichier JSON est stocké avec le nom du fichier et les données associées avec des résultats de diagnostic détaillés.
Par exemple :
[
{
"0": {
"test_heater_circuit.pl": [
{
"diag time": 0.007652997970581055,
"fault size": 0,
"diag found": 0,
"diag": [],
"observation": [
"val(int(tm),between(t_low, null),0)."
]
},
{
"diag time": 0.009721755981445312,
"fault size": 1,
"diag found": 1,
"diag": [
[
"ab(sw)"
]
],
"observation": [
"val(int(tm),between(t_low, null),0)."
]
}
]
}
},
{
"1": {
"test_heater_circuit.pl": [
{
"diag time": 0.007380962371826172,
"fault size": 0,
"diag found": 0,
"diag": [],
"observation": [
"val(int(tm),between(t_low, null),0).",
"val(int(tm),between(t_low, null),1)."
]
},
{
"diag time": 0.010998964309692383,
"fault size": 1,
"diag found": 0,
"diag": [],
"observation": [
"val(int(tm),between(t_low, null),0).",
"val(int(tm),between(t_low, null),1)."
]
}
]
}
},
{
"2": {
"test_heater_circuit.pl": [
{
"diag time": 0.007673025131225586,
"fault size": 0,
"diag found": 0,
"diag": [],
"observation": [
"val(int(tm),between(t_low, null),0).",
"val(int(tm),between(t_low, null),1).",
"val(int(tm),between(t_low, null),2)."
]
},
{
"diag time": 0.0077838897705078125,
"fault size": 1,
"diag found": 0,
"diag": [],
"observation": [
"val(int(tm),between(t_low, null),0).",
"val(int(tm),between(t_low, null),1).",
"val(int(tm),between(t_low, null),2)."
]
}
]
}
}
]
Utilisez l'environnement conda pour créer le fichier exécutable pour le système d'exploitation associé avec la commande suivante.
pyinstaller --onefile app/main_diagnose.py --name diagnose --distpath application/ --specpath application/ --hidden-import cffi