Home    About me    Publications    Blog    Photo gallery
Some other old good stuff

Fabio Ruini’s blog

Because Italians do it better! What the f**k? Ehm… the blogs, I mean… obviously! :-/

Archivio per la 'Blackjack' Categoria

Habemus un simulatore di blackjack

Come avevo menzionato qualche post fa, grazie all’aiuto di Mirko Polato ho ripreso il lavoro sul simulatore di blackjack. Dopo che lui si e’ occupato di implementare le parti mancanti, gli ultimi due giorni sono stati spesi alla ricerca di un bug che faceva produrre al software risultati quantomeno inaspettati. Il bug finalmente e’ stato scovato, anche grazie al preziosissimo aiuto dei ragazzi di BlackjackInfo.com, che si sono prodigati nel darmi un sacco di consigli utili ed addirittura spulciare uno degli infiniti files di log generati del simulatore, trovando un errore piuttosto nascosto e che era esattamente quello che stavamo cercando (qui potete trovare l’intera discussione che ha avuto luogo sul loro forum).

Blackjack

Sul codice c’e’ ancora molto lavoro da fare, ma la piattaforma e’ ora funzionante. Al punto che ho potuto far partire molto velocemente due simulazioni di prova. 10,000 cicli di 1,000 mani ciascuno, giocati in accordo alla basic strategy, utilizzando in un caso il sistema di counting Hi/Lo (abbinato a puntate scalate in accordo ad una interpretazione conservativa del Kelly Criterion) e nell’altro nessun counting. I risultati sono stati quelli attesi. Profitto nel primo caso, perdita nel secondo. Come da copione e come mostrato dai grafici qui sotto.

Blackjack simulator - 1,000 hands (10,000 runs) using Hi/Lo counting and conservative KC

Blackjack simulator - 1,000 hands (10,000 runs) without counting

Qui sotto potete scaricare i sorgenti della versione attuale del software. Ancora molto grezza, come dicevo prima, ma funzionante. Ogni feedback e’ ovviamente graditissimo.

Open Source & Cloud Computing secondo Sun (e qualcosina di blackjack)

Ho ricevuto poco fa una mail inaspettata da Sun. Una comunicazione che, benche’ mirata all’utenza business, ho trovato interessante. In allegato alla mail c’era infatti il link dal quale scaricare un white paper relativo al cloud computing. O, meglio, a come implementare tale paradigma affidandosi a strumenti open source (a proposito, ditemi voi se avete mai trovato una definizione di open source, o meglio, di “free”, migliore di quella contenuta qui dentro). Il documento e’ ben scritto, ben formattato ed interessante. Anche la lunghezza, 12 pagine non troppo fitte, e’ quella giusta. Non ci sono proprio motivi per non condividerlo con voi.

Prima di chiudere il post riapro un attimo una parentesi chiusa, senza preavviso, qualche settimana fa. I piu’ attenti di voi ricorderanno che qualche settimana fa (o forse gia’ un paio di mesi fa) avevo pensato di scrivere qualcosina riguardo al blackjack, gioco che ho iniziato a studiare solo recentemente ma che trovo molto intrigante. Avevo iniziato a sviluppare un simulatore, ma poi, causa molteplici impegni, mi ero bloccato quando ormai mancavano solo pochi dettagli per completarlo. Ora, grazie all’ottimo lavoro di Mirko Polato, che si e’ preso la briga di studiarsi il mio codice, metterci le mani sopra, debuggarlo a dovere ed implementare le parti mancanti, e’ possibile riprendere in mano il discorso. E siccome con lui si sta discutendo di come implementare le puntate in accordo al Kelly Criterion, condivido con voi un altro pezzo di testo. Che mi sono copia/incollato a mano (leggi “riscritto”), da Best Blackjack, di Frank Scoblete (pagine 60-61).

The Kelly Criterion

