IOAI 2025 — Practice (At-Home Round)

Bộ đề bài

# Bài tập Điểm Thời gian: Giới hạn bộ nhớ
1 IOAI 2025 — Chameleon 100 (p) 1.0s 256M
2 IOAI 2025 — Dự báo thời tiết qua ảnh vệ tinh 100 (p) 1.0s 256M
3 IOAI 2025 — Radar (Vòng At-Home / Practice) 100 (p) 1.0s 256M

1. IOAI 2025 — Chameleon

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Mô tả


Ví dụ gợi ý: chuỗi biểu tượng này gợi ý từ bí mật "fire station" (trạm cứu hỏa).


Cùng các biểu tượng nhưng đảo thứ tự lại gợi ý "firefighter" (lính cứu hỏa) -- thứ tự là có nghĩa.

Chameleon là trò chơi đoán từ trong đó người chơi truyền đạt ý tưởng qua các biểu tượng (icon). Có hai vai trò:

  • Người ra gợi ý (Clue-Giver) chọn một từ bí mật (một từ hoặc cụm từ), rồi tạo gợi ý bằng một chuỗi biểu tượng có thứ tự từ kho biểu tượng dùng chung; không được nói hoặc viết.
  • Người đoán (Guesser) nhìn chuỗi biểu tượng và một danh sách 100 phương án (đảm bảo chứa từ bí mật), rồi xuất ra danh sách xếp hạng tối đa 10 dự đoán.

Thứ tự biểu tượng là có nghĩa: biểu tượng đầu tiên thường biểu diễn ý chính của từ bí mật, các biểu tượng sau cung cấp ngữ cảnh bổ sung. Cùng một biểu tượng có thể mang ý nghĩa khác tùy ngữ cảnh — ví dụ biểu tượng "trái tim" có thể gợi tới ống nghe (dụng cụ bác sĩ nghe tim) hoặc thây ma (nhân vật vừa chết vừa sống).

Nhiệm vụ của bạn là xây dựng chương trình AI đóng vai Người đoán: cho gợi ý và 100 phương án, xuất ra danh sách xếp hạng tối đa 10 dự đoán. Điểm cao hơn nếu từ bí mật ở vị trí càng đầu danh sách.

Ràng buộc về mô hình

Theo quy định gốc của IOAI 2025:

  • Lời giải phải sử dụng mô hình có dưới 1 tỷ tham số (xấp xỉ 4 GB bộ nhớ).
  • Không được gọi bất kỳ API mô hình bên ngoài nào tại thời điểm suy luận (inference time).
  • Trong giai đoạn phát triển và huấn luyện, bạn được phép sử dụng các mô hình tiền huấn luyện (pre-trained), nhưng lời giải nộp lên phải độc lập (self-contained).

Trên LQDOJ, hệ thống chấm không kiểm tra kích thước mô hình — đây là quy định kiểu honour-system, mong các bạn tự giác tuân thủ tinh thần của bài.

Dữ liệu

Các tệp dữ liệu đính kèm:

  • hint_icons.zip — chứa 118 biểu tượng dạng JPEG (<id>.jpg) cùng tệp descriptions.json ánh xạ mỗi id sang phần mô tả văn bản của biểu tượng.
  • takehome_validation.json20 ví dụ kèm nhãn để bạn làm quen với định dạng.
  • validation_set.json79 truy vấn validation, có nhãn, dùng để đánh giá lời giải tại chỗ.
  • test_set.json79 truy vấn test, KHÔNG có nhãn. Đây là tập bạn cần trả lời.

Mỗi mục trong các tệp validation/test có hai trường:

  • hints: danh sách số nguyên — id các biểu tượng theo đúng thứ tự Người ra gợi ý chỉ ra.
  • options: danh sách 100 chuỗi là các từ/cụm từ ứng cử cho từ bí mật (đảm bảo từ bí mật nằm trong danh sách này).

