Tento článek je spíš technický, ale snažíme se jej psát co nejsrozumitelněji s možností reprodukce, jinými slovy řečeno je to sepsáno jako návod. Článek je optimalizován pro prohlížeč Mozilla Firefox [odkaz].



Uvařme si guláš!


Také máte chuť na gulášek? My též! Pod gulášem (angl. goulash) se skrývá sada rozdání, která odporuje rozdělení při náhodném rozdávání karet. Jsou to předpřipravená rozdání a hráči to ví předem.

Generování sady s určitými podmínkami, například rozdání s velkým slemem, je zajímavý pravděpodobnostní problém. Někdy se to dělá ručně, že například většinu honérových karet či karet jedné barvy dáme jedné lince a až teprve pak náhodně rozhodíme zbytek lince druhé.

Podobně fungují programy typu Deal [odkaz] či Dealer [odkaz]. Podle podmínek se rozhodí co nejvíce karet a až poté se náhodně rozhodí karty zbylé. Je to efektivnější než generovat mnoho rozdání a dohledávat, jestli náhodou všechny zadané podmínky sedí. Kdybychom chtěli u jednoho hráče konkrétních 13 karet, tak se u také nemusíme dočkat ani jediného rozdání. Proto se těchto 13 karet zafixuje a náhodně se rozhazuje zbylých 39 karet.

Další situace je, že záměrně připravujeme dělení barvy, očekávaných trumfů, u jedné linky jako 3-0, 4-0, 4-1, 5-0, 5-1, 6-0 a podobně, čímž nejčastěji znepříjemňujeme život hlavnímu hráči. Pro kontrolu takového generování se hodí znát par/minimax rozdání, o tom si napíšeme později. Nejen dohledat slem je umění, ale také zapasované rozdání, kdy par je roven nule.

Začátečníky potěší, když nemusí hrát částečné závazky tak často, ale jen to slemy lítá. Myslím, že to potěší i juniory a mládež. Nu, koho to vlastně nepotěší? Samozřejmě přirozeně slem dostaneme jen tu a tam, přibližně jen každé desáté rozdání. Takže když za večer odehrajeme, řekněme, takových 12 rozdání, tak se slemu také nemusíme ani dočkat.

playBridge hand generator

Termín guláš jsme několikrát zahlédli na BBO, takže nás zaujaly tyto webové stránky [playBridge.com]. Zmiňují, že vybírají vypečená rozdání z 10000 náhodně vygenerovaných. Používají na vyhodnocení rozdání jistý „Goulash Evaluator“, což bude nejspíš kombinace FB/HCP a délky listů v lince nějak ve vztahu k oběma linkám. Uživateli se pak nabízí rozdání s nejvyšším skórem.

Zkusili jsme si vygenerovat 64 rozdání na těchto stránkách a 64 rozdání pomocí Dealu a srovnáme je pomocí elementárních statistik. V dalších odstavcích mícháme Linux (díky Cygwinu) a Windows nástroje, takže se pokusíme hlavně vysvětlit dílčí kroky, kdybyste si to chtěli též vyzkoušet.

Navštívili jsme tuto webovou stránku [odkaz] a naklikli jsme si z menu „Generators“ (generátory) a dále pak tlačítko „Goulash“ (guláš). Dostali jsme se sem [odkaz]. Ve spodní části jsme si navolili 64 a potvrdili tlačítkem „Generate“ (vygeneruj nám je).



Naše první gulášové rozdání ještě před jejich zamícháním.

Dále jsme si rozdání nechali uložit přes „Save“ ve spodní části. Abychom mohli vidět stejná rozdání, tak si je prohlédněte přes klíč PP3655Y (ten platí do konce dubna 2014). Otevřete si tento odkaz [odkaz], zapište či zkontrolujte PP3655Y a naklikněte „Get“ (ukaž mi ta rozdání). Ve spodní části si lze rozdání stáhnout, přes „Export to PBN“.

Přes pravé tlačítko na myši nad odkazem „Right Click here to download – Select [Save ... as] from the menu“ (mělo by fungovat i levé tlačítko myši) si lze uložit tento PBN soubor. Získáme soubor s podobným názvem jako tento (název obsahuje časovou známku doby vygenerování, takže se nám názvy budou lišit). Soubor si uložme do počítače, viz 20130527131854KW3190M_002.PBN [].

Poněvadž název souboru obsahuje víc jak 8 znaků, tak by nám nefungoval Pavlickův BFC konvertor (emulovaný ještě pro operační systém DOS). Navíc obsahuje speciální znak (podtržítko), takže by nám to zlobilo i jinde. Přejmenovali jsme si jej takto:

