La investigación fue apoyada por ECSEL JU en el marco del proyecto H2020 826060 AI4DI - Inteligencia artificial para la digitalización de la industria. AI4DI está financiado por el Ministerio Federal de Transporte, Innovación y Tecnología de Austria (BMVIT) en el marco del programa "TIC del futuro" entre mayo de 2019 y abril de 2022. Puede obtenerse más información en https://iktderzukunft.at/en/.
Herramienta de diagnóstico de modelos ASP basada en el solucionador de teoremas CLINGO 5.4.1.
"diagnose" es un archivo ejecutable que incluye todas las bibliotecas necesarias como CLINGO 5.4.1. Este archivo sólo es ejecutable en MAC OS. "diagnose_win.exe" es el archivo ejecutable para sistemas Windows que incluye todas las bibliotecas para ejecutar CLINGO 5.4.1.
Para llamar y utilizar los scripts de Python (python 3.6.15), es necesaria una instalación de clingo (versión 5.4.1), que se puede realizar creando un entorno Conda basado en el archivo proporcionado predefinido en el directorio de entorno:
cd environment
conda env create -f environment.yml
conda activate diagnose
Si es necesaria una importación de Python de la herramienta, se puede usar la clase diagnostic.py para importar al script de Python relacionado. El diccionario de argumentos "configuración" para esta clase se puede ver en main_diagnose.py (ver argumentos opcionales)
| 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
Una vez finalizado el cálculo, los datos se pueden almacenar en un archivo CSV (--csv) y JSON (--json) según la ruta y el nombre de archivo de salida (--output) proporcionados. Si se llama a la herramienta en un bucle con el mismo nombre de archivo de salida, entonces los archivos se expandieron con los nuevos datos. Esto es útil si, por ejemplo, el diagnóstico se realiza en un sistema dependiente del tiempo y para cada paso de tiempo se ejecuta un diagnóstico. Para rastrear la llamada, use la opción de índice (--index). Esto permite, por ejemplo, agregar el paso de tiempo correlacionado para identificar los datos. (por ejemplo: tiempo: 0,01 -> índice=0,01, tiempo: 0,02 -> índice=0,02, ...)
El encabezado del archivo de datos CSV: "Índice, Modelo, Hora 0, Hora 1, Hora 2, Hora 3, NoD 0, NoD 1, NoD 2, NoD 3, ASPDiagTime"
P.ej:
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
El archivo JSON se almacena con el nombre del archivo y los datos relacionados con resultados de diagnóstico detallados.
P.ej:
[
{
"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)."
]
}
]
}
}
]
Utilice el entorno conda para crear el archivo ejecutable para el sistema operativo relacionado con el siguiente comando.
pyinstaller --onefile app/main_diagnose.py --name diagnose --distpath application/ --specpath application/ --hidden-import cffi