Verantwoording scripts en downloads

Op deze pagina staan de scripts: omschrijvingen en downloads. De downloads staan opgeslagen als .txt maar moeten gerenamed worden naar .py voor uitvoering.

Omschrijving Download

Twee runs op dezelfde biedconstraints — wanneer is passen objectief het best?

Dit script onderzoekt een specifieke biedsituatie waarin Zuid een vaste 22-puntershand heeft (precies gespecificeerd: ♠32 ♥KJ2 ♦AKQT ♣AKQT), en West en Oost hebben geboden. De vraag is: hoe vaak kan NZ, ondanks die 22 punten bij Zuid, nergens een makend contract spelen — zodat passen objectief de beste keuze is?

De constraints zijn wat Zuid uit het bieden kan afleiden. West opent 1♥ en heeft dus 5+ harten, voldoet aan de regel van 20 en heeft minstens 11 HCP. Oost biedt 1♠ en heeft 6+ HCP, 4+ schoppen en 0-2 harten. Zuid heeft de vaste 22-puntershand, en Noord krijgt de resterende kaarten zonder verdere eisen. Per gegenereerd spel wordt gecontroleerd of West en Oost aan hun constraints voldoen; pas dan telt het spel mee.

Voor elk geldig spel wordt de double-dummy-tabel berekend. "NZ kan nergens iets" wordt streng gedefinieerd: NZ haalt in geen enkele kleur 10 slagen (geen makende manche of hoge deelscore in een fit) én in SA nergens 9 slagen. Pas dan geldt passen als objectief best.

Run A doet dit over de volledige populatie (2000 spellen) en rapporteert in welk percentage van de gevallen passen objectief het best is — dus hoe vaak die 22 punten bij Zuid letterlijk nergens heen kunnen.

Run B zoekt ter illustratie "waterdichte haakspellen": spellen waarin OW wél een manche maakt (10+ slagen in harten of schoppen) én NZ tegelijk nergens iets kan. Bij die spellen wordt het hele spel geprint, inclusief de DD-tabel en het par-contract, zodat je ze als voorbeeld in de les kunt gebruiken.

proloogspel_controle_les1.txt

De selectie van Voppe uit zijn database met spellen die voldoen aan de eisen van het spel uit de proloog. Van de 25 spellen die aan de criteria voldeden blijken NZ slechts in 3 gevallen een DD manche te hebben (en zelfs dan kunnen EW altijd een hogere manche maken) en OW 14, hetgeen bevestigd dat je moet passen om EW niet in de manche te praten.

Kees22hcp.pdf

De controle van Culbertson's regel van 8.

Wat dit specifieke script doet is de regel van 8 controleren op waarheid. De regel zegt dat ca. 8 slagen worden gemaakt door tophonneurs (AHV) en 5 door lagere kaarten. Van 2100 willekeurige spellen is per spel het beste contract bepaald. "Beste" betekent hier: het contract dat double-dummy de meeste slagen oplevert, ongeacht welke partij speelt. Dat kan dus NZ of OW zijn.

Elk spel wordt twee keer uitgespeeld: één keer in het beste SA-contract en één keer in het beste troefcontract (in de beste fit). Belangrijk detail: de beste SA-leider en de beste troefleider worden onafhankelijk van elkaar gekozen en hoeven niet tot dezelfde partij te behoren.

Vervolgens is per slag gekeken of die gewonnen wordt door een honneur, door een kleintje (lengte) of door een introef. Die slagen kunnen door NZ of OW gemaakt zijn, maar in de getotaliseerde tabellen tellen we beide partijen bij elkaar op. De getotaliseerde tabellen zijn de tabellen die over alle 13 slagen gaan, ongeacht wie ze wint.

Je kan dezelfde slagen ook uitsplitsen vanuit het gezichtspunt van de leider. Dan zie je het verschil tussen het uitspelen van het beste SA-contract en het beste troefcontract. Tussen troef en SA bestaat gemiddeld 1,93 slag verschil. Wat hier dus vergeleken wordt is het beste SA-contract tegen het beste troefcontract.