mv 20130527131854KW3190M_002.PBN 64cizi0.pbn

Budeme se snažit získat minimax zdvihů a dopočítat par rozdání, ale tento soubor 64cizi0.pbn [] obsahuje příliš mnoho nadbytečných informací a Deal nám nebude při importu fungovat. Proto potřebujeme soubor zjednodušit. Využijeme Bridge File Converter (BFC) od Richarda Pavlicka [odkaz].

bfc 64cizi0.pbn i 

Vidíme, jak je takový všeobecný konvertor užitečný, když už je, proč jej nevyužívat. Tímto krokem získáme soubor OUT.DDL [], což je formát GIBu [odkaz], ale bez minimax zdvihů (liší se to tečkou a mezerou mezi barvami). To si už snadno upravíme automatem. Jen pozor, Linux rozlišuje malá a velká písmenka v názvech souborů, musíme název napsat přesně.

cat OUT.DDL | sed "s/\./ /g" >64cizi1upra.ddl

Získáme soubor 64cizi1upra.ddl []. Poněvadž z náhledu tušíme, že server rozdání seřadil sestupně podle nějakého toho svého klíče, tak si je pro jistotu zamícháme. Znamená to přeházet si řádky v tomto souboru, využijeme Linuxového programu Sort [man], nikoliv tu standardní Windows verzi.

sort -R 64cizi1upra.ddl >64cizi1uprb.ddl

Tohle zamíchání řádků 64cizi1uprb.ddl [] je nádherný problém pro programátory, pokud se neurazí, mohu jej doporučit.

Náš další krok je dopočítat minimax zdvihů a poté i par závazků. To zrealizujeme v Dealu:

deal -I "line 64cizi1uprb.ddl" -i format/ddline 64 >64cizi2.ddl

Výpočet pár minut zabere. V souboru 64cizi2.ddl [] získáme všechny potřebné údaje na dopočet paru.

Abychom mohli tato rozdání srovnávat, pseudonáhodně si vygenerujeme další sadu 64 rozdání, rovnou s minimaxem zdvihů. Když je Deal po ruce, využijeme jej:

deal -s 0 -i format/ddline 64 >64mych2.ddl

Parametr -s použijeme proto, abychom mohli získat ta samá rozdání při opětovném generování. Výpočet opět pár minut zabere. Získáváme soubor 64mych2.ddl [].

Nyní máme k ruce sady i minimaxy zdvihů, chceme si nechat dopočítat par rozdání. To bude pro nás již rutina:

deal -I "ddline 64cizi2.ddl" -i format/par 64 >64cizi4.pbn
deal -I "ddline 64mych2.ddl" -i format/par 64 >64mych4.pbn

PBN soubory 64cizi4.pbn [] a 64mych4.pbn [] obsahují všechny důležité informace (jen BFC nám vnutil své datum 1. ledna 1965, ale to je detail, to se dá globálně nahradit, např. přes Linuxový Sed [man]) a můžeme si zobrazit kontrolní náhled v programu Double Dummy Solver [odkaz]:



Náhled na první gulášové rozdání po zamíchání řádků.
Zamíchali jsme i s rozhraním DDS a vidíme německou verzi.


Guláš servírujeme na karetní stůl na hradě BBO

Abychom si taková rozdání (pálivá gulášová nebo ta normální neokořeněná) mohli přehrát se svými bridžovými přáteli nebo v rámci turnaje, musíme je naimportovat, např. na BBO. Tento úkon dobře znají pořadatelé a organizátoři turnajů a řada rozhodčích.

K tomuto dalšímu kroku nám chybí už jen LIN soubory, neb na BBO se PBN soubory nedají naimportovat. Využijeme Pavlickův BFC a soubory si vhodně přejmenujeme.

bfc 64cizi4.pbn l
mv OUT.LIN 64cizi5.lin
bfc 64mych4.pbn l
mv OUT.LIN 64mych5.lin

Poněvadž firma BBO dále nepodporuje vývoj Windows verze, ukážeme si postup v relativně nové webové verzi. Spustíme si klienta [odkaz] a přihlásíme se pod svým účtem.

Z menu si naklikneme „Moje BBO“, dále „Rozdání a výsledky“. Vytvoříme si novou složku a nazveme ji „Guláš“, potvrdíme tlačítkem „Nová složka“.

