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!")