Dit is nadrukkelijk geen par-analyse. Het par-contract zou ook een double-dummy succesvolle uitnemer meewegen, en dat gebeurt hier niet — de tegenpartij verdedigt wel optimaal, maar er wordt niet apart gekeken of een opoffering goedkoper zou zijn dan het contract laten maken. Ook wordt er nergens naar punten gekeken: de declarant wordt puur op double-dummy-slagen gekozen, niet op de partij met de meeste honneurpunten.

regel_van_8.txt

Bijlage A: Methodologische verantwoording troef-vs-SA-meting

Het troefvoordeel empirisch gemeten — hoeveel slagen levert een fit op?

Dit script meet hoeveel slagen spelen in een troefkleur gemiddeld méér oplevert dan spelen in SA, gegeven dat NZ een fit van 8+ kaarten heeft. Het is daarmee de tegenhanger van de regel-van-8-analyse: niet de vraag wie de slagen wint, maar de vraag wat een fit waard is.

Per spel wordt eerst gefilterd. NZ moet samen minstens 20 HCP hebben (instelbaar) om realistisch te kunnen spelen, én minstens één fit van 8+ kaarten hebben. Spellen die daar niet aan voldoen, vallen af. Bij de overgebleven spellen wordt de langste fit als troefkleur gekozen (bij gelijke lengte willekeurig).

Voor elk geldig spel wordt de DD-tabel berekend en het verschil bepaald tussen het aantal slagen in troef en in SA. Om de meting zuiver te houden wordt steeds het gemiddelde van Noord én Zuid als leider genomen, zodat het resultaat niet afhangt van wie toevallig de gunstigste declarant is.

De uitvoer aggregeert dit op verschillende manieren: het totaalgemiddelde, mediaan, standaarddeviatie en percentielen (P10 t/m P90), een ASCII-histogram van het verschil, en twee uitsplitsingen — naar fitlengte (8, 9, 10, 11+ kaarten) en naar NS-puntenband (20-22, 23-25, enzovoort). Zo zie je niet alleen dát troef gemiddeld meer oplevert, maar ook hoe dat voordeel groeit met de fitlengte en varieert met de kracht van de partij.

Het script draait parallel via multiprocessing, met instelbaar aantal spellen, workers en de minimale NS-puntendrempel als commandoregel-argumenten.

trump_vs_nt_advantage.txt

Bijlage G Empirische toets van de Shell-regel

De Shell-regel empirisch getoetst — hoeveel werkende HCP heb je nodig voor de manche?

Dit script toetst de kernregel uit het boek: hoeveel werkende HCP zijn er nodig voor een manche (10 slagen), afhankelijk van de Shell-grootte? De voorspelling is dat een kleinere Shell — waarin meer zijkleuren zijn uitgeschakeld — met minder werkende punten toe kan, omdat de overgebleven kracht geconcentreerder werkt. Concreet: Shell 40 vraagt ~25 werkende HCP, Shell 30 ~19, Shell 20 ~13.

Per spel wordt gefilterd op NZ met minstens totaal 20 HCP (instelbaar) en minstens één 8+-fit; de langste fit wordt troefkleur. Vervolgens wordt voor elke zijkleur bepaald of die is uitgeschakeld, en dat gebeurt bewust volgens twee definities tegelijk, zodat ze direct vergelijkbaar zijn: streng (uitgeschakeld zodra N óf S daar een singleton of renonce heeft) en soepel (uitgeschakeld al vanaf een doubleton). De werkende HCP telt alle HCP in actieve kleuren, plus 4 per aas in een uitgeschakelde kleur — azen blijven dus altijd meetellen, ook in een dode kleur.

Voor elk spel worden de DD-slagen in de troefkleur berekend, gemiddeld over Noord en Zuid als leider. De uitvoer aggregeert die slagen per Shell-grootte, en binnen elke Shell per werkende-HCP-waarde, voor beide definities apart. In de tabellen wordt automatisch de regel gemarkeerd waar het gemiddelde rond de 10 slagen ligt (de manche-drempel) en waar het rond de 12 ligt (slem). Daar lees je dus rechtstreeks de empirische drempel af die je tegen de voorspelling kunt leggen. Daarnaast toont het script de verdeling van alle spellen over de Shell-groottes, opnieuw streng versus soepel naast elkaar.