Naklikneme si „Importovat soubor LIN“, vybereme „Guláš“ a potvrdíme ikonkou „Vybrat“. Dáváme „Procházet...“ a doklikáme si na počítači právě vzniklý soubor 64cizi5.lin [] (to jsou ta pálivá gulášová) a soubor 64mych5.lin [] (to jsou ta nepálivá, běžná/standardní rozdání). Po nakliknutí LIN souboru dáváme „Otevřít“. Dále dáme „Import“. Kdybychom chtěli přihodit další rozdání, kroky od „Procházet“ až po „Import“ opakujeme.

Zavřeme okno křížkem vpravo nahoře. V řádku „Guláš“ si naklikneme „Ukázat“. Vidíme tam 64 (pokud jsme importovali jen jeden LIN soubor), případně 128 rozdání (pokud jsme naimportovali i druhý LIN soubor, to jsme udělali). Dáváme „Zavřít“.

Vyzkoušíme si rozdání. Z hlavní nabídky dáváme „Založit stůl“, „Stůl pro výuku“, zaškrtáváme volbu „Neviditelný“, potvrdíme „Založit stůl“. Volíme „Definice rozdání“, záložku „Použít uložená rozdání“ a z řádku „Guláš“ volíme „Vybrat“. Opustíme nabídku tlačítkem „Zavřít“. Poslední krok je nakliknutí volby „Rozdat“.

Při opětovné volbě „Rozdat“ se dostáváme k dalším rozdáním ze sady. Jsou tam dvě sady o 64 rozdáních číslované od 1 do 64. Kdybychom potřebovali číslování od 1 do 128, tak si soubory 64cizi2.ddl64mych2.ddl spojíme (např. přes Linuxový program Cat [man]), vygenerujeme z něj PBN (Andrewsův Deal) a následně LIN (Pavlickův BFC), jak již bylo ukázáno.



První gulášové rozdání ze sady viděno přes BBO.


Pohled statistický

Ačkoliv tušíme, co se pod gulášovými rozdáními skrývá, určitě si to chceme trochu ověřit. Tedy náš úkol bude ony dvě sady 64 rozdání jemně srovnat.

Abychom se nemuseli příliš mořit s parsování PBN nebo LIN souboru, tak jsme si připravili vlastní formát pro program Deal úpravou souboru format/parArticle na format/parArticleMuj [], především komentováním (přidáváním mřížky na začátek řádků), tím jsme si vypsali jen klíčové údaje. Spustíme si tyto dva řádky (jsou-li vidět čtyři řádky, tak dva a dva řádky patří vždy do jednoho):

deal -I "ddline 64cizi2.ddl" -i format/parArticleMuj 64 >64cizi3zpracuj.txt
deal -I "ddline 64mych2.ddl" -i format/parArticleMuj 64 >64mych3zpracuj.txt

Soubory 64cizi3zpracuj.txt [] a 64mych3zpracuj.txt [] obsahují informace v tomto složení:

Contract: 4 hearts doubled by West
N/S score: 300
Contract: 5 notrump doubled by West
N/S score: 100
[...]

Pokud rozdání obsahuje více par závazků, zde je použit nejnižší možný a dostupný závazek, to je v podstatě zavedený standard.

Na drobnou analýzu jsme si vytvořili pomůcku v programovacím jazyce Python zpracuj.py [], která tyto dva textové soubory zpracuje. Zdrojový kód se spustí následujícím způsobem:

python zpracuj.py

resp. s výpisem do textového souboru 64.txt []:
python zpracuj.py >64.txt

Výpis obsahuje tři části:

Z těch hrubých údajů jsme si připravili nějaké ty výstupní tabulky, které rádi srovnáme a okomentujeme. Bylo by samozřejmě možné zvednout 64 rozdání na libovolný vyšší počet, ale to by závěry už jen drobně upřesňovalo, nijak však už razantně. Pro naše výpočty dělané na koleně a udělání si přehledu 64 rozdání byl naprosto dostačující počet.

Základní ukazatele


Ukazatele za 64 standardních rozdání.
 Deal (mých)   Linka NS   Linka EW 
 Závazků3133
 Bodů721011810
 Průměr bodů232,58357,88
 Průměr bodů celkem297,19
 Úroveň3,773,91
 Průměr úroveň3,84
 Průtok (abs)1321015410
 Průměr průtok 426,13466,97
 Průměr průtok celkem 447,19

Ukazatele za 64 gulášových rozdání.
 playBridge (cizí)   Linka NS   Linka EW 
 Závazků2737
 Bodů1390720
 Průměr bodů51,4819,46
 Průměr bodů celkem32,97
 Úroveň5,265,70
 Průměr úroveň5,52
 Průtok (abs)1319023920
 Průměr průtok 488,52646,49
 Průměr průtok celkem 579,84