I’ve put this first because it is actually something to seriously consider when playing blackjack. The Kelly Criterion is a bet-sizing scheme based on your knowledge of the percentage advantage you have over the house at any given moment. As you know with every point in the true count, you gain .50 percent over the casino. Unfortunately, not all games start out neutral so for some games, you have to have a true count of +3 to actually have an advantage over the casino. Kelly asserts that you should bet your advantage. Thus, in a six-deck game with a true count of +3, you would have approximately a one percent advantage over the house. Therefore, bet one percent of your total gambling bankroll. (Total bankroll = $10,000; one percent = $100.) As your advantage increases, you increase your bet (total bankroll $10,000; two percent = $200); as it decreases you decrease your bet so that when you have no advantage or, if you’re at disadvantage, you assures that you’ll rarely go broke since any decrease in your overall bankroll is reflected in your proportional betting. Thus, after a bad week at the tables, your initial $10,000 bankroll might be $8,000 and a one percent advantage now calls for an $80 bet.
Blackjack buffs talk often in terms of Kelly, as in: “I bet twice Kelly in high counts.” That means if this particular individual has a one percent advantage over the house, he’ll bet two percent of his bankroll. Is the Kelly Criterion a good way to go? Yes and most blackjack experts use some form of proportional betting to insure against ruination. Here’s a simple Kelly betting scale for multiple-deck games. We will assume that you start the game with a .50 percent edge for the casino against you. You will also assume that you have 1,000 units as your betting bankroll.

True count Percent edge Conservative betting Aggressive betting Super aggressive betting
-1 or less -1% or lss sit out table minimum table minimum
neutral (0) -0.5% table minimum table minimum table minimum
+1 even table minimum table minimum table minimum
+2 +0.5% table minimum 5 units 10 units
+3 +1% 5 units 10 units 20 units
+4 +1.5% 8 units 15 units 30 units
+5 +2% 10 units 20 units 40 units
+6 +2.5% 13 units 25 units 50 units
+7 or more +3% or more 15 units 30 units 60 units

Riflessioni sul blackjack

Come accennavo qualche post fa, in prospettiva WIVACE 2009 mi piacerebbe scrivere qualcosina riguardo al blackjack. Ancora non mi e’ chiarissimo su cosa sia possibile incentrare il lavoro, ma ho qualche idea che credo potrebbe valer la pena approfondire. Approfitto di questo post, che riprende una conversazione avuta via mail con un “collega”, per cercare di mettere un po’ d’ordine nei miei pensieri.

Blackjack (natural)

Gli aspetti che si potrebbero sviscerare, almeno in parte, sono tre:

  1. utilizzando un algoritmo evolutivo si potrebbe provare ad evolvere strategie di counting. Il counting, ovvero il “contare” le carte e variare l’ammontare delle proprie puntate in accordo al conteggio corrente (l’idea di fondo e’ di puntare piu’ forte quando il mazzo contiene una proporzione di carte “alte” maggiore rispetto alle carte “basse”) e’ cio’ che rende il blackjack uno dei pochi giochi da casino “battibili”. Le varie metodologie di conteggio vengono in genere classificate secondo due parametri: betting efficiency (BE) e playing efficiency (PE). Il primo parametro dice quanto un certo sistema di conteggio sia buono nel rappresentare la reale situazione dello shoe in un dato momento (e quindi variare in maniera corrispondente l’importo delle puntate). Il secondo riguarda invece quanto un certo sistema e’ buono nel suggerire variazioni rispetto alla basic strategy a seconda della situazione dello shoe. Esiste un trade-off tra i due parametri: all’aumentare dell’uno decresce il secondo. Un algoritmo evolutivo potrebbe potenzialmente portare ad individuare un punto di ottimo ancora non individuato nella letteratura.

    Vedi ad esempio:
    http://www.crapsdicecontrol.com/blackjack_efficiency.htm
    http://www.learn-blackjack.info/CardCountingSystemComparison.htm
    http://www.bettingpassport.com/card-counting-betting-playing.html

  2. tutti i sistemi di conteggio, per essere utilizzati in situazioni reali, richiedono che il giocatore divida il numero generato dal suo counting system (running count) con un altro numero che indica il numero di mazzi rimanenti nello shoe, ottenendo cosi’ il “true count”. Naturalmente la parola chiave in questi casi e’ “arrotondare”. Potrebbe essere interessante confrontare tra loro diverse strategie di counting e vedere come le loro performance si modificano a seconda dell’arrotondamento utilizzato.
  3. la letteratura in materia di blackjack tende sempre a focalizzarsi su situazioni “ideali”. Il giocatore non deve commettere errori nel contare le carte, deve sempre giocare una basic strategy perfetta (se non diversamente suggerito dal suo sistema di counting) ed avere una stima accurata del numero di carte (mazzi) rimanenti nello shoe. Ovviamente questa situazione ideale non e’ necessariamente quella che ci si ritrova nella realta’, dove il giocatore puo’ commettere errori per varie ragioni. Potrebbe essere interessante verificare come diverse strategie possano essere piu’ o meno robuste di fronte ad errori del giocatore.

