該研究得到了 ECSEL JU 項目 H2020 826060 AI4DI - 數位化產業的人工智慧的支持。 AI4DI 由奧地利聯邦運輸、創新和技術部 (BMVIT) 在「未來 ICT」計畫下於 2019 年 5 月至 2022 年 4 月期間資助。
基於定理求解器 CLINGO 5.4.1 的 ASP 模型診斷工具。
「diagnose」是一個可執行文件,其中包括 CLINGO 5.4.1 所需的所有函式庫。該檔案只能在 MAC 作業系統上執行。 「diagnose_win.exe」是 Windows 系統的可執行文件,包括執行 CLINGO 5.4.1 的所有函式庫。
要呼叫和使用Python(python 3.6.15)腳本,需要安裝clingo(版本5.4.1),這可以透過基於環境目錄中預先定義提供的檔案來建立Conda環境來完成:
cd environment
conda env create -f environment.yml
conda activate diagnose
如果需要使用 python 匯入該工具,可以使用diagnose.py 類別匯入相關的 python 腳本。此類別的參數「設定」字典可以在 main_diagnose.py 中看到(請參閱可選參數)
| 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
計算完成後,可以根據給定的輸出(--output)檔案名稱和路徑將資料儲存在 CSV(--csv)和 JSON(--json)檔案中。如果在循環中使用相同的輸出檔案名稱來呼叫該工具,那麼它的檔案將使用新資料進行擴充。例如,如果在依賴時間的系統上執行診斷並且對於每個時間步驟執行診斷,則這非常有用。若要追蹤呼叫,請使用索引 (--index) 選項。例如,這允許添加相關的時間步長來識別資料。 (例如:時間:0.01 -> 索引=0.01,時間:0.02 -> 索引=0.02,...)
CSV 資料檔案的標題:“索引、型號、時間 0、時間 1、時間 2、時間 3、NoD 0、NoD 1、NoD 2、NoD 3、ASPDiagTime”
例如:
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
JSON 檔案儲存檔案名稱和相關資料以及詳細的診斷結果。
例如:
[
{
"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)."
]
}
]
}
}
]
使用 conda 環境透過以下命令建立相關作業系統的可執行檔。
pyinstaller --onefile app/main_diagnose.py --name diagnose --distpath application/ --specpath application/ --hidden-import cffi