Domanda

ho questo problema: voglio sapere quante volte un giocatore in possesso di un portafoglio di mani di poker batte un altro giocatore in possesso di un diverso portafoglio di mani di poker.

Ogni mano in un portafoglio viene assegnato un peso (cioè un rischio). Ogni mano in un portafoglio sa anche di essa la propria "forza". Questo significa tutte le carte sono state distribuite. Quindi, per favore assumere non più carte devono essere trattate.

Il motivo di questo problema è fastidioso a causa di problemi di carta di duplicati. Ad esempio, se prendo una partecipazione caso da portafoglio di ciascun giocatore devo controllare che tali partecipazioni non condividono una carta -. Ovviamente entrambi i giochi non possono essere trattati alla stessa carta

Voglio fare questo rapidamente, in modo che io possa fare molti rangea diverso vs AMPIAB comparazioni al secondo. Ho una soluzione, ma non voglio parlarne ancora perché io non voglio contaminare eventuali responces.

- Per un esempio -
Dato un bordo di 5 carte di "Ah 3c 8c Td Jh":
HandRangeA = {{ "Come Ac", 2,5%}, { "Come Ad", 2,5%}, { "Ac Kc", 5%} ....}
HandRangeB = {{ "Come Ac", 7,5%}, { "Come Ad", 7,5%}, { "Ac Kc", 5%} ....}
(Ogni HandRange contiene tutto il possibile svolgimento che non utilizzano una "carta di bordo")

Obiettivo :: calcolare la probaility HandRangeA batte HandRangeB

È stato utile?

Soluzione

Penso che si desidera qualcosa di simile:

probWin = 0
For Each HandA in RangeA
  probA = getProbability(HandA)
  For Each HandB in RangeB
    probB = getConditionalProbability(HandB, HandA)
    probWin += probA * probB * getProbabilityADefeatsB(HandA, HandB)

È necessario considerare probabilità condizionale, perché data Handa è come AC, non c'è una probabilità del 7,5% che è Handb come AC (in realtà, c'è una probabilità 0% di quello). Così si sta prendendo la probabilità di un avere una mano particolare, moltiplicato per la probabilità di B avere una mano particolare, dato quello che A ha, moltiplicato per la probabilità della mano di un battito di B mano. Che dovrebbe darvi la probabilità di un avere quella mano contro quella mano particolare di B e vincente. Iterare su tutte queste coppie dovrebbe dare il risultato desiderato credo.

Dal momento che l'approccio è esaustivo, non v'è alcuna necessità di alcun tipo di simulazione Monte Carlo. Naturalmente questo sarà O (n ^ 2) dove n è il numero di mani possibili, ma n qui è relativamente piccolo.

EDIT: Vorrei sottolineare che da quando lei si riferisce al caso in cui sono state distribuite tutte le carte, il getProbabilityADefeatsB () funzione dovrebbe restituire 1 o 0. Inoltre, getConditionalProbability () sarà essere sia esattamente 0 (perché le mani condividono una scheda) o semplicemente cosa il vostro peso normale era. Sarebbe più complicato se le mani erano meno specifico (se Handa è AA quindi Handb potrebbe essere un sapore diverso di AA, ma è meno probabile).

Altri suggerimenti

ho scritto un po 'di software che ha fatto questo via monte carlo. Ciò significa che mi sono imbattuto entrambe le mani per il completamento, 1000 volte con tavole casuali che potrebbe arrivare data la situazione, e contato vittorie e sconfitte. E 'stato sorprendentemente accurata.

Dato che io facevo per texas holdem, avrei fatto la stessa cosa dopo la (1) affare, (2) del flop, 3 (giro) in modo che il giocatore possa vedere come le loro percentuali modifica I dati della scheda.

I avrebbe dovuto finito quel software. Ma ho smesso di giocare a poker online ....

Credo che Andrew Prock è considerato l'esperto qui; controllare la discussione qui , e collegamenti in esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top