이 연구는 H2020 826060 AI4DI 프로젝트(디지털화 산업을 위한 인공 지능)에 따라 ECSEL JU의 지원을 받았습니다. AI4DI는 2019년 5월부터 2022년 4월까지 "미래의 ICT" 프로그램에 따라 오스트리아 연방 교통혁신기술부(BMVIT)의 자금을 지원받습니다. 자세한 내용은 https://iktderzukunft.at/en/에서 검색할 수 있습니다.
정리 솔버 CLINGO 5.4.1을 기반으로 한 ASP 모델 진단 도구입니다.
"diagnose"는 CLINGO 5.4.1과 같이 필요한 모든 라이브러리를 포함하는 실행 파일입니다. 이 파일은 MAC OS에서만 실행 가능합니다. "diagnose_win.exe"는 CLINGO 5.4.1을 실행하기 위한 모든 라이브러리를 포함하는 Windows 시스템용 실행 파일입니다.
Python(python 3.6.15) 스크립트를 호출하고 사용하려면 clingo(버전 5.4.1) 설치가 필요하며, 이는 환경 디렉터리에 미리 정의된 제공된 파일을 기반으로 Conda 환경을 생성하여 수행할 수 있습니다.
cd environment
conda env create -f environment.yml
conda activate diagnose
도구의 Python 가져오기가 필요한 경우, Diagnostic.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(--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 환경을 이용하여 다음 명령어로 해당 OS에 대한 실행 파일을 빌드합니다.
pyinstaller --onefile app/main_diagnose.py --name diagnose --distpath application/ --specpath application/ --hidden-import cffi