Het script draait parallel via multiprocessing, met instelbaar aantal spellen (standaard 50.000), workers en de minimale NS-puntendrempel.

Shell_rule_test.txt

Bijlage H De Moysiaanse fit test

Het Moysiaanse-fit-effect bij misfit-spellen — is troef ook zonder fit beter dan SA?

Dit script onderzoekt een lastige vraag: als NZ géén normale fit heeft en beide handen kort zitten, is het dan tóch beter om in een korte troefkleur te spelen dan in SA? Het is daarmee de pendant van het troefvoordeel-script, maar dan voor het tegenovergestelde geval — niet de mooie 8+-fit, maar de echte misfit.

Er wordt streng gefilterd. Een spel telt alleen mee als beide handen een singleton of renonce hebben (zonder kortheid aan beide kanten loopt het bieden vanzelf naar SA), als NZ nergens een 8+-fit heeft, én als de totaaldistributie 7-7-6-6 of 7-7-7-5 is. Dat zijn de scherpe misfit-patronen waarin de vraag interessant wordt.

Voor elk gekwalificeerd spel worden vier speelsoorten vergeleken op DD-slagen (gemiddeld over Noord en Zuid als leider): SA, de beste Moysiaanse 4-3 fit, de beste 5-2 fit, en de beste lange-kant-fit (6-1 of 7-0). De 5-2 fit krijgt bewust aparte aandacht, omdat die vaak ongemerkt ontstaat in een natuurlijk biedverloop als 1♠-1SA-2♣-2♠, zonder dat de speler bewust voor troef of SA kiest. Per spel wordt vastgelegd welke speelsoort wint en met hoeveel slagen verschil ten opzichte van SA.

De uitvoer is rijk gelaagd. Per totaaldistributie en per handpatroon-combinatie (N en S symmetrisch behandeld) zie je de gemiddelde slagen per speelsoort, hoe vaak elke soort van SA wint, en de verdeling van de winnende speelsoort. Patroon-combinaties met minder dan 20 spellen worden alleen geteld, niet apart geaggregeerd, om ruis te vermijden.

Daarnaast bouwt het script een Shell-tabel voor deze misfit-populatie, met de strenge Shell-definitie: een kleur is uitgeschakeld als N óf S daar 0-1 kaarten heeft, de Shell-grootte is 40 − 10 per uitgeschakelde zijkleur, en de werkende HCP telt alle HCP in actieve kleuren plus alle azen (ook in dode kleuren). Per (Shell-grootte, werkende HCP) wordt de gemiddelde SA-slag, de beste speelsoort en het percentage waarin troef wint getoond, met een expliciete vergelijking tegen de drempels uit Bijlage G van het boek.

Het script draait parallel via multiprocessing, met instelbaar aantal spellen en workers; de standaard is 500.000 spellen.

moysiaanse_fit_test_v2.txt

Bijlage K De resultaten van Shell_volledig.py

De Shell-meting in volle breedte — werkende HCP versus totaal HCP als voorspeller

Dit is de uitgebreide, filtervrije versie van de Shell-toets (vgl. Bijlage G). Waar het vorige script alleen NZ met minstens 20 HCP bekeek, meet dit script álle spellen zonder enige HCP-restrictie, en bovendien beide partnerships per spel: zowel NZ als OW worden geanalyseerd, elk in hun eigen beste fit. Daardoor levert elke deal twee partnership-observaties op, en wordt het hele spectrum van zwakke tot sterke handen meegenomen.

Per partnership wordt de langste fit als troefkleur gekozen (bij gelijke lengte willekeurig), waarbij ook fits van 7 of minder meedoen — de misfit-spellen blijven herkenbaar via de kolom fitlen. Vervolgens worden Shell-grootte en werkende HCP bepaald volgens de strenge definitie (zijkleur uitgeschakeld zodra één partner daar een singleton of renonce heeft; doubletons tellen niet), en de DD-slagen in de eigen beste fit gemeten, gemiddeld over beide partners als leider.