Z počtu závazků (řádky první) vidíme, že gulášová rozdání nejsou tak rovnoměrně rozložena mezi linky. Ono je jedno, jak přeházíme ve vstupním souboru řádky, tento ukazatel se nezmění. Zasloužilo by si to kontrolu a případně rotaci rozdání o 90 nebo 270 stupňů, aby závazky byly rovnoměrně rozděleny mezi linky i mezi jednotlivé hráče.

Z řádků druhých až čtvrtých můžeme říci, že gulášová rozdání jsou bodově těsněji k nule. Je tedy hodně závazků s velkým počtem bodů, ale také řada závazků s mnoha pády.

Pro hráče je velmi důležitý ukazatel průměrná hraná úroveň (bez rozlišení, jestli získáme kladné nebo záporné body). U linky NS je to 5,26-3,77=1,49 úrovně, u linky EW je to 5,70-3,91=1,79 úrovně. Průměrně za všechna rozdání vychází rozdíl 5,52-3,84=1,68 úrovně. To si můžeme představit tak, že hrajeme-li standardně první úroveň, můžeme u guláše pomalu pomýšlet na 3, hraje-li se druhá a třetí úroveň, můžeme u guláše téměř jistě počítat s celoherním závazkem a běžný celoherní závazek téměř vždy znamená slemovou zónu.

Ve hrách se objevuje řada obětování, proto jsme si spočítali, humorně řečeno, tzv. průtok bodů (sečtené body v absolutní hodnotě) a udělali jsme průměry. Zde můžeme vysledovat jasný nárůst bodů vůči standardním rozdáním. Je to doloženo na posledních třech řádcích tabulek.

Počty závazků rozlišené dle úrovně

Stálo by za pozornost si podrobněji znázornit počty závazků.

Standardních 64 rozdání.
 Linka 01234567 Počet  Průměr 
 NS+01268211213,71
 NS-0240211103,90
 EW+1577132263,73
 EW-002130174,57
 Počet  0  2  9 1916 8  5  5 643,84

Gulášových 64 rozdání.
 Linka 01234567 Počet  Průměr 
 NS+00013340114,91
 NS-0014164165,50
 EW+0114134145,14
 EW-00025610236,04
 Počet  0  0  1  3 13101918645,52

NS a EW značí příslušnou linku, plus znamená sehrávku závazku s kladným počtem bodů, mínus pak obětování a záporný počet bodů (v paru je vždy takový závazek kontrován). U gulášových rozdání vidíme, že první tři úrovně tvoří žádný či jen nepatrný zlomek, (1+3)/64*100=6,25 %, ovšem u standardních rozdání to tvoří řádově polovinu, (2+9+19)/64*100=46,875 %. Také počet závazků ve slemové zóně je výrazně vyšší, z 10 (5+5) na 37 (19+18).

Pokud by někoho zajímaly počty pro jednotlivé linky a pro body kladné a záporné (sčítáme příslušné buňky u dvou řádků), uvádíme údaje v následujících tabulkách.

Standardní rozdání, rozlišení dle linek.
 Linka 01234567 Počet  Průměr 
 NS014108422313,77
 EW1598433333,91
 Počet  0  2  9 1916 8  5  5 643,84

Gulášová rozdání, rozlišení dle linek.
 Linka 01234567 Počet  Průměr 
 NS000274104275,26
 EW01166914375,70
 Počet  0  0  1  3 13101918645,52

A poslední dvě tabulky jsou rozlišeny dle znaménka bodů paru. Jinými slovy, kolik je uhratelných závazků a kolik je obětovaných závazků s plánovanými pády.

Standardní rozdání, rozlišení dle znaménka bodů paru.
 Linky 01234567 Počet  Průměr 
 Plus0271315343473,72
 Mínus0261512174,18
 Počet  0  2  9 1916 8  5  5 643,84

Gulášová rozdání, rozlišení dle znaménka bodů paru.
 Linky 01234567 Počet  Průměr 
 Plus00127474255,04
 Mínus001661214395,82
 Počet  0  0  1  3 13101918645,52

Jen připomeneme, že nultá úroveň je situace, kdy je par=0 bodů. Ani v jednom případě ze zmíněných 128 rozdání jsme takové rozdání neměli.

Počty závazků rozlišené dle druhu závazku

Pro hráče může být zajímavá i informace kolik kterých druhů závazků se hrálo. Mezi druhy budeme počítat:

