
solver/ folder.Create files freely inside the solver/ folder. Just export a solve function from solver/__init__.py.
FOV size is determined by the camera field of view — all FOVs are the same size. The key is deciding where and how many same-sized FOVs to place.
checker.py will log which constraints were violated.
If a constraint (cover_all_components or fov_inspection_order) is violated, the Checker automatically runs the penalty_solver.
Your existing valid FOVs are kept intact, and additional FOVs are placed only for the uncovered (violating) components to recalculate CT.
output_fov.csv, or those violating inspection order, are identified.
Properly covered components and their FOVs are retained as-is.
Existing FOVs kept + extra FOVs for uncovered
cover_all_components() = True and fov_inspection_order() = True.
After running 3_view.py --solver <name>, a result.html file is generated in each <dataset>/<solver>/ folder. Open it in a browser to interactively inspect the PCB layout and timing.
* next to CT indicates penalty was applied. Check error.log for violation details.
python 3_view.py --solver greedy --open to generate and open result.html. Click a FOV to highlight its components and timing. Drag to zoom in, double-click to reset zoom. Use Step filters (Step=0/Step=1) to view by height level.
3_view.py --solver <name> to generate result.html in each <dataset>/<solver>/ folder. Open it in any browser to access the interactive PCB inspection viewer.After 2_run.py has been run for a solver, use 3_view.py to render result pages. Each solver's output is in its own subfolder (e.g., simulation_data/S00_sparse_fast_001/greedy/result.html).
| Color | Element | Meaning |
|---|---|---|
| Green | Component | Fiducial mark (type=2) |
| Purple | Component | Barcode (type=1) — or error component (filled red with X mark) |
| Gray | Component | Normal component (type=0) |
| Blue | Component | Side component |
| Orange | FOV | Currently selected / highlighted FOV |
| Red border | FOV | Error FOV — contains components that violate coverage constraints |
| × Red + X | Component | Error component — extends outside its assigned FOV boundary or is unassigned |
The right panel displays a pipeline timing diagram showing how inspection tasks are distributed across CPU cores:
solver/ folder.Each dataset has a fixed max_core (random 4–16). The Checker uses it directly — no core sweep. Cycle Time is the inspection time; Computation Time is the solver's execution time. For the full formula, examples, and detailed explanation, see Problem Description §2 “Contest Format & Scoring”.
output_fov.csv using their own algorithm. Directly or indirectly calling functions from ky_solver/ to produce results is grounds for disqualification.solver/ folder| File / Folder | Purpose |
|---|---|
ky_solver/ | Koh Young baseline solver (compiled binary, source not provided) |
solver/ | Participant code folder — write your code here freely |
utils/checker.py | Constraint verification + automatic CT calculation |
utils/generator.py | Simulation data generator (unlimited training data) |
1_generate_data.py | Simulation data generator |
2_run.py | Run solver & score (per solver) |
3_view.py | Render result.html viewer (per solver) |
simulation_data/ | 96 datasets (8 scenarios × 12) |
| Term | Description |
|---|---|
| AOI | Automated Optical Inspection — equipment that automatically inspects electronic components on PCBs using cameras |
| PCB | Printed Circuit Board — the board on which electronic components are mounted |
| FOV | Field of View — the rectangular area captured in a single camera shot |
| CT | Cycle Time — total inspection time for one PCB (seconds) |
| Computation Time | Solver computation time (seconds) |
| Core | Parallel processing unit in the inspection pipeline. C0=Capture/Move, C1~C2=3D Reconstruction, C3+=Inspection |
| Pipeline | Parallel structure where Capture → 3D Reconstruction → Inspection run concurrently across multiple Cores |
| Fiducial | Reference point defining the PCB coordinate origin (type=2). Must be placed exclusively in the first FOV |
| Barcode | PCB model identifier (type=1). Inspected right after Fiducial |
| Side Camera | Camera capturing solder fillet from an angled view. Side FOV = 1/2 of Top FOV size |
| Step | Height regions on PCB (step=0, 1). Transitioning between steps adds +5s penalty |
| Penalty Solver | Greedy correction auto-applied on constraint violations. Significantly increases CT |