Tutte queste ipotesi dovrebbero essere testabili in maniera numerica, attraverso un semplice simulatore software in grado di giocare qualche milione di mani per ciascuna configurazione. Ho un simulatore, scritto
in C++, che ho quasi finito di implementare (manca lo split, ed e’ inoltre necessario un po’ di sano debugging) e che potrebbe fare al caso mio. Ora si tratta di metterci su un po’ seriamente e vedere cosa ne puo’ venir fuori.

La dura realta’ del blackjack

Poker e blackjack sono due giochi da casino’. Qualcuno magari obiettera’ su questa definizione. Io in primis. Se infatti classifichiamo i “giochi da casino’” come quelli nei quali e’ il banco ad avere un edge sul giocatore, il poker non rientra nella categoria. Il banco, se vogliamo, vince sempre in quanto si intasca una quota dall’iscrizione dei giocatori ai tornei, oppure una percentuale su ogni piatto per quanto riguarda il cash. Ma i giocatori giocano contro altri giocatori, nei confronti dei quali possono avere o non avere un edge, anche piuttosto significativo. Il blackjack e’ invece un gioco da casino’ in tutto e per tutto. Si gioca contro il banco ed il banco ha un edge rispetto al giocatore. Molto ridotto, ma presente. Questo sembra essere un grosso punto a favore del poker. E probabilmente lo e’. Potremmo poi infine aggiungere che il poker da’ la speranza di sognare. Si indovina il torneo della vita e si fanno i milioni. Nel blackjack no. Occorre trovare il gioco giusto (alias quello battibile), bisogna lavorare sodo ed i risultati che e’ lecito attendersi sono assai modesti. Ma battere un gioco del genere puo’ essere a tratti perfino piu’ stimolante del battere pokeristi umani.

Tutta questa lunga premessa per dire che sto approfondendo lo studio di uno dei libri di blackjack finalmente arrivati da Amazon. Lo sto trovando interessante, seppur non sconvolgente. Il blackjack e’ infatti un gioco semplice. Esiste la basic strategy che, per ciascuna combinazione di carte di partenza proprie e del dealer, suggerisce la mossa statisticamente migliore. Anche giocando alla perfezione, pero’, a lungo andare si perde. Davvero si perde pur giocando in maniera perfetta? Si’, si perde. Se si e’ buoni giocatori, si possono passare tante ore al tavolo da blackjack rimanendo attorno allo stack di partenza. Si possono anche vincere belle cifre in una serata particolarmente fortunata. Ma alla lunga si perde. Quanto? Beh, per saperlo con un po’ piu’ di precisione ho quasi ultimato il mio piccolo simulatore del quale parlavo qualche post fa. Qui sotto un grafico generato dal software stesso che riepiloga l’andamento dello stack del giocatore (1,500$ di partenza) durante 10,000 mani giocate (ciascuna delle quali con puntata fissa di 5$) in accordo alla basic strategy in una situazione tuttavia un po’ particolare (6 mazzi, stand del dealer sul soft 17, niente insurance, niente early o late surrender, penetrazione all’80%, ma soprattutto niente split).

Blackjack (basic strategy with no split allowed)

Dai pochi esperimenti fatti finora si nota che, secondo le regole di cui sopra ed utilizzando un’approssimazione molto rozza della basic strategy (la quale manca dello split, volgarmente sostituito dall’hit), su 10,000 mani giocate e’ lecito aspettarsi di vincerne 4,200/4,300 contro le 4,800/4,900 del dealer. 800/900 sono invece i push. Come puo’ un gioco del genere essere battibile? Semplice: essendo minore il numero di mani che si vincono rispetto a quelle che si perdono, bisogna cercare di estrarre il massimo valore da esse. E per farlo occorre “contare”, capire quando il mazzo ci e’ favorevole (ovvere quando contiene una maggior proporzione di carte alte rispetto a quelle basse) ed in quei casi aumentare, anche in maniera massiccia, l’importo delle proprie puntate. Il gioco diventa pericoloso e per praticarlo occorre avere un ottimo bankroll alle spalle. Ma funziona. Ammesso e non concesso di limitare al massimo i propri errori nel conteggio, nel calcolo delle puntate e nell’applicazione della basic strategy. Qui sotto l’esempio di un run di 10,000 mani, giocate variando le puntate in accordo al conteggio Hi/Lo, particolarmente fortunato.