Tohle byly situace, kdy je závazek uhratelný. Pokud je závazek plánován s pády, je dělení identické, jen body odpovídají přílušnému počtu pádů. Za zajímavost můžeme zmínit, že dle počtu bodů par závazku nemůžeme jednoznačně určit, který závazek se hraje. Body pádů jsou sice dělitelné stovkou, ale víc se nedozvíme. Můžeme ve velkém slemu spadnout jedenkrát, u celoherního závazku třeba dvakrát.

Můžeme tedy alespoň shrnout počty pádů vůči uhratelným závazkům:

Dokonce nemůžeme jednoznačně určit ani druh uhratelného závazku, je to díky hodnotě 1440. To totiž může být malý beztrumfový slem v druhé hře, ale též velký slem v jedné z levných barev ve hře první. Dále nejsme sto rozlišit, ve které barvě je závazek hrán, zdali trefy či kára, zdali srdce či piky, a také, zdali 3=, 5= nebo 5=. Další třída problému by byla rozlišit např. 1+3, 2+2, 3+1 a 4=. Takových situací najdeme celou řadu.

Je to taková programátorská lahůdka, spíš oříšek. Abychom tedy jednoznačně určili druh závazku, musíme znát závazek (úroveň, trumfy, hlavního hráče, případně alespoň linku) i počet bodů (případně alespoň počet zdvihů paru a hru). Jestli je závazek kontrován či nikoliv se dá zjistit z počtu zdvihů paru a hrané úrovně, pád závazku je soupeři automaticky kontrován.

V následujících tabulkách se plusové a mínusové body vztahují vždy k příslušné lince (NS nebo EW). Zmiňujeme to proto, že je častějším zvykem ve výsledcích a výpisech rozdání vše převádět na body ve vztahu k lince NS.

Standardních 64 rozdání.
 Linka   Pasováno   Závazek   Slem   Počet 
 částečný  celoherní   malý  velký 
 NS+04151121
 NS-621110
 EW+7143226
 EW-33017
 Počet  0 2034 5  5 64

Gulášových 64 rozdání.
 Linka   Pasováno   Závazek   Slem   Počet 
 částečný  celoherní   malý  velký 
 NS+0164011
 NS-336416
 EW+163414
 EW-0761023
 Počet  0  5 22191864

Opět si můžeme vypsat mezisoučty za jednotlivé linky.

Standardní rozdání, rozlišení dle linek.
 Linka   Pasováno   Závazek   Slem   Počet 
 částečný  celoherní   malý  velký 
 NS010172231
 EW10173333
 Počet  0 2034 5  5 64

Gulášová rozdání, rozlišení dle linek.
 Linka   Pasováno   Závazek   Slem   Počet 
 částečný  celoherní   malý  velký 
 NS04910427
 EW11391437
 Počet  0  5 22191864

A na závěr i mezisoučty dle znaménka paru závazků.

Standardní rozdání, rozlišení dle znaménka bodů paru.
 Linky   Pasováno   Závazek   Slem   Počet 
 částečný  celoherní   malý  velký 
 Plus011294347
 Mínus951217
 Počet  0 2034 5  5 64

Gulášová rozdání, rozlišení dle znaménka bodů paru.
 Linky   Pasováno   Závazek   Slem   Počet 
 částečný  celoherní   malý  velký 
 Plus02127425
 Mínus310121439
 Počet  0  5 22191864

Taková rychlá pomůcka je, že částečných závazků je 40 % rozdání, celoherních závazků 50 % a slemů přibližně 10 % rozdání.

U standardních rozdání máme tento poměr 20/64*100=31,25 procent versus 34/64*100=53,125 % versus (5+5)/64*100=15,625 %, což řádově odpovídá naší rychlé nápovědě. Na upřesnění zrovna tohoto závěru bychom těch rozdání potřebovali víc. O tom snad jindy.

U gulášových rozdání to vychází výrazně jinak: 5/64*100=7,8125 procent versus 22/64*100=34,375 % versus (19+18)/64*100=57,8125 %.

Pokud se tedy chystáme na gulášová klání, resp. obecně libovolný turnaj s předpřipravenými rozdáními, takovou zběžnou analýzu dříve odehraných rozdání není k zahození si připravit a získat tak alespoň rámcový přehled toho, do čeho se vrháme, v návaznosti na tom vypilovat licitaci ve slemové zóně, konkurenční licitaci a podobně.

Tímto způsobem můžeme navařit libovolnou kvalitu i kvantitu rozdání.

Dobrou chuť gurmánům i gurmetům!


Zde jsou k dispozici všechny pracovní soubory v jednom RARu [].
Zpět do domečku...