De kernvraag van dit script is niet alleen "wat is de manche-drempel per Shell", maar vooral: voorspelt werkende HCP de slagen beter dan gewoon totaal HCP? Daarom rapporteert het naast de gebruikelijke tabellen (verdeling van Shell-groottes, en per Shell de werkende HCP tegen gemiddelde slagen) ook de voorspelkracht: voor diverse groepen wordt voor werkende HCP én totaal HCP naast elkaar getoond. Zo zie je direct of de werkende-punten-correctie daadwerkelijk verklaringskracht toevoegt.

Shell_volledig.txt

Het eerste script van Bijlage L - Ligging_analyse.py

Liggingsanalyse — hoeveel van de slagen kun je tijdens het bieden niet kennen?

Dit script beantwoordt een vraag die direct raakt aan de kern van kaartwaardering: een double-dummy-solver "weet" waar alle kaarten zitten en laat elke snit, dwang en ingooi slagen. Maar tijdens het bieden ken je de ligging van de tegenkaarten niet. Hoeveel van de slagen die de leider DD maakt, leunen dus op een ligging die je op het moment van waarderen onmogelijk kunt voorzien?

De methode is contrafeitelijk. Per spel wordt eerst het beste NZ-contract (kleur én leider) uit de DD-tabel gekozen. Vervolgens worden de NZ-handen vastgehouden en de 26 OW-kaarten K keer willekeurig herverdeeld. Dat willekeurig herdelen is precies de truc: het weegt elke mogelijke ligging met haar a-priori-kans, alsof je tijdens het bieden over alle denkbare zittingen middelt. Voor hetzelfde contract worden bij elke herverdeling opnieuw de DD-slagen berekend.

Daaruit volgen per spel vier grootheden. De DD-werkelijke slagen op de echte ligging (waar de solver elke snit raak laat vallen). De verwachting, het gemiddelde over alle herverdelingen — dat is de eerlijke, biedbare schatting. De bodem (P10), wat je ongeveer gegarandeerd haalt bij een slechte ligging. En het verschil verwachting − bodem: de liggingsafhankelijke zone, de slagen die echt van snit, dwang of ingooi afhangen. Dat verschil wordt ook als percentage van de verwachting uitgedrukt.

Er zit een elegante controle in: als het goed is ligt de DD-werkelijke uitkomst dicht bij de verwachting. Het echte spel is immers één eerlijke trekking uit de verdeling van liggingen, geen bevoorrechte geluksligging — als die twee ver uiteen lagen, zou er iets mis zijn met de aanname.

Twee verdiepingen sluiten het rapport af. Voor de manches (DD maakt 10+ op de echte ligging) wordt gemeten hoe vaak ze óók over willekeurige liggingen blijven maken, met een uitsplitsing naar robuuste manches (90%+ maakt) en "manches op snit" (minder dan 60% maakt) — een directe maat voor hoeveel van je manches eigenlijk gokwerk zijn. En een histogram toont de verdeling van de liggingsafhankelijke slagen per spel in halve-slag-bins.

ligging_analyse.txt

Het tweede script van Bijlage L dat de Figuren maakt - Ligging_figuur12.py

De collapse-figuur — vallen de Shell-groottes samen op een genormaliseerde as?

Dit is een nabewerkings- en visualisatiescript: het rekent zelf geen spellen door, maar leest een CSV met per-spel-resultaten (ligging_perspel.csv) en zoekt naar het patroon achter de Shell-regel. De centrale vraag is of de manche-drempel, uitgedrukt als fractie van de Shell-grootte, voor verschillende Shells op hetzelfde punt valt — de "collapse" die de Shell-regel zou rechtvaardigen.

Het werkt alleen met de manches (geen SA, en DD maakt 10+ op de echte ligging) en kijkt naar de maakkans over willekeurige liggingen — precies de robuustheidsmaat uit het liggingsanalyse-script. Drie analyses volgen op elkaar.

Eerst een tabel die de manche-op-snit uitsplitst naar werkende punten als fractie van de Shell-grootte. Per Shell zie je per fractieband de maakkans, het percentage "op snit" en het percentage "robuust", plus hoe vaak de fractie boven de 100% uitkomt (de "lek").

