Úloha #308
Autor:IOAI 2026 Organizing Team
Obtížnost
Vaše nejlepší skóre
N/A
Představte si Kabinet rozlišení, jehož zásuvky obsahují skrytá zvířata. Zásuvku nemůžete otevřít, ale můžete ask orákulu otázky s odpověďmi „yes“ nebo „no“ a poté se pokusit guess jméno daného animal.
Cílem je identifikovat každý animal pomocí co nejmenšího počtu volání. Jedná se o interaktivní identifikační problém podobný hře „Dvacet otázek“: každá odpověď by měla snížit počet pravděpodobných zvířat a nejlepší další question bude obecně záviset na dosud obdržených odpovědích.
Jsou zveřejněny dvě kompletní sady:
animals_pool.txt: 1,472 zvířata, která mohou být navržena;questions_pool.txt: 559 otázek s odpověďmi „yes“ nebo „no“.Pro skrytý animal původní problém odhaluje následující operace:
| Provoz | Vrácená hodnota | Význam |
|---|---|---|
ask(question) | "yes" nebo "no" | Položí question ze souboru questions_pool.txt. |
guess(animal) | "correct" nebo "wrong" | Navrhne animal ze souboru animals_pool.txt. Návrh correct ukončí kolo. |
Obě operace spotřebují jedno volání. Celkový rozpočet je 15 volání pro každý skrytý animal, včetně konečného guess. Hodnota, která nepatří do odpovídající množiny, je odmítnuta bez spotřebování volání.
Na platformě MLCompete je adaptivní strategie vyjádřena jako konečný rozhodovací graf v policy.json. Uzel ask se větví podle odpovědi orákula yes/no. Uzel guess ukončí kolo, pokud je návrh correct; jinak bude následovat hrana wrong. Uzel stop ukončí kolo, aniž by jej vyřešil.
Tato deklarativní reprezentace je ekvivalentní deterministické adaptivní politice solve pro jednu animal: každé rozhodnutí může záviset na celé historii odpovědí. U randomizované strategie nastavte náhodné semeno před jejím exportem. Během hodnocení není spuštěn žádný kód zadaný účastníkem.
Orákulum je založeno na Qwen/Qwen2.5-3B-Instruct a připnuto k revizi aa8e72537993ba99e69dfaafa59ed015b17504d1. Pro každý pár animal–question ze soukromého hodnocení požadovaný hodnotitelem používají organizátoři přesný oficiální prompt:
You are answering a question about one specific animal.The animal is: {animal}.Answer with a single word, yes or no.Question: {question}Oficiální soubor interactor.py obsažený v balíčku je zachován beze změny a nepřipíná revizi Hugging Face. Pro co nejvěrnější reprodukci platformy orákula předejte výše uvedenou revizi jak AutoTokenizer.from_pretrained, tak AutoModelForCausalLM.from_pretrained a použijte zaznamenané prostředí.
Jiný hardware nebo numerické knihovny mohou v blízkosti remízy stále změnit greedy bit; zmrazená matice platformy zůstává směrodatná, zatímco místní inference je pouze předpovědí této matice.
Vysoce výkonným přístupem je předpočítat tabulku animal–question, zachovat kandidáty kompatibilní s pozorovanými odpověďmi a vybrat question, která co nejrovnoměrněji rozdělí zbývající sadu kandidátů.
Veřejný balíček obsahuje:
animals_pool.txt a questions_pool.txt;dev.csv, obsahující 150 veřejně označená zvířata;test1.csv, obsahující 500 veřejně označená zvířata;interactor.py a evaluate.py pro místní experimenty;validate_submission.py, samostatný validátor archivu ZIP a politiky;dev.csv a test1.csv jsou disjunktní veřejné sady určené pro místní hodnocení, nikoli tajná data žebříčku. Soukromá sada MLCompete se vybírá pouze z 822 zvířat v animals_pool.txt, která se neobjevují v žádném ze dvou veřejných souborů CSV. Obsahuje 128 jedinečných zvířat: 32 tvoří průběžnou/částečnou sadu, zatímco dalších 96, disjunktních od první skupiny, tvoří konečnou/úplnou sadu. Jejich přesné složení a pořadí hodnocení nejsou zveřejněny.
Oficiální soubor evaluate.py spouští implementaci Python MySolution v původním formátu; nečte ani neověřuje archiv obsahující policy.json. Před nahráním použijte validate_submission.py.
Odešlete archiv ZIP obsahující přesně jeden soubor na root archivu:
policy.jsonAdresáře, symbolické odkazy, duplicitní cesty a další soubory nejsou povoleny. policy.json musí být dokument UTF-8 JSON s použitím následujícího schema:
ioai-2026-animal-policy-v1Zatímco je soutěž aktivní, platforma také vyžaduje samostatnou přílohu zdrojového kódu. Do tohoto pole nahrajte zdrojový soubor, zápisník nebo zdrojový archiv použitý k vytvoření policy.json. Organizátoři jej uchovávají pro ověření; hodnotitel jej neprovede a nesmí být zařazen do archivu podání ZIP.
Identifikátory jsou nulové řádkové indexy v oficiálních normalizovaných sadách:
question: celé číslo mezi 0 a 558;animal: celé číslo mezi 0 a 1471;nodes;null: stop bez spotřebování dalšího volání.Přesné formáty uzlů jsou:
{"type":"ask","question":17,"yes":4,"no":5}{"type":"guess","animal":903,"wrong":8}{"type":"stop"}Archiv může definovat maximálně 32,767 nodes. Každý odkaz musí ukazovat na existující uzel. Neznámé klíče, duplicitní klíče JSON, neplatná čísla a nesprávné nastavené hodnoty hash zneplatňují odeslání.
{ "schema": "ioai-2026-animal-policy-v1", "animals_sha256": "87eb93cc5d2a238a38daaeb201c394db935153cc17b03a44a7642f0db9ff35dc", "questions_sha256": "d2bd060866382f3dd1329112e73fbd6bf2397352d02469434b7b3d199bd2ca62", "root": 0, "nodes": [ {"type": "ask", "question": 0, "yes": 1, "no": 2}, {"type": "guess", "animal": 0, "wrong": null}, {"type": "stop"} ]}Příklad se ptá na první publikované question. Po yes navrhuje první zveřejněné animal; po no se zastaví.
Pro každý soukromý animal začíná hodnotitel na root s nulovým voláním a prochází grafem iterativně:
ask: spotřebuje jedno volání, přečte zmrazený bit orákula a poté následuje yes nebo no;guess: spotřebuje jedno volání; skončí úspěšně, pokud je návrh correct, jinak následuje wrong;stop nebo null: ukončí kolo bez jeho vyřešení a bez spotřebování volání.Průchod se zastaví po 15 spotřebovaných voláních, i když graf obsahuje další odchozí hranu. Cykly jsou tímto rozpočtem bezpečně omezeny.
Pro jeden skrytý animal:
round_score = max(0, (1 if the animal was found, otherwise 0) - 0.02 × number_of_calls)Příklady:
0.98;0.90;0.70;0.Tyto dvě nezpracované metriky se počítají nezávisle:
partial_metric = mean(round_score for the 32 live animals)full_metric = mean(round_score for the 96 final animals)partial_score = 100 × partial_metricfull_score = 100 × full_metricZatímco je soutěž aktivní, běžní účastníci vidí pouze dílčí skóre. Úplné skóre zůstane skryté a po skončení soutěže se stane konečnou metrikou žebříčku. Je to průměr z 96 řádků úplné sady, nikoli kombinovaný průměr ze všech 128 řádků. Maximální možná hodnota každého zobrazeného skóre je 98.00, protože i první correct guess spotřebuje jedno volání.
Vytvořte a otestujte strategii lokálně pomocí oficiálních sad a zmrazeného orákula. Exportujte každé rozhodnutí jako uzel ask, guess nebo stop, nahraďte větve přesahující horizont 15 volání hodnotou null nebo stop a v případě potřeby slučte totožné podgrafy, abyste dodrželi limit uzlů.
Do hodnoceného archivu ZIP umístěte pouze policy.json. Samostatně nahrajte zdrojový kód programu, který vytváří politiku, nebo odpovídající notebook do povinného pole zdrojového kódu. Nenahrávejte váhy modelů ani předem vypočítané tabulky orákula.
Před nahráním spusťte:
python3 validate_submission.py submission.zipUpraveno se svolením podle „Analytický jazyk (John Wilkins)“ (IOAI 2026 Home Task 3). Viz oficiální notebook.
Archiv deklarativní politiky, soukromá sada platformy a zmrazené předpočítané orákulum jsou adaptacemi MLCompete. Požadavky úkolu, prompt, povolené sady hodnot, rozpočet 15 volání a vzorec hodnocení se řídí oficiálními materiály.