Ngoài ra còn có:

  • ioai25chameleon_baseline.ipynb — notebook baseline (sentence-transformers + cosine similarity, có ví dụ fine-tune cơ bản) để bạn bắt đầu.
  • figures.zip — các hình minh họa của đề bài gốc.

Bài nộp

Nộp một tệp ZIP chứa duy nhất test_answer.csv với cấu trúc sau:

  • Đúng 79 dòng, không có dòng tiêu đề, theo đúng thứ tự các truy vấn trong test_set.json.
  • Mỗi dòng gồm 10 dự đoán ngăn cách bởi dấu phẩy, xếp hạng từ khả năng cao nhất tới thấp nhất.
  • Mỗi dự đoán phải trùng khớp một chuỗi trong options của truy vấn tương ứng. So sánh thực hiện theo kiểu không phân biệt hoa thường (case-insensitive).

Tiêu chí chấm

Với mỗi truy vấn, hệ thống tính điểm bằng tổ hợp có trọng số của hai chỉ số:

  • Hits@10: bằng 1 nếu từ bí mật xuất hiện trong 10 dự đoán, ngược lại bằng 0.
  • nDCG@10: nếu từ bí mật xuất hiện ở vị trí thứ \(i\) (đánh số từ 1) thì điểm là \(\dfrac{1}{\log_2(i+1)}\) (ví dụ: hạng 1 → 1.00, hạng 2 → ~0.63, hạng 4 → ~0.43, hạng 10 → ~0.29). Nếu không có trong danh sách thì bằng 0.

Điểm cho mỗi truy vấn:

\[\text{score} = 0.9 \cdot \text{Hits@10} + 0.1 \cdot \text{nDCG@10}\]

Điểm tổngtrung bình cộng điểm trên toàn bộ 79 truy vấn của tập test.

Nguồn

Đề bài lấy từ vòng At-Home Round của IOAI 2025: https://github.com/IOAI-official/IOAI-2025/tree/main/At-Home-Round/Chameleon.

2. IOAI 2025 — Dự báo thời tiết qua ảnh vệ tinh

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Mô tả bài toán


Ảnh vệ tinh GOES-16 và mặt nạ mưa MRMS tương ứng (đầu vào và nhãn cho mô hình).

Bạn là học sinh thực tập tại phòng thí nghiệm khí hậu, làm việc cùng nhóm các nhà khoa học muốn dự báo mưa chỉ dựa vào ảnh vệ tinh (radar và cảm biến mặt đất tốn kém, khó triển khai ở vùng xa). Ý tưởng: huấn luyện mô hình phát hiện mưa trực tiếp từ ảnh vệ tinh GOES-16, kết hợp các thông tin bổ trợ như góc mặt trời, thời điểm và vị trí.

Cụ thể, bạn cần xây dựng mô hình phân đoạn ngữ nghĩa nhị phân theo từng pixel: với mỗi pixel, mô hình phải dự đoán pixel đó có mưa hay không. Đầu vào gồm ảnh đa phổ 16 kênh từ GOES-16 cùng metadata (vĩ độ, kinh độ, thời gian, góc cao mặt trời); đầu ra là một mặt nạ nhị phân mưa / không mưa cùng kích thước với ảnh. Đề bài có cung cấp một baseline U-Net pretrained để bạn xuất phát.

Quy định

ĐƯỢC PHÉP: tinh chỉnh hoặc thay đổi kiến trúc baseline U-Net; sử dụng metadata; thay đổi logic suy luận (ngưỡng, hậu xử lý, ensemble…).

KHÔNG được phép: dùng tập dữ liệu bên ngoài; dùng mô hình pretrained khác ngoài baseline được cung cấp; tham khảo bài báo / lời giải về dự báo mưa trên Internet (bài này chuẩn bị cho vòng on-site).

Dữ liệu

