Come calcolare le probabilità di vincita di una mano di poker contro un'altra? [chiuso]

3

La mia domanda riguarda Poker Texas Hold'em . Ma credo che sarà lo stesso algoritmo per ogni tipo di gioco di poker.

Quindi consideriamo due mani: AJo e KQo . Posso utilizzare calcolatrice online e scoprire che AJo vince nel 59,48% dei casi.

La mia domanda è: come posso calcolare questa probabilità a livello di programmazione?

Ovviamente posso usare la forza bruta ma è molto inefficiente. Sopra le due mani sono presenti combinazioni 48 * 47 * 46 * 45 * 44 = 205.5 millions .

Qualcuno conosce un modo più efficiente per calcolarlo?

    
posta Vlad Papko 18.02.2016 - 05:49
fonte

5 risposte

3

Solo circa 1,7 milioni di combinazioni. Le stesse cinque carte possono apparire in 120 ordini diversi, quindi dividi il tuo numero per 120. Non ci vuole molto per calcolare un vincitore per quelle 1,7 milioni di combinazioni.

    
risposta data 18.02.2016 - 10:10
fonte
2

Il problema che stai descrivendo si trova in un campo della matematica chiamato Combinatorics, o talvolta Discrete Mathematics, ed è essenziale per lo studio dell'informatica.

Per conoscere questa branca della matematica in relazione al tuo problema specifico, ti rimando a questo articolo che lo spiega molto accuratamente

    
risposta data 18.02.2016 - 06:49
fonte
1

In questo caso ci vorrebbe un tempo più breve per eseguire i calcoli molto complessi della probabilità di vincita di ogni mano, rispetto alla probabilità di passare attraverso tutte le possibili combinazioni del tabellone e determinare in ogni caso quale mano vince.

Ma per creare un programma che determini quali calcoli fare in base alle due mani richiederà molto più tempo rispetto a creare un programma che esegue solo tutte le possibili combinazioni.

Se vuoi un programma che possa darti una risposta oggi, forza bruta. Se vuoi un programma che può dare una risposta molto veloce, lo avrai fatto da qualche parte intorno al 2037.

Solo per provare a dipingere un'immagine di quanto siano effettivamente complessi i calcoli, AJs vince quando KQo non migliora, a meno che la scacchiera sia la mano vincente nel qual caso è un pareggio. Se KQo migliora, vince, a meno che AJs migliori anche di meno, sempre a meno che la scacchiera non sia la mano vincente.

    
risposta data 18.02.2016 - 11:51
fonte
1

La matematica del poker è un campo specialistico. Non fornisci molte informazioni nel tuo post, ma assumerò heads up, nessuna scommessa e nessuna carta distribuita al river (quinta street se preferisci).

Calcolatori di odds come Poker Cruncher ti permettono di impostare la mano in alto e quindi distribuiscono migliaia di mani e vedere quale tiene in mano.

Per uno strumento utilizzabile, non è molto pratico (o utile) calcolare ciascuna scheda. Sì, ci sarà (ed è) varianza ogni volta che i numeri sono scricchiolanti ma finché è stato distribuito un numero decente di schede campione, sono abbastanza accurate (beh, abbastanza precise per prendere una decisione migliore di quella che altrimenti avresti ). N.B. Poker Cruncher esce al 59,5% per la vittoria in modalità infinita.

Se hai intenzione di usarlo per il gioco vero e proprio, questo è davvero uno strumento smussato. Ci sono molti altri fattori da considerare: EV , posizione, letture, bui, pila, immagine della tabella, ruba ecc ecc ecc.

    
risposta data 18.02.2016 - 12:23
fonte
1

Ti consiglio di cercare la libreria XPokerEval . Non contiene algoritmi banali per questo (ad esempio quelli a forza bruta), ma contiene vari efficienti algoritmi di valutazione implementati principalmente in C, C # e Java. Puoi quindi vedere come sono implementati.

Comprende una buona quantità di operazioni bit a bit, quindi ci vorrà un po 'per capirle.

Il post sul blog originale che ha descritto e introdotto questa libreria non è più accessibile, ma puoi ancora trovare più copie del suo codice su GitHub.

    
risposta data 18.02.2016 - 13:18
fonte

Leggi altre domande sui tag