Blackjack (basic strategy with no split allowed, bets varying according to the Hi/Lo count)

Tutte queste cose, ad ogni modo, fino a ieri sera non le sapevo. Se non vagamente per via di quello che stavo leggiucchiando in giro. E cosi’, in un’escursione al casino in compagnia del buon Joachim, ho giocato un altro po’ a blackjack. E mi sono messo in tasca altri £40, chiudendo cosi’ in attivo la terza sessione sulle tre giocate fino ad ora. Alla faccia della statistica e del lungo termine.

Blackjack e basic strategy

Ho dovuto pubblicare oggi il nuovo testo d’esame per il neverending corso di Laboratorio II ad UniMORE (il quale, tra parentesi, mi costringe, domani, a rientrare in patria per qualche giorno). Il tema sul poker ha raccolto soltanto un adepto e mezzo (il mezzo perche’ uno dice di averci provato, ma poi non ha consegnato e si e’ limitato a mandarmi del codice assolutamente senza ne’ capo ne’ coda una settimana prima della deadline, chiedendo di “aiutarlo perche’ aveva alcuni dubbi”… sempre meraviglioso essere alla prese con gli studenti!), ma comunque meglio di niente. Ad ogni modo deciso di rimanere in ambito gambling. Dal poker passiamo questa volta al blackjack.

Blackjack hands on a live table

Vi risparmio il testo del progetto e passo direttamente a parlare di cio’ che ho trovato interessante spulciando un po’ la rete. Che il blackjack sia un gioco da casino “classico”, dove per “classico” si intende che e’ il banco ad avere un edge sul giocatore, e’ cosa risaputa. Che pero’ sia possibile ridurre questo edge fino a farlo diventare molto vicino allo zero e’ un fatto altrettanto noto. Il come farlo, specie senza ricorrere al counting, fino ad oggi lo ignoravo. Documentandomi un po’ ho scoperto l’esistenza della cosidetta “basic strategy”, una metodologia di gioco puramente statistica che puo’ essere adottata in maniera assolutamente meccanica. La tabella che trovate qui sotto, tratta da BlackjackInfo.com

Blackjack - Basic strategy chart (no surrender)

Adottando questa strategia, il margine del casino, utilizzando uno shoe da 6 mazzi, dovrebbe abbassarsi fino allo 0.44% (il condizionale soltanto perche’ non ho ancora verificato di persona). Da ignorante del blackjack quale sono, continuo a chiedermi quale sia il punto di giocare a qualcosa dove il ritorno atteso e’, seppur di poco, negativo. Vero che si puo’ sfruttare un qualche rush positivo (probabilmente aggiustando l’importo delle puntate, aumentandole nel momento in cui giocare e’ piu’ conveniente) e poi fuggire con una piccola vincita, ma nel lungo periodo l’aspettativa e’ negativa. Eppure ci sara’ un motivo se esistono sul mercato decine di libri di blackjack e tantissimi professionisti di questo gioco. O almeno voglio sperarlo.

Nel frattempo ho intenzione di fare qualche esperimento in simulazione. Ho cercato qualche libreria C++ che offrisse qualche funzione gia’ fatta per creare un mazzo, mescolarlo e muovere le carte, ma ho trovato soltanto cose oltremodo complicate quali ad esempio Drac. Cosi’ ho optato per copiare giusto qualche riga di codice. In particolare lo snippet che trovate a questo link, basato sui vettori C++ (e che utilizza anche l’ottima funzione random_shuffle() contenuta in algorithm e fino ad oggi a me sconosciuta) e che ho potuto riadattatare molto velocemente ai miei scopi.

Vederemo se (tempo libero permettendo) sara’ possibile riuscire a tirar fuori qualcosa di interessante. Deformazione professionale, naturalmente, mi porta a pensare ad una rete neurale addestrata tramite backpropagation che impari ad applicare la basic strategy e successivamente evoluta geneticamente per migliorare la propria performance sfruttando tecniche di counting. Chissa’…