Dit "lek" wordt veroorzaakt door directe slagen tegenover kortheid. Een Aas tegenover een renonce, een AH-combinatie (of meer) tegenover een singleton. In feite zijn deze "lek"-punten (naast werkende en verspilde punten) een derde categorie. Ik heb nog geen regel gevonden om deze lekpunten in de Shelltheorie te verwerken.

Daarna het consolidatiepunt: via een gladgestreken venster (window-n, zodat dunne data zichtbaar blijft) wordt per Shell bepaald bij hoeveel werkende punten de maakkans de 80% passeert, en welk percentage van de Shell-grootte dat is. Dunne of lekkende vensters worden expliciet als onbetrouwbaar gemarkeerd.

Ten slotte de figuur zelf (ligging_collapse.png): links de absolute curve (maakkans versus werkende punten), rechts de genormaliseerde versie (werkende punten ÷ Shell-grootte). Als de Shells op de rechter as samenvallen, is dat de visuele bevestiging van de collapse.

De bevinding die het script in zijn koptekst en titels vastlegt: Shell-30 en Shell-40 vallen samen rond ~70% van de Shell-grootte en gedragen zich als één regime, terwijl Shell-20 een eigen verhaal is. Bij twee uitgeschakelde zijkleuren tellen de azen in de korte kleuren wel als werkend, maar laten ze de Shell niet groeien — daardoor lekt de fractie boven 100%, en de robuustheid komt daar vooral uit ruffs, die juist liggings-ónafhankelijk zijn. Daarom worden Shell-30 en -40 als de "schone" regimes behandeld (doorgetrokken lijnen) en Shell-20 visueel apart gezet (streepjes, kruisjes, transparanter).

ligging_figuur12_12IAJKM.txt

Het script dat de In-and-out valuation bekrachtigd

Rubens' in-and-out valuation getoetst — maakt de plaatsing van honneurs verschil?

Dit script toetst een klassieke claim van Jeff Rubens: bij een schoppenfit is een hand met de secundaire honneurs ín de troefkleur en de primaire honneurs erbuiten sterker dan andersom, bij gelijke HCP. Het is de microscopische, gecontroleerde variant van het "zelfde punten, andere plaatsing"-idee dat centraal staat in Deel II van het boek — niet hele handen die verschillen, maar precies één aas en één lagere honneur die van plek wisselen tussen de troefkleur en een zijkleur.

Er worden twee paren getest. In Paar 1 (9 HCP) wisselen variant a (♠HV ♥A) en variant b (♠AH ♥V); in Paar 2 (7 HCP) variant c (♠H ♥A) en variant d (♠A ♥H). Binnen elk paar zijn de vorm (3-3-3-4) en de HCP identiek; alleen de plaatsing van aas en lagere honneur verschilt. De varianten waar de hoge honneurs juist buiten en de lagere binnen zitten, zijn volgens Rubens de "goede" in-and-out-handen.

De methode is Monte-Carlo. Zuid (responder) krijgt de testhand met vaste honneurs en willekeurige lage spotcards; Noord krijgt een 1♠-achtige opening (5+ schoppen, 11-19 HCP); OW krijgt de rest. Per spel berekent de DDS-engine het aantal schoppenslagen voor NZ, genomen als het maximum van Noord of Zuid als leider. Over veel spellen worden de gemiddelden van de twee varianten binnen een paar vergeleken, inclusief standaardfout, z-waarde en het percentage spellen waarin 4♠ (10 slagen) gehaald wordt.

In_and_out_v2-1.txt

Het Grosvenor gambiet

Een leuk verhaal met een psychologische boodschap. Een speler past bewust een slechte speelwijze toe die een slag kost. De tegenpartij denkt dat het anders dan dat het zit en geeft op grond van die veronderstelling de slag weer terug. Het voordeel zit in de geschapen verwarring bij de tegenpartij.

Het_Grosvenor_Gambiet_V10.pdf

Cryptoconventions (Jan Peter Pals)

Nog een leuk verhaal. Cryptoconventies vallen in dezelfde categorie als sluiersignalen en bruine stickerconventies.

Cryptoconventions.pdf