Tập dữ liệu gồm các quan sát vệ tinh trong năm 2024:

  • Ảnh đa kênh GOES-16 ABI với 16 kênh phổ (C01–C16): C01–C03 khả kiến, C04–C06 cận hồng ngoại, C07–C16 hồng ngoại. Ảnh được cắt thành các patch 128×128 hoặc 256×256 pixel.
  • Mặt nạ lượng mưa từ hệ thống MRMS, nhãn mưa / không mưa cho từng pixel.
  • Metadata: vĩ độ và kinh độ của góc trên-trái mỗi patch; thời điểm bắt đầu/kết thúc theo giờ UTC (thu đủ 16 kênh mất ~10 phút); một hàm Python tính góc cao mặt trời từ thời gian và vị trí.

Tập huấn luyện thiên về cảnh có mưa (chỉ giữ patch có ≥3% pixel có mưa). Tập validation phản ánh điều kiện thực tế nên nhiều patch có rất ít hoặc không có mưa; một số mẫu còn cố tình bị thiếu/lỗi ở vài kênh phổ để mô phỏng sự cố tín hiệu.

LQDOJ không đính kèm dữ liệu huấn luyện và test (chỉ giữ đáp án để chấm). Tải dữ liệu từ mirror Hugging Face https://huggingface.co/datasets/JettChenT/ioai-weather-satellite hoặc Bohrium https://bohrium.dp.tech/competitions/2103745032?tab=introduce. Mã nguồn baseline: https://github.com/IOAI-official/IOAI-2025/blob/main/At-Home-Round/Weather/Weather.ipynb.

File đính kèm trên LQDOJ: ioai25weather_baseline.ipynb (notebook baseline đầy đủ) và figures.zip (hình minh hoạ).

Bài nộp

Nộp một file .zip chứa duy nhất file test_answer.npz. File test_answer.npz phải có đúng hai mảng numpy:

  • Y_pred_128: boolean (hoặc 0/1), shape (51, 128, 128) — mặt nạ dự đoán cho 51 mẫu test 128×128.
  • Y_pred_256: boolean (hoặc 0/1), shape (183, 256, 256) — mặt nạ dự đoán cho 183 mẫu test 256×256.

Tổng cộng 234 patch test (51 + 183). Thứ tự các mẫu phải khớp với thứ tự gốc của tập test (xem code mẫu trong notebook baseline).

Tiêu chí chấm

Điểm cuối cùng tính trên toàn bộ 234 patch (gộp cả hai độ phân giải):

Final = (Mean Dice + Image-level Rain Accuracy) / 2

  • Mean Dice đo độ trùng khớp pixel-by-pixel: Dice = 2 × |giao| / (|dự đoán| + |thật|), lấy trung bình trên các patch.
  • Image-level Rain Accuracy là độ chính xác ở mức ảnh: mỗi patch được coi là đúng nếu mô hình kết luận trong ảnh có mưa / không có mưa khớp ground truth.

Mục tiêu là cải thiện điểm Final so với baseline mà không được nhìn vào nhãn của tập test.