solver/ 폴더에 코드를 작성하면 됩니다.solver/ 폴더 안에 자유롭게 파일을 만드세요. solver/__init__.py에서 solve 함수를 export하면 됩니다.
FOV 크기는 카메라 시야각으로 결정되므로 모든 FOV는 동일한 크기입니다. 핵심은 같은 크기의 FOV를 어디에, 몇 개 배치하느냐입니다.
checker.py가 어떤 제약을 위반했는지 로그로 알려줍니다.
제약 조건(cover_all_components 또는 fov_inspection_order)을 위반하면 Checker가 penalty_solver를 자동 실행합니다.
참가자의 solver 출력 중 정상적인 FOV는 유지하고, 제약을 위반한(커버되지 않은) 부품에 대해서만 추가 FOV를 배치하여 CT를 재계산합니다.
output_fov.csv에서 커버되지 않은 부품 또는 검사 순서를 위반한 부품을 식별합니다.
정상적으로 커버된 부품과 FOV는 그대로 유지됩니다.
기존 FOV 유지 + 미커버 부품용 FOV 추가
cover_all_components() = True와 fov_inspection_order() = True를 항상 확인하세요.
3_view.py --solver <name> 실행 후 각 <dataset>/<solver>/ 폴더에 result.html이 생성됩니다. 브라우저에서 열면 PCB 배치와 Timing을 인터랙티브하게 확인할 수 있습니다.
* 표시가 penalty가 적용된 데이터임을 나타냅니다. error.log에서 위반 내용을 확인할 수 있습니다.
python 3_view.py --solver greedy --open으로 result.html을 생성하고 열 수 있습니다. FOV 클릭 시 해당 부품과 Timing이 하이라이트됩니다. 드래그로 확대, 더블클릭으로 원래 크기로 돌아갑니다. Step 필터(Step=0/Step=1)로 단차별 보기도 가능합니다.
3_view.py --solver <name>을 실행하면 각 <dataset>/<solver>/ 폴더에 result.html이 생성됩니다. 브라우저에서 열면 PCB 배치와 Timing을 인터랙티브하게 확인할 수 있습니다.| 동작 | PCB 패널 | Timing 패널 |
|---|---|---|
| 클릭 | FOV 선택 → 주황색 하이라이트 해당 FOV의 부품이 강조 표시 |
해당 FOV의 Capture/Recon/Inspect 구간 하이라이트 |
| 드래그 | 영역 선택 → 확대 (Zoom In) 세밀한 부품/FOV 배치 확인 가능 |
— |
| 더블클릭 | 전체 보기로 복원 (Zoom Reset) | — |
| 빈 영역 클릭 | FOV 선택 해제 | 타이밍 하이라이트 해제 |
solver/ 폴더에 코드를 작성하면 됩니다.각 데이터셋에 max_core가 고정 입력(랜덤 4~16)으로 주어지며, Checker가 그대로 사용합니다 (Core 수 탐색 없음). Cycle Time은 검사 시간, Computation Time은 solver 계산 시간입니다. 수식, 예시, 상세 설명은 문제설명 §2 “대회 형식 및 채점”을 참조하세요.
output_fov.csv를 생성해야 하며, ky_solver/의 함수를 직접·간접적으로 호출하여 결과를 얻는 것은 실격 사유에 해당합니다.solver/ 폴더| 파일/폴더 | 역할 |
|---|---|
ky_solver/ | Koh Young 베이스라인 솔버 (컴파일 바이너리, 소스 비공개) |
solver/ | 참가자 코드 폴더 — 여기에 자유롭게 작성 |
utils/checker.py | 제약 조건 검증 + CT 자동 계산 |
utils/generator.py | 시뮬레이션 데이터 생성기 (학습 데이터 무한 생성) |
1_generate_data.py | 시뮬레이션 데이터 생성기 |
2_run.py | Solver 실행 & 채점 (solver별 분리) |
3_view.py | result.html 뷰어 생성 (solver별) |
simulation_data/ | 96개 데이터셋 (8 시나리오 × 12) |
| 용어 | 설명 |
|---|---|
| AOI | Automated Optical Inspection — PCB 위 전자 부품을 카메라로 자동 검사하는 장비 |
| PCB | Printed Circuit Board — 전자 부품이 실장되는 인쇄 회로 기판 |
| FOV | Field of View — 카메라가 한 번에 촬영하는 직사각형 영역 |
| CT | Cycle Time — PCB 1장의 전체 검사에 소요되는 시간 (초) |
| Computation Time | Solver 계산 시간 (초) |
| Core | 검사 파이프라인의 병렬 처리 단위. C0=촬상/이동, C1~C2=3D 복원, C3+=검사 |
| Pipeline | 촬상 → 3D 복원 → 검사를 여러 Core가 동시에 수행하는 병렬 구조 |
| Fiducial | PCB 좌표계 원점을 정의하는 기준점 (type=2). 반드시 첫 번째 FOV에 단독 배치 |
| Barcode | PCB 모델 구분자 (type=1). Fiducial 다음으로 검사 |
| Side 카메라 | 부품 측면 납땜을 비스듬히 촬영하는 카메라. Side FOV = Top FOV의 1/2 크기 |
| Step (단차) | PCB 위 높이가 다른 영역 (step=0, 1). 단차 전환 시 +5초 페널티 |
| Penalty Solver | 제약 위반 시 자동 실행되는 greedy 보정. CT가 크게 증가함 |