Verantwoording van de simulatiemethode

Gemeenschappelijke bijlage bij de empirische hoofdstukken van De Shell. Hier wordt één keer beschreven wat onder alle simulaties ligt; de losse scripten verwijzen hiernaar in plaats van het telkens te herhalen.

Waar dit over gaat

De empirische beweringen in dit boek leunen op een reeks Python-simulaties. Elk script beantwoordt een eigen vraag — wat is een fit waard, klopt de regel van 8, hoeveel werkende punten heeft een manche nodig, hoeveel slagen zijn liggingsafhankelijk — maar ze delen een fundament. Die gedeelde keuzes staan hier bij elkaar, zodat ze controleerbaar zijn en niet per script opnieuw uitgelegd hoeven te worden.

De betrokken scripten zijn: regel_van_8.py, trump_vs_nt_advantage.py, moysiaanse_fit_test.py, shell_rule_test.py, shell_volledig.py, ligging_analyse.py, ligging_figuur2.py en in_and_out.py.

De double-dummy-maatstaf

Overal waar over "slagen" wordt gesproken, gaat het om double-dummy-slagen, berekend met Bo Haglunds DDS-engine via de Python-bibliotheek endplay. Een double-dummy-oplosser kent de ligging van alle 52 kaarten en speelt elke hand foutloos: elke snit die zit wordt geïnd, elke dwang en ingooi wordt gevonden.

Dat is tegelijk de kracht en de beperking van de methode. De kracht: de uitkomst is objectief en exact reproduceerbaar — geen menselijke speelfouten, geen aannames over biedsysteem of tegenspel. De beperking: een echte speler kent de ligging tijdens het waarderen niet en kan dus niet elke snit op voorhand inboeken. Double-dummy overschat daarom systematisch wat je op het moment van bieden mag verwachten. Hoe groot die overschatting is, wordt niet weggepoetst maar juist gemeten: dat is precies wat ligging_analyse.py doet, door de tegenkaarten vele malen te herverdelen en het gemiddelde over alle liggingen te vergelijken met de werkelijke ligging. Waar in dit boek een double-dummy-getal staat, mag het dus gelezen worden als een bovengrens op wat biedbaar is, niet als de praktijkverwachting.

Spelgeneratie en reproduceerbaarheid

De spellen komen uit de dealer van endplay (generate_deal / generate_deals). Twee manieren van seeden komen voor, en het verschil is bewust.

De meeste scripten seeden per spel met het volgnummer van dat spel (random.seed(i) vóór het genereren van spel i). Dat heeft een prettige eigenschap: spel i is altijd hetzelfde, ongeacht hoeveel parallelle workers je gebruikt. De uitkomst van een run hangt dus niet af van het aantal processorkernen.

shell_volledig.py doet het netter en geeft elke worker een eigen random. Random-instantie met een eigen basis-seed. Dat is de aanpak die de voorkeur verdient wanneer reproduceerbaarheid en parallellisme allebei nodig zijn. Wie de simulaties zelf wil herhalen: met dezelfde seeds vallen de getallen exact gelijk uit; zonder opgegeven seed kiest shell_volledig.py een willekeurige basis, zodat twee runs van elkaar verschillen.

HCP-berekening

Honneurpunten worden geteld volgens de gangbare schaal A=4, H=3, V=2, B=1. De scripten proberen eerst endplay.evaluate.hcp en vallen alleen terug op het tellen van honneurletters in de kaartrepresentatie als die functie in de gebruikte versie van endplay ontbreekt. Beide leveren hetzelfde getal; de fallback bestaat puur voor versie-onafhankelijkheid.

De Shell-begrippen

Drie begrippen keren in alle Shell-scripten terug en worden hier eenmalig canoniek vastgelegd.

Een uitgeschakelde zijkleur is een zijkleur (dus niet de troefkleur) waarin het partnership 5 of minder kaarten heeft. In de strenge definitie geldt een zijkleur als uitgeschakeld zodra minstens één van beide partners daar een singleton of renonce heeft; doubletons tellen niet mee. In de soepele definitie telt ook een doubleton al als uitschakeling. shell_rule_test.py rekent beide definities op exact dezelfde spellen en met exact dezelfde troefkeuze uit, zodat ze rechtstreeks vergelijkbaar zijn; de overige scripten gebruiken de strenge definitie.

