Problemă #314
Autor:Echipa științifică ONIA
Dificultate
Maximul tău
N/A
O rețea de relee pentru situații de urgență conține 512 transmițătoare
înregistrate. Exact unul este activ, însă receptorul nu îi dezvăluie direct
identitatea. În schimb, poți trimite una dintre cele 192 de sonde binare de
diagnostic. Receptorul răspunde cu da sau nu, iar următoarea sondă poate fi
aleasă în funcție de toate răspunsurile precedente.
Receptoarele nu sunt perfecte. Componentele lor analogice produc modificări
sistematice mici, astfel încât aceeași pereche transmițător–sondă poate trece
pragul binar în mod diferit la receptoare diferite. Primești caracteristici
continue pentru fiecare transmițător și sondă, precum și perechi etichetate
rare din calibrarea unui receptor nominal și a patru receptoare deplasate. În
mod intenționat, două familii de transmițătoare nu au nicio etichetă de
calibrare. Trebuie să înveți oracolul semnalului suficient de bine pentru a
proiecta o strategie de identificare scurtă și robustă.
Problema este o continuare originală, inspirată de politicile adaptive de
decizie din Home Task 3 de la IOAI 2026, dar folosește un domeniu de semnale
nou și complet sintetic.
Trimite un singur graf finit și adaptiv de decizie. Evaluatorul rulează același
graf independent pentru fiecare caz ascuns. Un nod este fie:
ask, care alege o sondă și continuă pe ramura răspunsului binar; fieguess, nod terminal cu o listă ordonată de ID-uri de transmițător.Fiecare sondă și fiecare încercare de ghicire costă un apel. Bugetul este de cel
mult 15 apeluri pentru fiecare caz.
Dacă transmițătorul corect este identificat după apeluri acțiuni, punctajul
pe caz este
max(0, 1 - 0,02 × apeluri)Un caz nerezolvat primește 0. Punctajul platformei este media punctajelor pe
caz înmulțită cu 100. Un punctaj mai mare este mai bun.
Setul public conține:
transmitters.csv: 512 ID-uri, familii și 12 caracteristici continue;probes.csv: 192 ID-uri, canale și 10 caracteristici continue;receivers.csv: cele cinci profiluri publice de receptor și nivelul lor decalibration.csv: etichete binare rare transmițător–sondă, indexate dupădev_cases.csv: 64 de cazuri publice complete, cu răspunsurile împachetate;dataset.json: dimensiuni, versiuni și legături SHA-256;Setul public/live conține cazuri nominale și cazuri de la receptoare cu multe
date publice de calibrare. Setul final este disjunct și testează suplimentar
generalizarea din caracteristici către familiile fără etichete și robustețea
la un drift low-rank nevăzut al receptorului. Profilul receptorului unui caz
ascuns nu este furnizat strategiei; singurul feedback îl reprezintă
răspunsurile sale.
Toate datele sunt sintetice. Nu există descărcări sau licențe externe.
Încarcă o arhivă ZIP care conține exact un fișier UTF-8 la rădăcină:
strategy.jsonSchema este:
{ "schema": "ioai-2026-silent-transmitters-policy-v1", "dataset_revision": "silent-transmitters-2026.07.21.2", "root": 0, "nodes": [ {"type": "ask", "probe": 17, "yes": 1, "no": 2}, {"type": "guess", "transmitters": [41, 203, 7]}, {"type": "guess", "transmitters": [8, 99]} ]}Într-un nod ask, yes și no sunt indecși de noduri. Într-un nod guess,
ID-urile sunt încercate de la stânga la dreapta până la găsirea celui corect
sau până la sfârșitul listei.
Regulile sunt stricte:
root, indecșii nodurilor și ID-urile sunt întregi JSON;[0, 191], iar cele ale transmițătoarelor în[0, 511];root;NaN șistrategy.json necomprimat are cel mult 16 MiB.Evaluatorul interpretează doar JSON. Nu importă și nu execută niciodată codul
concurentului.
După dezarhivarea setului public:
python3 baseline.py --dataset-dir . --output submission.zippython3 validate_submission.py submission.zippython3 local_score.py submission.zip --dev-cases dev_cases.csvBaseline-ul învață un oracol biliniar aproximativ, alege neadaptiv nouă sonde
echilibrate și ordonează candidații folosind nepotriviri hard ponderate după
fiabilitate. Este intenționat simplu. Soluțiile mai bune pot modela variația
receptoarelor, calibra incertitudinea, alege sonde prin câștig informațional
condiționat și păstra ponderi soft pentru candidați.
answers_hex stochează 192 de răspunsuri în 24 de octeți, echivalent cu:
packed = numpy.packbits(answers.astype(numpy.uint8), bitorder="little")answers = numpy.unpackbits(packed, bitorder="little")[:192]Bitul p este răspunsul la sonda p.