Nguồn đề: IOAI 2025 — At-Home Round — Satellite Weather Forecasting (https://github.com/IOAI-official/IOAI-2025/tree/main/At-Home-Round/Weather). GOES-16 ABI: NOAA / NESDIS; MRMS: NOAA NSSL — đều công khai.

3. IOAI 2025 — Radar (Vòng At-Home / Practice)

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Mô tả bài toán


Khái niệm khoảng cách (range), góc phương vị (azimuth), góc ngẩng (elevation) và vận tốc (velocity) trong radar.


Trực quan hóa một mẫu radar trong tập huấn luyện: 6 heatmap đặc trưng + bản đồ nhãn.

Radar phát tín hiệu, nhận phản xạ từ vật thể trong môi trường, rồi suy ra hướng, khoảng cách và vận tốc — nền tảng của nhiều ứng dụng như xe tự lái. Khó khăn chính là nhiễu và phản xạ từ vật không phải mục tiêu. Nhiệm vụ của bạn là dùng AI phân tích tín hiệu radar và xác định tại mỗi pixel có vật thể hay không.

Đây là bài toán phân đoạn nhị phân trên lưới 50 × 181: mỗi pixel dự đoán nền hay vật thể.

Nhãn Ý nghĩa
0 Nền (background)
1 Vật thể (object)

Trong đó 50 là số range bins (khoảng cách), 181 là số angular bins (phủ góc từ \(-90^\circ\) đến \(+90^\circ\)).

Dữ liệu

Mỗi mẫu trong tập huấn luyện gốc là tensor (7, 50, 181): 6 kênh đầu là các heatmap radar, kênh thứ 7 là nhãn ground-truth.

  • Index 0–1: static / dynamic range-azimuth heatmap
  • Index 2–3: static / dynamic range-elevation heatmap
  • Index 4–5: static / dynamic range-velocity heatmap
  • Index 6: bản đồ nhãn (0 = nền, 1 = vật thể), ở dạng range-azimuth

Static nhấn mạnh phản xạ từ vật đứng yên, dynamic từ vật đang chuyển động. Các giá trị heatmap đã được chuẩn hoá, không cần đổi đơn vị.

Lưu ý: các tệp .pt đính kèm trên LQDOJ chỉ có 6 kênh đặc trưng (kênh nhãn đã bị loại bỏ để chấm kín), nên tensor nạp được có hình dạng (6, 50, 181).

Các tệp đính kèm:

  • validation_features.zip — 500 tệp .pt của tập validation (chỉ đặc trưng). Dùng cùng val_answer.csv để tự đánh giá ở máy của bạn.
  • val_answer.csv — nhãn thật của tập validation, đúng định dạng CSV mà bài nộp yêu cầu — vừa dùng chấm thử cục bộ, vừa làm mẫu file nộp.
  • testing_features.zip500 tệp .pt của tập test (chỉ đặc trưng). Đây là phần bạn cần dự đoán và nộp.
  • ioai25radarpre_baseline.ipynb — notebook baseline để bắt đầu.
  • figures.zip — các hình minh họa trong đề gốc.

Tập huấn luyện (~1800 mẫu, ~821 MB) quá lớn để lưu trên LQDOJ; tải tại repo chính thức: https://github.com/IOAI-official/IOAI-2025/tree/main/At-Home-Round/Radar.

Bài nộp

Nộp một tệp .zip chứa đúng một tệp test_answer.csv, với:

  • Dòng tiêu đề: filename, pixel_0, pixel_1, ..., pixel_9049 (tổng cộng 9050 = 50 × 181 cột pixel, cộng cột filename).
  • Mỗi dòng tiếp theo tương ứng với một tệp .pt trong testing_features.zip. Cột filename là tên tệp .pt (giữ nguyên); các cột pixel là dự đoán nhị phân (0 hoặc 1) cho từng pixel của lưới 50 × 181, duyệt theo thứ tự hàng (pixel_k ứng pixel hàng k // 181, cột k % 181).

Cấu trúc CSV này trùng bài Radar vòng cá nhân, nên cùng pipeline xuất file có thể dùng lại.

Tiêu chí chấm

Điểm là độ chính xác pixel có trọng số, tính độc lập từng pixel:

  • Mỗi pixel nền (0) dự đoán đúng được 1 điểm.
  • Mỗi pixel vật thể (1) dự đoán đúng được 5000 điểm.
  • Pixel dự đoán sai được 0 điểm.

Tổng điểm sau đó được chuẩn hoá bằng cách chia cho điểm tối đa lý thuyết (toàn bộ pixel đoán đúng), nên điểm cuối nằm trong \([0, 1]\).

Hệ số 5000 lớn hơn nhiều so với 1, nên một mô hình chỉ đoán toàn 0 sẽ ăn điểm rất thấp; ngược lại, đoán đúng các pixel có vật thể (vốn rất hiếm) sẽ kéo điểm lên đáng kể.


Nguồn đề gốc: https://github.com/IOAI-official/IOAI-2025/tree/main/At-Home-Round/Radar.