De Shell-grootte is 40 − 10 per uitgeschakelde zijkleur: 40 als alle kleuren actief zijn, 30 bij één dode zijkleur, 20 bij twee, enzovoort.

De werkende HCP is de som van de HCP in de actieve kleuren, plus 4 punten voor elk aas in een uitgeschakelde kleur. De gedachte: in een dode kleur verliezen heer, vrouw en boer hun waarde, maar het aas blijft een slag. Azen werken dus altijd, ongeacht de kleur waarin ze zitten.

De troefkleur is de langste fit van het partnership. Bij meerdere even lange fits wordt er willekeurig één gekozen, zonder voorkeur voor hoog of laag. Die keuze is via de seed reproduceerbaar. In de Shell-scripten worden ook fits van zeven of minder als troefkleur toegelaten (de misfit-spellen); ze blijven herkenbaar aan de gerapporteerde fitlengte.

Hoe de leider wordt gekozen

Welke speler het contract speelt, beïnvloedt het aantal double-dummy-slagen. De scripten maken hierin niet allemaal dezelfde keuze, en dat is opzettelijk: de keuze hoort bij de vraag.

Waar het om de waarde van een fit of een Shell gaat (trump_vs_nt_advantage.py, shell_rule_test.py, shell_volledig.py, moysiaanse_fit_test.py), wordt het gemiddelde genomen van Noord én Zuid als leider. Zo hangt de uitkomst niet af van wie toevallig de gunstigste hand voor het tegenspel verbergt, en meet je de eigenschap van het partnership, niet van een toevallige leider.

Waar het om één concreet contract gaat (ligging_analyse.py), wordt juist de beste NZ-leider gekozen en vervolgens vastgehouden, omdat je dat ene contract over alle liggingen wilt volgen.

In in_and_out.py wordt het maximum van Noord of Zuid als leider genomen, omdat de vraag is wat de fit in het beste geval oplevert. Dat tilt het gemiddelde licht op ten opzichte van middelen, maar treft beide vergeleken varianten gelijk, zodat het verschil zuiver blijft.

regel_van_8.py ten slotte speelt het spel echt uit, slag voor slag, met de linkertegenstander van de leider aan de leiding — daar is geen middeling aan de orde omdat het om de herkomst van elke afzonderlijke slag gaat.

Wat bewust niet is meegewogen

De simulaties vergelijken contracten van het beschouwde partnership; ze berekenen geen par. Een par-analyse zou ook double-dummy succesvolle uitnemers van de tegenpartij meewegen, en in spellen met een superfit zou de puntenarme partij vaak op verdeling mogen spelen. Dat valt buiten de vraag van dit boek en is daarom niet gedaan: de tegenpartij verdedigt optimaal, maar er wordt niet apart gekeken of een tegencontract goedkoper zou zijn.

Bij de liggingsanalyse geldt nog een tweede inperking. De tegenkaarten worden volledig willekeurig herverdeeld, alsof er niets over hun ligging bekend is. In een echt biedverloop heeft de tegenpartij vaak geboden, wat hun mogelijke handen beperkt en een deel van de onzekerheid wegneemt. De gemeten liggingsafhankelijkheid is daarom een bovengrens: in de praktijk weet je vaak al iets meer.

Drempel- en vensterkeuzes bij de figuren

ligging_figuur2.py bewerkt de per-spel-uitvoer tot tabellen en de collapse-figuur. Daarbij worden enkele drempels gekozen: de manche-grens ligt op tien slagen, het consolidatiepunt op een gladgestreken maakkans van 80%, en de gladstrijkvensters hebben een minimum-aantal waarnemingen voordat een cel wordt getoond. Dat zijn redelijke maar vrije keuzes. Waar een bevinding gevoelig zou zijn voor net andere instellingen, wordt dat vermeld; waar ze dat niet is, mag de lezer ervan uitgaan dat de conclusie binnen redelijke variaties overeind blijft.

← Terug naar De Shell