279 lines
16 KiB
Python
279 lines
16 KiB
Python
import sys
|
|
import docx
|
|
from docx.shared import Pt, RGBColor
|
|
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
|
|
|
sys.stdout.reconfigure(encoding='utf-8')
|
|
|
|
# Open template
|
|
doc = docx.Document('data/OPS01-templet.docx')
|
|
|
|
# 1. Update Title (P0)
|
|
p0 = doc.paragraphs[0]
|
|
p0.text = ""
|
|
p0.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
|
r0 = p0.add_run("다중 센서 경보 중복 항적 통합 시뮬레이터")
|
|
r0.font.size = Pt(15.0)
|
|
r0.bold = True
|
|
r0.font.color.rgb = RGBColor(0x1A, 0x1A, 0x1A)
|
|
|
|
# 2. Update Difficulty (P1)
|
|
p1 = doc.paragraphs[1]
|
|
p1.text = ""
|
|
p1.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
|
r1_1 = p1.add_run("난 이 도 ")
|
|
r1_1.font.size = Pt(8.0)
|
|
r1_1.font.color.rgb = RGBColor(0x66, 0x66, 0x66)
|
|
r1_2 = p1.add_run("고급")
|
|
r1_2.font.size = Pt(9.0)
|
|
r1_2.bold = True
|
|
r1_2.font.color.rgb = RGBColor(0x1F, 0x38, 0x64)
|
|
|
|
# 3. Update Table 0 (프로젝트 목표)
|
|
t0 = doc.tables[0]
|
|
c0_0 = t0.cell(0, 0)
|
|
c0_0.paragraphs[0].text = ""
|
|
r_t0_label = c0_0.paragraphs[0].add_run("프로젝트 목표")
|
|
r_t0_label.font.size = Pt(9.0)
|
|
r_t0_label.bold = True
|
|
r_t0_label.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF)
|
|
|
|
c0_1 = t0.cell(0, 1)
|
|
c0_1.paragraphs[0].text = ""
|
|
r_t0_desc = c0_1.paragraphs[0].add_run(
|
|
"미국-이란 분쟁 등 복잡한 전술 방공 환경에서 레이더, EO/IR 광학센서, 음향 탐지기 등 이기종 다중 센서로부터 유입되는 중복 경보를 실시간으로 통합·융합(Fusion)하는 시뮬레이터를 구축한다. "
|
|
"시공간 좌표 변환 및 칼만 필터 기반 궤적 통합, 신뢰도 평가 엔진, 전술 상황판(COP) 대시보드, 조작관 HITL(Human-In-The-Loop) 승인 체계를 개발하고, "
|
|
"전자전 스트레스 테스트 및 AAR 사후분석을 거쳐 군 지휘관의 상황인식(Situational Awareness) 역량을 극대화하고 오경보로 인한 혼선을 방지하는 실전형 방공 시뮬레이션 시스템을 완성한다."
|
|
)
|
|
r_t0_desc.font.size = Pt(9.0)
|
|
r_t0_desc.bold = False
|
|
|
|
# 4. Update Table 1 (유의사항)
|
|
t1 = doc.tables[1]
|
|
c1_0 = t1.cell(0, 0)
|
|
c1_0.paragraphs[0].text = ""
|
|
r_t1_label = c1_0.paragraphs[0].add_run("유의사항")
|
|
r_t1_label.font.size = Pt(9.0)
|
|
r_t1_label.bold = True
|
|
|
|
c1_1 = t1.cell(0, 1)
|
|
c1_1.paragraphs[0].text = ""
|
|
r_t1_desc = c1_1.paragraphs[0].add_run(
|
|
"본 과제는 교육 및 연구용 방공 시뮬레이션 프로젝트이며 실제 군사 작전 기밀 체계와 직접 연동되지 않습니다. "
|
|
"실제 부대 및 무기체계의 민감 제원은 사용하지 않고 제공된 가상 합성 데이터셋(미국-이란 전훈 기반 모의 센서 로그 및 항적 데이터)을 활용합니다. "
|
|
"센서 간 상충 정보 발생 시 자동 단정을 지양하고 조작관 HITL 검토 원칙을 준수합니다."
|
|
)
|
|
r_t1_desc.font.size = Pt(8.5)
|
|
r_t1_desc.bold = False
|
|
|
|
# 5. Stage Headings mapping to paragraphs
|
|
# P5: 1단계
|
|
p5 = doc.paragraphs[5]
|
|
p5.text = ""
|
|
r_p5 = p5.add_run("1단계. 요구사항 분석 및 센서 데이터 전처리 구조화")
|
|
r_p5.font.size = Pt(10.0)
|
|
r_p5.bold = True
|
|
r_p5.font.color.rgb = RGBColor(0x1F, 0x38, 0x64)
|
|
|
|
# P8: 2단계
|
|
p8 = doc.paragraphs[8]
|
|
p8.text = ""
|
|
r_p8 = p8.add_run("2단계. 항적 융합 프로토타입 구현 및 칼만 필터 궤적 통합")
|
|
r_p8.font.size = Pt(10.0)
|
|
r_p8.bold = True
|
|
r_p8.font.color.rgb = RGBColor(0x1F, 0x38, 0x64)
|
|
|
|
# P11: 3단계
|
|
p11 = doc.paragraphs[11]
|
|
p11.text = ""
|
|
r_p11 = p11.add_run("3단계. 신뢰도 평가 엔진 개발 및 전술 상황판(COP) 대시보드 구현")
|
|
r_p11.font.size = Pt(10.0)
|
|
r_p11.bold = True
|
|
r_p11.font.color.rgb = RGBColor(0x1F, 0x38, 0x64)
|
|
|
|
# P14: 4단계
|
|
p14 = doc.paragraphs[14]
|
|
p14.text = ""
|
|
r_p14 = p14.add_run("4단계. 조작관 HITL 검토 체계 구축 및 전자전 모의 스트레스 검증")
|
|
r_p14.font.size = Pt(10.0)
|
|
r_p14.bold = True
|
|
r_p14.font.color.rgb = RGBColor(0x1F, 0x38, 0x64)
|
|
|
|
# P17: 5단계
|
|
p17 = doc.paragraphs[17]
|
|
p17.text = ""
|
|
r_p17 = p17.add_run("5단계. AAR 사후오류 분석 및 통합 시뮬레이터 시스템 완성")
|
|
r_p17.font.size = Pt(10.0)
|
|
r_p17.bold = True
|
|
r_p17.font.color.rgb = RGBColor(0x1F, 0x38, 0x64)
|
|
|
|
# 6. Missions Data for Tables 2 to 11
|
|
missions_data = [
|
|
{
|
|
"num": 1,
|
|
"title": "미션 1. 다종 센서 연동 규격 분석 및 스키마 설계",
|
|
"goal": "미국-이란 분쟁 등 전술 방공 환경을 분석하여 레이더, EO/IR 광학센서, 음향 탐지기 등 이기종 센서의 데이터 연동 규격과 중복 항적(Track) 통합 스키마를 설계합니다.",
|
|
"exec": "레이더·광학·음향 센서의 측정 속성(방위각, 고도, 거리, 신호강도, 타임스탬프)과 군사 표준 규격을 분석하고, 중복 항적 데이터를 결합·정의할 수 있는 표준 JSON Schema 및 데이터 명세서를 작성합니다.",
|
|
"output": "`data/schema/ops02_input_schema.json` 및 `docs/ops02_data_spec.md`",
|
|
"eval_type": "[필수] 데이터 스키마 설계 (이기종 센서 연동) ",
|
|
"eval_q": "— 미국-이란 전쟁 등 방공 전장 환경을 분석하여 레이더·광학·음향 센서 연동 규격과 중복 항적 스키마를 체계적으로 설계했는가? (PASS / FAIL)"
|
|
},
|
|
{
|
|
"num": 2,
|
|
"title": "미션 2. 이종 센서 시공간 동기화 및 좌표 변환 전처리 구현",
|
|
"goal": "이기종 센서 간의 시각 동기화(Time-sync) 오차를 보정하고 각 센서의 국소 좌표계를 공통 전술 좌표계(ENU/ECEF)로 변환하는 시공간 전처리 모듈을 구현합니다.",
|
|
"exec": "센서별 샘플링 주기 차이로 발생하는 타임스탬프 불일치를 보간(Interpolation)하고, 센서별 국소 극좌표계를 공통 3차원 직교좌표계(ENU/ECEF)로 변환하며 전장 노이즈를 필터링하는 파이프라인을 구축합니다.",
|
|
"output": "`src/preprocess/ops02_preprocessor.py` 및 전처리 전후 데이터셋",
|
|
"eval_type": "[필수] 시공간 전처리 및 좌표 변환 ",
|
|
"eval_q": "— 이종 센서 간 시각 동기화(Time-sync)와 공통 전술 좌표계(ENU/ECEF) 변환 모듈을 구현하고 검증했는가? (PASS / FAIL)"
|
|
},
|
|
{
|
|
"num": 3,
|
|
"title": "미션 3. 최단거리 매칭 기반 1차 항적 융합(Fusion) 알고리즘 구현",
|
|
"goal": "최단 거리(Euclidean/Mahalanobis) 매칭 기반으로 동일 비행체에서 발생한 다중 센서 경보를 1차 클러스터링하는 항적 융합(Fusion) Baseline 로직을 개발합니다.",
|
|
"exec": "동일 시공간에 인접한 다중 센서 관측치 간의 유클리디안 및 마할라노비스 거리를 산출하여 임계값 내의 경보들을 단일 표적으로 묶는 1차 융합 Baseline 모델을 구현하고 성능을 측정합니다.",
|
|
"output": "`src/models/ops02_baseline_model.py` 및 기본 추론 결과 보고서",
|
|
"eval_type": "[필수] 1차 항적 융합 Baseline 구현 ",
|
|
"eval_q": "— 최단거리 매칭 기반 단일 항적-경보 융합 로직을 구현하여 기본 탐지/처리 정확도 75% 이상을 달성했는가? (PASS / FAIL)"
|
|
},
|
|
{
|
|
"num": 4,
|
|
"title": "미션 4. 칼만 필터 기반 중복 항적 정밀 추적 및 궤적 통합 고도화",
|
|
"goal": "확장 칼만 필터(EKF)를 적용하여 센서별 측정 오차를 보정하고 급격한 기동을 수행하는 비행체의 중복 항적을 단일 궤적으로 정밀 추적·통합하는 알고리즘을 고도화합니다.",
|
|
"exec": "비선형 비행 궤적 추정을 위해 상태 벡터와 공분산 행렬을 갱신하는 칼만 필터 모듈을 설계하고, 다중 센서 측정값을 융합하여 기동 비행체의 위치·속도·가속도를 오차 범위 내에서 정밀 추적·예측합니다.",
|
|
"output": "`src/models/ops02_advanced_detector.py` 및 예외 탐지 테스트 결과",
|
|
"eval_type": "[필수] 칼만 필터 기반 정밀 궤적 추적·통합 ",
|
|
"eval_q": "— 확장 칼만 필터(EKF)를 적용하여 센서 측정 오차를 보정하고 기동 비행체 궤적 통합 재현율 85% 이상을 달성했는가? (PASS / FAIL)"
|
|
},
|
|
{
|
|
"num": 5,
|
|
"title": "미션 5. 센서별 오탐 가중치 반영 및 항적 통합 신뢰도 지수 산출 엔진 개발",
|
|
"goal": "센서별 신뢰도 가중치와 기상 환경 요인을 반영하여 통합된 항적의 진위 여부 및 융합 신뢰도 지수를 계산하는 엔진을 개발합니다.",
|
|
"exec": "센서별 오경보 특성(허위 경보율, 신호 대 잡음비)과 전장 기상 요인을 반영한 다차원 가중치 매트릭스를 정의하고, 통합 항적별 신뢰도 점수(Confidence Score)와 등급(High/Med/Low)을 실시간 산출합니다.",
|
|
"output": "`src/verification/ops02_confidence_engine.py`",
|
|
"eval_type": "[선택] 다차원 신뢰도 지수 산출 엔진 ",
|
|
"eval_q": "— 센서별 오탐 가중치와 환경 요인을 반영한 신뢰도 지수 산출 엔진을 개발하고 오경보율을 40% 이상 감축했는가? (PASS / FAIL)"
|
|
},
|
|
{
|
|
"num": 6,
|
|
"title": "미션 6. 다중 센서 융합 항적 및 원시 경보 비교 전술 상황판(COP) 대시보드 구현",
|
|
"goal": "다중 센서의 원시 경보와 융합된 통합 항적을 실시간으로 비교 시각화하여 지휘관의 센서 중복 인지 부하를 줄이는 전술 상황판 대시보드를 구축합니다.",
|
|
"exec": "센서별 원시 경보 포인트와 칼만 필터 기반 통합 항적 궤적을 2D/3D 레이어로 동시 표출하고, 표적 속도·방위·고도·신뢰도 등급을 실시간(1초 이내 갱신) 제공하는 상황판 UI를 구현합니다.",
|
|
"output": "`src/ui/ops02_dashboard.py` (또는 웹 UI 컴포넌트)",
|
|
"eval_type": "[선택] 전술 상황판(COP) 대시보드 가시화 ",
|
|
"eval_q": "— 원시 경보와 융합 항적을 실시간으로 비교 표출하여 지휘관의 센서 중복 인지 부하를 경감하는 대시보드를 구현했는가? (PASS / FAIL)"
|
|
},
|
|
{
|
|
"num": 7,
|
|
"title": "미션 7. 중복 항적 강제 분리 및 통합 확정을 위한 조작관 HITL 검토/승인 체계 구축",
|
|
"goal": "센서 간 상충 정보 발생 시 조작관이 직접 항적 분리, 강제 통합, 추적 보류를 결정할 수 있는 HITL 검토/승인 체계를 구현합니다.",
|
|
"exec": "신뢰도가 낮거나 센서 간 궤적 불일치가 발생하는 경계선(Borderline) 항적을 조작관 검토 큐(Queue)로 자동 라우팅하고, 인간 조작관의 승인·분리·보류 인터페이스와 전체 감사 로그(Audit Log) 체계를 구축합니다.",
|
|
"output": "`src/hitl/ops02_approval_workflow.py` 및 `docs/ops02_hitl_guide.md`",
|
|
"eval_type": "[필수] 조작관 HITL 검토/승인 체계 ",
|
|
"eval_q": "— 센서 간 상충 정보 발생 시 조작관이 항적 분리/통합을 결정할 수 있는 HITL 워크플로우와 감사 로그 체계를 구축했는가? (PASS / FAIL)"
|
|
},
|
|
{
|
|
"num": 8,
|
|
"title": "미션 8. 다수 센서 통신 단절 및 전자전 재밍 환경 모의 항적 융합 한계치 스트레스 테스트",
|
|
"goal": "일부 레이더 센서 피격 통신 단절 및 전자전 재밍 환경을 가상 시뮬레이션하여 항적 융합 엔진의 결함 허용(Fault-tolerant) 복원력을 테스트합니다.",
|
|
"exec": "동시 표적 100기 이상 급증, 패킷 손실, 센서 단절 및 GPS/레이더 전자전 재밍 환경을 모의 주입하여 융합 알고리즘의 처리 지연(Latency)과 데이터 유실률을 측정하고 안전 실패(Fail-safe) 로직을 검증합니다.",
|
|
"output": "`tests/ops02_stress_test.py` 및 스트레스 테스트 분석 보고서",
|
|
"eval_type": "[선택] 전장 전자전 모의 스트레스 검증 ",
|
|
"eval_q": "— 통신 단절 및 전자전 재밍 등 극한 상황 시뮬레이션을 통해 시스템 다운 없는 결함 허용(Fail-safe) 복원력을 입증했는가? (PASS / FAIL)"
|
|
},
|
|
{
|
|
"num": 9,
|
|
"title": "미션 9. AAR 일지 기반 항적 왜곡/분할(Track Split) 오류 분석 및 융합 임계값 최적화",
|
|
"goal": "AAR 일지를 분석하여 항적이 둘로 쪼개지는 트랙 분할(Track Split) 및 거짓 항적 오류 사례를 식별하고 융합 임계 파라미터를 재보정합니다.",
|
|
"exec": "모의 훈련 및 시뮬레이션 AAR(사후검토) 기록을 분석하여 항적 분할·미탐·오탐 발생 원인을 추적하고, 거리 매칭 임계값 및 칼만 필터 가중치 파라미터를 재튜닝한 후 자동 회귀 테스트를 수행합니다.",
|
|
"output": "`docs/ops02_aar_report.md` 및 `configs/ops02_tuned_params.yaml`",
|
|
"eval_type": "[필수] AAR 기반 오류 사후분석 및 파라미터 최적화 ",
|
|
"eval_q": "— AAR 일지 분석을 통해 항적 왜곡/분할 오류를 규명하고 융합 파라미터 재조정으로 종합 정확도를 10%p 이상 향상시켰는가? (PASS / FAIL)"
|
|
},
|
|
{
|
|
"num": 10,
|
|
"title": "미션 10. 다중 센서 중복 항적 통합 시뮬레이터 최종 빌드 및 통합 방공망 브리핑 패키지 완성",
|
|
"goal": "다중 센서 중복 항적 통합 시뮬레이터 전체 모듈을 통합 검증하고 합동 방공 작전 운용을 위한 브리핑 패키지와 배포 가이드를 완성합니다.",
|
|
"exec": "전처리, 칼만 필터 융합, 신뢰도 엔진, 대시보드 UI, HITL 워크플로우, AAR 피드백까지 End-to-End 전체 시스템을 통합 빌드하고, 야전 방공부대 배포 가이드와 지휘관 보고용 최종 브리핑 패키지를 완성합니다.",
|
|
"output": "`src/main_ops02.py`, `README.md`, `docs/ops02_final_report.pdf(md)`",
|
|
"eval_type": "[필수] End-to-End 파이프라인 통합 및 브리핑 패키지 ",
|
|
"eval_q": "— 다중 센서 중복 항적 통합 시뮬레이터 전체 모듈을 통합 빌드하고 실무 지휘관 브리핑 패키지를 완성했는가? (PASS / FAIL)"
|
|
}
|
|
]
|
|
|
|
# Update Tables 2 to 11
|
|
for idx, m in enumerate(missions_data):
|
|
t_idx = idx + 2
|
|
table = doc.tables[t_idx]
|
|
|
|
# Row 0: Title
|
|
for col_i in range(2):
|
|
cell_0 = table.cell(0, col_i)
|
|
cell_0.paragraphs[0].text = ""
|
|
r_title = cell_0.paragraphs[0].add_run(m["title"])
|
|
r_title.font.size = Pt(9.5)
|
|
r_title.bold = True
|
|
r_title.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF)
|
|
|
|
# Row 1: 목표
|
|
cell_1_0 = table.cell(1, 0)
|
|
cell_1_0.paragraphs[0].text = ""
|
|
r_g_lbl = cell_1_0.paragraphs[0].add_run("목표")
|
|
r_g_lbl.font.size = Pt(9.0)
|
|
r_g_lbl.bold = True
|
|
|
|
cell_1_1 = table.cell(1, 1)
|
|
cell_1_1.paragraphs[0].text = ""
|
|
r_g_val = cell_1_1.paragraphs[0].add_run(m["goal"])
|
|
r_g_val.font.size = Pt(9.0)
|
|
r_g_val.bold = False
|
|
|
|
# Row 2: 수행
|
|
cell_2_0 = table.cell(2, 0)
|
|
cell_2_0.paragraphs[0].text = ""
|
|
r_e_lbl = cell_2_0.paragraphs[0].add_run("수행")
|
|
r_e_lbl.font.size = Pt(9.0)
|
|
r_e_lbl.bold = True
|
|
|
|
cell_2_1 = table.cell(2, 1)
|
|
cell_2_1.paragraphs[0].text = ""
|
|
r_e_val = cell_2_1.paragraphs[0].add_run(m["exec"])
|
|
r_e_val.font.size = Pt(9.0)
|
|
r_e_val.bold = False
|
|
|
|
# Row 3: 산출물
|
|
cell_3_0 = table.cell(3, 0)
|
|
cell_3_0.paragraphs[0].text = ""
|
|
r_o_lbl = cell_3_0.paragraphs[0].add_run("산출물")
|
|
r_o_lbl.font.size = Pt(9.0)
|
|
r_o_lbl.bold = True
|
|
|
|
cell_3_1 = table.cell(3, 1)
|
|
cell_3_1.paragraphs[0].text = ""
|
|
r_o_val = cell_3_1.paragraphs[0].add_run(m["output"])
|
|
r_o_val.font.size = Pt(9.0)
|
|
r_o_val.bold = False
|
|
|
|
# Row 4: 평가
|
|
cell_4_0 = table.cell(4, 0)
|
|
cell_4_0.paragraphs[0].text = ""
|
|
r_ev_lbl = cell_4_0.paragraphs[0].add_run("평가")
|
|
r_ev_lbl.font.size = Pt(9.0)
|
|
r_ev_lbl.bold = True
|
|
|
|
cell_4_1 = table.cell(4, 1)
|
|
cell_4_1.paragraphs[0].text = ""
|
|
r_ev_type = cell_4_1.paragraphs[0].add_run(m["eval_type"])
|
|
r_ev_type.font.size = Pt(8.5)
|
|
r_ev_type.bold = True
|
|
|
|
r_ev_q = cell_4_1.paragraphs[0].add_run(m["eval_q"])
|
|
r_ev_q.font.size = Pt(8.5)
|
|
r_ev_q.bold = False
|
|
|
|
# Save Document
|
|
doc.save('data/OPS02.docx')
|
|
doc.save('OPS02.docx')
|
|
|
|
print("Successfully created data/OPS02.docx and OPS02.docx!")
|