Last Modified: 30.9.2024
kontakt, zápočty, zkoušky, rozvrh, skripta, TeX/METAFONTware, Články k dynamickým datovým strukturám, Analýza hry Quarto, Důchodová reforma, Šifrovací hry, Hádanky, Arimaa
Termín konzultace je nejlépe dohodnout předem e-mailem
jmeno.prijmeni@mff.cuni.cz(subj:Konzultace) - odpovím jak bude v mých silách.
Kde mne najdete?
Česká republika, Praha, budova MFF UK Malostranské náměstí 24,
3. patro číslo dveří 302.
NTIN061 Algoritmy a datové struktury II
NTIN090 Základy složitosti a vyčíslitelnosti
Termín(y) se koná(ají) na základě dohody e-mailem.
"Úvod do složitosti a NP-úplnosti",
"Složitost a NP-úplnost"
již dlouho nedoznala změn.
Psaní skript k přednášce
"Dynamické datové struktury"
jsem pozastavil, protože vzhledem k odbornosti tématu
je český text nepotřebný, anglických článků je mnoho a
obor se stále ještě rozvíjí. Články mohu zapůjčit.
Psal jsem
"Povídání o datových strukturách",
které se mělo s původně zamýšleným obsahem dynamických
datových struktur překrývat.
Slovníček
"Vnitřnosti TeXu"
je napsán do konce expand procesoru.
V září 2008 obhájila (pod mým vedením) rešeršní diplomovou práci koncipovanou jako výukový materiál pro
„Testování software“ Anna Borovcová.
Jako obdivovatel a intenzivní uživatel TeXu, a v poslední době i META(FONT/POST)u čas od času vytvářím (aspoň spoluvytvářím) nějaké pomůcky pro pohodlnější práci s těmito programy. Jednou z těchto pomůcek je mnou v roce 1994 vytvořené TeXmenu. Druhou je METAFONT-editor vytvořený Alešem Vanclem.
Jako zajímavé cvičení z TeXu a trochu taky z algebry a teorie kódování bylo vytvoření makra pro sazbu QR kódů.
Kopie veřejně přístupných článků týkajících se dynamických datových
struktur najdete u Martina Mareše v adresáři
dga/papers.
U mne můžete najít články Mikkela Thorupa a spol. týkající se amortizovaně
polylogaritmických datových struktur
Amortizované polylog datové struktury pro 1 a 2souvislost,
1souvislost
s mazáním,
Obecná
metoda vylepšující randomizované algoritmy založené na vzorkování.
Kromě toho zde můžete najít článek Moniky Henzinger (Rauch)
Worst case datová struktura pro vrcholovou 2souvislost.
Na semináři v Josefově Dole 1998 jsem se seznámil s matematickou hrou Quarto. Napadlo nás zkusit nalézt optimální strategii v této hře. První pokusy vedly k tomu, že jsme byli schopni hru prozkoumat do hloubky 7 (z 16). Zkusil jsem aplikovat různé techniky na urychlení výpočtu a podařilo se mi hru prozkoumat úplně. Hra je zajímavá hlavně obrovským množstvím symetrií, které umožnily tak výrazné prořezání prostoru konfigurací, že úloha již byla řešitelná.
Pravidla hry: Hra se hraje na čtverci 4x4, je k dispozici 2^4 figurek. (figurky jsou nízké/vysoké, bílé/černé, hranaté/kulaté, plné/duté ... od každého druhu jedna). Hru hrají dva hráči, kteří se střídají v tazích. Vždy jeden hráč určí figurku a druhý ji položí na desku. Vítězí hráč, kterému se podařilo vytvořit horizontální/verikální/diagonální čtveřici figurek, které jsou alespoň v jedné vlastnosti stejné. V případě, že se to nikomu nepodaří, končí hra remízou.
V adresáři ftp/quarto Naleznete příslušný program i výsledek 14 denního výpočtu.
Výsledkem analýzy je, že při správné hře obou hráčů končí hra remízou.
Variantou hry je hledat čtveřici i ve čtvercích 2x2 (sousední řádky a sloupce). Tuto variantu hry daný program nezkoumá, mám pocit, že pocet symetrii tím klesá na polovinu, a vzhledem k nárůstu rychlosti počítačů za posledních 5 let by neměl být problém upravit program a přepočítat výsledky i pro tuto variantu. Najde se zájemce?
Implementačně nejjednodušší je upravit program pro výpočet varianty hry, kde se čtveřice hledá i ve vrcholech libovolného obdélníku s horizontální a vertikální stranou (tytéž symetrie). Mám pocit, že neexistuje remizová pozice pro takováto pravidla hry.
V období duben 2004 - červen 2005 jsem se podílel na přípravě podkladů pro rozhodnutí o důchodové reformě. Více informací o výsledcích modelování se dozvíte zde.
Byl jsem ukecán k účasti na šifrovací hře OSUD. Natolik se mi to zalíbilo, že jsem se účastnil i dalších her. Reportáž účastníka z těchto akcí přináším
Pro výjezdní zasedání kateder ktiml a kdss jsem na 26.9.2019 organizoval teambuilding/šifrovačku.
Malá šifrovací pomůcka a podklady pro dálkově pořádanou šifrovačku pro doktorandy (často zabývající se harmonickou analýzou) na Morávce (Krušné hory). Nehledejte originální šifry, zajímavá byla spíš technika nápovědy formou mnohonásobného výskytu principu šifry, vzhledem k tomu, že se nedaly očekávat velké zkušenosti s šifrovačkama. Autoři šifrovaček Dnem, Matrix a hlavně Haluz určitě znovupoužití principu šifry prominou. Ukázalo se, že
Malá šifrovačka se v roce 2009 zopakovala.
Posílal jsem mentiony co to šlo, ale hra která měla končit kolem 19h
se protáhla až do 23h 30m. Museli jsme se uchýlit k předložení alternativní
startovní šifry protože „typografické stegano“ se ukázalo být těžkým.
P.S.: Pro rok 2009. Když píšu že v anglické gramatice nemáte hledat šifru, myslím to vážně.
P.P.S: Každá šifra ukrývá aspoň 3 tajenky (dvě ukrývají dokonce 4).
P.P.P.S.: Naprosto nechápu, že se nikdo nezamyslel nad tím tiskovým zrcadlem.
4P.S: Pokud byste si tiskli zadání, použijte ghostview.
Pokusy s Acrobatem nedávaly dobré výsledky.
5P.S: Kdybych to dělal teď, asi bych i před ROBINem odřádkoval. Ne. To by bylo extrémně snadné!
6P.S: Očekávám bezprostřední dojmy na e-mailu. Ne že to budete sepisovat rok :)
Hádanky považuji za stěžejní „médium“ pro rozvoj matematiky. Jsem přesvědčen že na mé matematické/informatické vzdělání mělo řešení hádanek přinejmenším tak velký vliv, jako celý školský systém. Nebavím se o dětských hádankách typu „leze, leze po železe, ...“, ale o hádankách, které ač mají triviální formulace, nejsou rozumě řešitelné bez zavádění vlastní nové terminologie, případně dobře zdůvodňují, proč k zavedení takové terminologie vůbec došlo ... MMO
Mé oblíbené hádankářské fórum je Wu forum a
nejraději mám ty hádanky, co ještě nemám vyřešené ... „n vězňů a k-stavový přepínač“ (známý především pro 100 vězňů a „žárovku“,
kde pravděpodobně držím světový rekord ... strategii s průměrem kolem 3430, 3390 3370 návštěv).
K oblíbeným patří i hádanky, s řešením typu heuréka, které mi daly hodně zabrat a většina mých kamarádů matematiků je ještě nemá vyřešené.
Příkladem je varianta „vězňů s čepičkami“, kteří opouštějí vězení, pokud alespoň jeden z nich oznamí číslo ze své čepičky.
(Pro n-vězňů věznitel vytvoří seznam n přirozených čísel z intervalu 1 až n,
a i-tému vězni pošle seznam upravený tak, že na místě i-tého čísla je volné místo. Vězni mu nezávisle na ostatních seznamy vrátí s doplněným i-tým číslem a pokud se některý s věznitelovým shoduje, vězni vítězí. Otázkou je, jakou strategii si mají vězni předem domluvit, aby zvítězili.)
Na daném fóru je spousty hádanek z oblastí, kde naprosto tápu. Příkladem jsou různé hádanky o trojúhelnících s celočíselnými stranami, které vedly k rozvoji teorie eliptických křivek. Své si zde najde každý zvídavý človíček kterému anglický jazyk nebrání v chápání jednoduchého textu.
Zajímavé úlohy (zvláště pak seriály) najdete taky na hacker.org. Stále mne ještě pár úloh čeká.
Jednodušší hádanky poskytujeme středoškolským studentům ve „studentském časopise“ M&M.
Myslíte, že je možno implmentovat Fibonacciho haldy aniž byste potřebovali místo na ukazatele ke kořeni?
Ne! Dostanete strukturu se stejnou asymptotickou složitostí, ale budou to Padovan haldy.
Vypadá to, že jsem první, kdo tyto haldy popsal.
Prezentaci přikládám v plné verzi česky a anglicky
a ve zkratce česky a anglicky (archiv).
Když už jsem se věnoval haldám, dočetl jsem se o worst case verzi hald s DecreaseKey rozhraním. Myslím, že jsem vylepšil dosud nejlepší verze těchto struktur (daleko více si cením již získaných informací první verze, velmi redukuji overhead druhá verze). Mám pocit, že druhá verze by měla být efektivnější než klasické (amortizované) Fibonacciho haldy.
Krátký článek srovnávající rychle rostoucí funkce Zaneprázdněný bobr a Ackermanova funkce nechávám v této sekci. Stejně tak kompilát o rubikově kostce a povídání o dvou jejich modifikacích sun a puppet.
No a implementoval jsem i menší, ještě dvakrát rychlejší hodinky.
Dělal jsem je zcela od začátku, nejprve jsem zúžil překladové tabulky na polovic, pak jsem využil sudosti počtu stavů každé "číslice" takže jsem redukoval šířku stavového automatu
pro každou "číslici" na polovinu, což krásně zapasovalo do polovičních překladových tabulek. Zcela jsem zrušil synchronizaci přepínání stavů původního řešení.
Místo toho jsem zvolil spouštění stavů opožděné o to, o kolik kratší trajektorie následuje za stavem v překladové tabulce.
Proto nebylo potřeba použít individuální opožďovací bludiště jednotlivých stavů před překladovou tabulkou.
To umožnilo synchronizovat přepínání číslic v polovičním čase.
Později se ukázalo, že stavy pro nejrychlejší číslici se v dané frekvenci nestihnou resetovat a každé páté přepnutí číslice jeden takt vynechávalo.
Nezbylo než rozdvojit stavový automat. Kompaktní část se stará o počítání do 5 a zajišťuje reset automatu. Velká část po resetu postupně vysílá 5(×2) signálů do překladové tabulky.
Pak už šlo jen o to, vytvořit zobrazovací část. Rozhodl jsem se vynechat pauzu mezi přepínáním, a radši vytvořit největší segmenty, které se v daném čase ještě stihnou přepnout.
Cílem bylo vytvořit plně synchronizované segmenty.
Vzhledem k tomu, že signály po pravé straně běží v jiné fázi než po levé, není možné řetězy LWSS udržet ve stejné fázi a ve stejné vzdálenosti. Přesto se podařilo odchýlit od symetrie o jediný pixel.
Co se týče přepínání segmentů, zvolil jsem nejrychlejší možnou trajektorii k dolnímu segmentu. Ostatní trajektorie jsem prodloužil tak, aby přepínání segmentů bylo synchronizováno v rámci každé "číslice".
Tytéž trajektorie byly použity pro všechny "číslice". (Přepínání mezi trajektorií C/2 LWSS a C/4 glideru umožnily poměrně pohodlné ladění).
Po synchronizaci segmentů číslic v rámci "číslic" bylo potřeba ještě sesynchronizovat číslice navzájem.
Vyšší řády musí být opožděny ve stavovém automatu, nezbývá proto pro nižší řády počkat před překladovými tabulkami.
Rezignoval jsem na nekřížení "drátů" v rámci zpožďovacího bludiště (dostatečné zpoždění v úzkých koridorech by vyžadovalo extrémně dlouhou dráhu).
Alternativou by mohlo být přenášet signál část úseku C/2 LWSS. Pak by šlo synchronizovat volbou délky urychlení.
Poslední změnou byla implementace AM ukazatele, kde jsem využil přepínače generátoru C/2 LWSS objeveného během zužování překladových tabulek.
Tak jsem přeci jen nahradil brzdící labyrinty urychlením pomocí C/2 LWSS. Určitě by ještě bylo možno místo „kolizních reflektorů“ použít jiné reflektory
s periodou dělící 60. Bylo by to čistší (méně živých buněk). Třeba si jěště nekdy pohraju s displejem do 23:59. Hotovo :).
Po přednášce na MaM soustředění o Life (a těchto hodinách) jsem se ještě rozhodl hodiny nepatrně zmenšit (hotovo), nějaké úpravy dostal časový strojek
(kompaktnější vypínání proudu LWSS, jiné přístupové cesty k logice týkající se nejvyšší cifry),
podstatné pak bylo předělání zpomalovacích cest k segmentům displaye (více reflektorů, některé aktivní, ale na menší ploše),
končící vždy vertikálním LWSS ve fázi umožňující jemné doladění posunu mod 4 volbou odlišné srážky s LWSS z překladové tabulky.
Pro konstrukci hodin do 23:59 byl velice důležitý přechod z Gosper na Simkin technologii. Proud gliderů s periodou 120 místo 30 umožnil díky křížení tras dostatečně kompaktní logiku
(režim hodin mezi 20:00 a 0:00 v šířce odpovídající malé překladové tabulce stojí za pozornost).
Dále jsem se snažil nahradit Gosper logiku na dalších místech a zmenšit tak počet aktivních objektů.
Ano i k tomu došlo, syringe umožňuje přepínání z glideru na herschel, stabilní herschel obvody umí glidery namnožit a přesměrovat, jen tyto obvody potřebují velký prostor, takže jsem volil estetický kompromis
mezi jejich velikostí a počtem aktivních prvků simkin/gosper technologií. Co se týče reflektorů, použil jsem snark, kdekoli bylo dost místa (a nebyl velký problém s „časotrajektorií“).
Na půlení frekvence i nadále používám CC-semisnark, na čtvrcení frekvence pak quadrisnark. Pro stavový automat jsem použil stabilní swith používající stop and restart kde glider je zastaven ve formě block.
Při vyhledávání (na internetu) konstrukčních prvků jsem viděl, jak je možno pomocí salv časování příletu gliderů konstruovat téměř libovolné statické struktury. Vytvořit tak deterministický Turingův stroj s jednostranně nekonečnou páskou, s libovolně aspoň tříznakovou abecedou obsahující zarážka, 0=blank, kladné číslo a libovolnou množinou stavů, kde počáteční stav je 0. Kódování přechodové funkce by bylo po displejích (stav písmeno), mělo by pro každý displej fixní šířku $D$. Na maximálním možném počtu $A$ písmen abecedy, by byly určeny rozestupy v kódování jednotlivých stavů $D\cdot A$. Stejně tak by na $A$ závisela šířka vyhrazeného prostoru pro kódování písmen na pásce. Jedná se jen o vzdálenost zarážky pro konstrukci, takže by fungovaly stejné salvy. Je potřeba salva na zvýšení hodnoty zapsané na políčku pod hlavou, salva na posun hlavy blíže k přechodové funkci, salva na posun hlavy dál od přechodové funkce (s případným prodloužním pásky o 0). Salvy není problém uchovávat v cyklu, je možno jejich výstup blokovat s tím, že asynchronní odblokování čeká na synchronizované odblokování (začátek salvy). Co se týče evidence přechodové funkce, kódoval bych v přechodové funkci místo absolutních stavů diferenci v čísle stavu (se znaménkem určeným trajektorií). To by daný počet krát uvolňovalo jednoduší salvu na posunutí odboček o $A\cdot D$. Posun o $D$ by zařizovala univerzální salva, parametr $A$ by řídil počet jejích zopakování pro konkrétní stroj.
Provedení jednoho kroku TS by probíhalo ve třech velkých krocích:
Díky diplomce Tomáše Kozelka jsem zabředl do hry Arimaa. Hra je rozměrově podobná šachům, ale co se týče velikosti stromu hry, převyšuje go. Hra byla navržena tak, aby byla lehká pro lidi a odolávala hrubé síle počítačů. Následuje text, který postupně zastaral, snažil jsem se připisovat dospod aby byl vidět historický vývoj.
Zatím nejlepší lidé odolávají, zkusil jsem zjistit, jak na tom nejlepší lidé jsou a jak jsou na tom boti.
Myslím že už mám dobrou představu o nedostatcích obou stran a věřím tomu, že vím, jak se získání Arimaa Challenge výrazně přiblížit.
Více na Arimaa gameroom, MS 2010
a MS 2011.
Obávám se, že nejsem sám, kdo tuší jak se k zdolání Arimaa Challenge
přiblížit.
Letošní (2011) vítěz WCC bot_sharp naprogramovaný Davidem Wu (lightvector)
používá řazení tahů na základě vektoru popisujícího „smysl tahu“ natrénováno na základě vektorů z her výše
hodnocených lidských hráčů. Toto řazení je navíc použito k omezení
hloubky prohledávání neperspektivních větví. Zdá se, že po drobném doladění
parametrů statické ohodnocovací funkce budou obdobní boti v roce 2012 lidmi
neporazitelní. (Stále ještě věřím tomu, že letos challenge odolá,
ale nebyl bych překvapen, kdyby jeden nebo dva ze zápasů skončily
vítězstvím stroje. A to byli letos zvoleni obránci z top 10 aktivních hráčů.)
Challenge v roce 2012 odolala, navíc se objevili další dobří lidští hráči, zatímco na straně strojů k výraznému zlepšení nedošlo.
Byl jsem ukecán zúčastnit se mistrovství s 40 účastníky MS 2013.
Po krachu internetového spojení pro mne WC2013 skončilo předčasně a tak jsem si to zopakoval MS 2014.
Můj bot má zatím spoustu potenciálu na zlepšování (pomalé jádro, možnosti vylepšení prohledávání, slabá ohodnocovací funkce,
nevyužití paralelizace), v korespondenčních partiích má v „rozevlátých“ partiích šanci díky množství času, který je ochoten partiím věnovat.
Bot mého diplomanta je nesrovnatelně lepší, ukecal jsem jej pro účast na wcc.
V noci ze dne 18.4.2015 na 19.4.2015 Arimma Challenge padla. Bot Sharp od Davida Wu (lightvector) získal vedení 2:0, 2:0, 2:0 v challenge hrách proti
5 násobnému mistru světa, zároveň třetímu z letošního mistrovství, čtvrtému muži z letošního mistrovství a letošnímu mistru světa.
Druhý člověk z letošního mistrovství světa (dvojnásobný mistr světa) v „screeningu“ dokázal s botem remizovat 1:1, což se povedlo ještě jednomu hráči.
Nakonec challenge zápasy skončily 3:0, 2:1, 2:1. Pětinásobný mistr světa ukázal, že bot nadhodnotil frame koně a za jeho udržení byl ochoten obětovat postupně spoustu materiálu.
Aktuální mistr světa pak porazil bota bez zneužití této slabiny. Získal sdílenou kontrolu nad botovou pastí což vedlo k přetížení botova slona
a k vynucení výměny koně a psa za dva králíky (v tahu 27). Později bot ztratil i psa, ale materiální ztrátu dokázal po drobné nepřesnosti kompenzovat silným gólovým útokem.
Aktuální mistr světa ale nezpanikařil, obětoval kočku a se stále ještě výrazným materiálním vedením získal zpět kontrolu nad gólovými hrozbami a
v tahu 72 dovedl hru do vítězního konce.
David odvedl letos na vylepšení Sharpa skutečně velký kus práce. Trochu povídání o Arimaa.
V roce 2020 byla situace taková, že MCTS bot s ohodnocovací funkcí založenou na neuronové síti, která byla trénována na základě hry sama se sebou po dobu 60 dní snadno porážel vítěze challenge. Učitel neuronové sítě ponechal snapshoty sítě po jednotlivých dnech učení. Umožnil rozhraní, kde si hráči mohou vybrat s verzí po kolika dnech si chtějí zahrát (pokud již porazili o nejvýš 5 méně dní trénovanou síť) bot odpovídá téměř okamžitě, protože dostal omezení, že se smí neuronové sítě zeptat nejvýš 3200 krát za tah.
Podařilo se porazit verzi z 50 dne využitím blokády slona, stálo to mnoho experimentů, jak jej vylákat do pozice, v níž je šance jej porazit. Bylo zneužito toho, že bot ve stejné pozici hraje většinou stejně. Fér hrou se podařilo vícenásobnému lidskému mistru světa porazit 37. úroveň, v té době ještě nebylo jednoduché na odehraných hrách zjistit, jaká byla úroveň, takže není jasné, na kolik to bylo pokusů (snad 7).
Mnoho proher bota (přinejmenším na nižších či středních úrovních) je v situaci, kdy má naprostou převahu, a zanedbatelné rozdíly v evaluaci nedokáží přesně navigovat k vítězství. Čas od času se pak při chybě gólového útoku dostane slonem do blokády, což zcela otočí výsledek hry.