Você está na página 1de 111

Universidade Federal De Santa Catarina

Centro Tecnolgico
Bacharelado em Cincias da Computao
Algoritmos para um jogador inteligente de Poker
Autor: Vincius Sousa Fazio
Florianpolis/SC, !!"
Universidade Federal De Santa Catarina
Centro Tecnolgico
Bacharelado em Cincias da Computao
Algoritmos para um jogador inteligente de Poker
Autor: Vincius Sousa Fazio
Orientador: Mauro Roisenerg
!anca: !enjamin "uiz Franklin
!anca: #o$o Rosaldo Vollertt #unior
!anca: Ricardo Azamuja Sil%eira
Florianpolis/SC, !!"
A&RA'()*M(+,OS
#gradeo a todos $ue me a%udaram no desenvolvimento deste tra&alho, em especial ao pro'essor
(auro )oisen&erg e aos colegas de tra&alho *oo +ollertt e Ben%amin ,ui- Fran.lin e ao )icardo
#-am&u%a Silveira pela participao na &anca avaliadora/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io 3
R(S-MO
0o.er 4 um %ogo simples de cartas $ue envolve aposta, &le'e e pro&a&ilidade de vencer/ 5
o&%etivo 'oi inventar e procurar algoritmos para %ogadores arti'iciais evolutivos e est6ticos $ue
%ogassem &em po.er/
5 %ogador evolutivo criado utili-a aprendi-ado por re'oro, onde o %ogo 4 dividido em uma
grande matri- de estados com dados de decis7es e recompensas/ 5 %ogador toma a deciso
$ue o&teve a melhor recompensa m4dia em cada estado/ 0ara comparar a e'icincia do
%ogador, v6rias disputas com %ogadores $ue tomam decis7es &aseados em 'rmulas simples
'oram 'eitas/
Diversas disputas 'oram 'eitas para comparar a e'icincia de cada algoritmo e os resultados
esto demonstrados gra'icamente no tra&alho/
0alavras8Chave9 #prendi-ado por )e'oro, :nteligncia #rti'icial, 0o.er;
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io <
S-M.R*O
/0 *ntrodu1$o00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/2
/ Fundamenta1$o ,e3rica0000000000000000000000000000000000000000000000000000000000000000000000000000000000/4
/=/ )egras do 0o.er Te>as ?old@em////////////////////////////////////////////////////////////////=A
2.1.1. Primeira rodada Pre-flop..............................................................17
2.1.2. Segunda rodada Flop....................................................................18
2.1.3. Terceira rodada Turn....................................................................18
2.1.4. Quarta rodada Rier.....................................................................1!
2.1.". Fim do #ogo S$o%do%n................................................................1!
2.1.&. Ran'ing(..........................................................................................1!
2.1.7. )encedor..........................................................................................21
// #n6lise do 0o.er///////////////////////////////////////////////////////////////////////////////////////
/B/ *ogadores #rti'iciais Cst6ticos/////////////////////////////////////////////////////////////////B
2.3.1. *leat+rio(........................................................................................23
2.3.2. ,on(tante(.......................................................................................23
2.3.3. -at$ematicall. Fair Strateg. - -FS..............................................24
2.3.4. /ean Rac$lin e 0ar. 1iggin( - R1.................................................24
/3/ *ogadores #rti'iciais Cvolutivos//////////////////////////////////////////////////////////////<
2.4.1. *prendi2ado por Refor3o................................................................2"
2.4.2. *lgoritmo 0en4tico.........................................................................2&
/</ 0ro&a&ilidade de +encer///////////////////////////////////////////////////////////////////////////A
2.".1. For3a 5ruta....................................................................................27
2.".2. -onte ,arlo....................................................................................27
/A/ 5utras Solu7es///////////////////////////////////////////////////////////////////////////////////////D
50 Metodologia000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026
B/=/ Ferramenta e linguagem//////////////////////////////////////////////////////////////////////////E
B// Treinamento/////////////////////////////////////////////////////////////////////////////////////////////E
B/B/ +eri'icao de desempenho/////////////////////////////////////////////////////////////////////B=
B/3/ :mplementao dos *ogadores #rti'iciais////////////////////////////////////////////////B=
3.4.1. *leat+rio(........................................................................................32
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io A
3.4.2. ,on(tante(.......................................................................................32
3.4.3. -at$ematicall. Fair Strateg. - -FS..............................................32
3.4.4. /ean Rac$lin e 0ar. 1iggin( R1.................................................33
3.4.". *prendi2ado por Refor3o................................................................34
B/</ 0ro&a&ilidade de +encer////////////////////////////////////////////////////////////////////////////BD
70 An8lise dos Resultados000000000000000000000000000000000000000000000000000000000000000000000000000000000059
3/=/ +eri'icao do m4todo (onte8Carlo/////////////////////////////////////////////////////////B"
3// Fuantidade de mesas necess6rias para avaliar um %ogador///////////////////////BE
3/B/ Constantes de con'igurao e evoluo do *ogador por )e'oro//////////////3!
3/3/ Disputas/////////////////////////////////////////////////////////////////////////////////////////////////////3B
4.4.1. -FS 6 *leat+rio................................................................................43
4.4.2. -FS 6 ,on(tante..............................................................................44
4.4.3. *leat+rio 6 ,on(tante.......................................................................44
4.4.4. R1 6 *leat+rio..................................................................................4"
4.4.". R1 6 ,on(tante.................................................................................4&
4.4.&. R1 6 -FS.........................................................................................47
4.4.7. Refor3o 6 *leat+rio..........................................................................48
4.4.8. Refor3o 6 ,on(tante.........................................................................48
4.4.!. Refor3o 6 -FS..................................................................................4!
4.4.17. Refor3o 6 R1.................................................................................."7
4.4.11. 8i(puta entre o( mel$ore( de cada................................................."7
4.4.12. Refor3o 6 1umano.........................................................................."1
40 )onclus$o0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042
:0 Re;er<ncias !iliogr8;icas0000000000000000000000000000000000000000000000000000000000000000000000000000047
=0 Ane>os00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004:
D/=/ plaGpo.er/m//////////////////////////////////////////////////////////////////////////////////////////////<A
D// computeHvictorG/h////////////////////////////////////////////////////////////////////////////////////AA
D/B/ getpoIer/h////////////////////////////////////////////////////////////////////////////////////////////////A"
D/3/ po.eroneran./h/////////////////////////////////////////////////////////////////////////////////////////DB
D/</ po.erran./h///////////////////////////////////////////////////////////////////////////////////////////////D<
D/A/ testHpo.erran./h///////////////////////////////////////////////////////////////////////////////////////DD
D/D/ createconstantplaGer/h//////////////////////////////////////////////////////////////////////////////DE
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io D
D/"/ creatediscreteplaGer/h///////////////////////////////////////////////////////////////////////////////"!
D/E/ createhumanplaGer/h////////////////////////////////////////////////////////////////////////////////"A
D/=!/ createm'splaGer/h///////////////////////////////////////////////////////////////////////////////////"D
D/==/ createrandomplaGer/h/////////////////////////////////////////////////////////////////////////////""
D/=/ createrhplaGer/h//////////////////////////////////////////////////////////////////////////////////////"E
D/=B/ createdata&ase/h/////////////////////////////////////////////////////////////////////////////////////E!
D/=3/ traindiscrete/h/////////////////////////////////////////////////////////////////////////////////////////E=
D/=</ 'illdata&ase/m/////////////////////////////////////////////////////////////////////////////////////////E<
D/=A/ neIsimutationdispute/m////////////////////////////////////////////////////////////////////////ED
D/=D/ neIsimutationdispute/m//////////////////////////////////////////////////////////////////////EE
D/="/ simulatealldispute/h/////////////////////////////////////////////////////////////////////////////=!!
D/=E/ simulatehuman/h//////////////////////////////////////////////////////////////////////////////////=!B
D/!/ #rtigo///////////////////////////////////////////////////////////////////////////////////////////////////=!3
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io "
"*S,A '( F?RM-"AS
F+rmula 19 rela3:o -FS................................................................................................24
F+rmula 29 rela3:o R1..................................................................................................24
F+rmula 39 e6emplo de ;uantidade de com<ina3=e( em um #ogo no flop com (ete
ader(>rio(.....................................................................................................................27
F+rmula 49 recompen(a de um #ogo...............................................................................32
F+rmula "9 deci(:o de um #ogador -FS.......................................................................33
F+rmula &9 deci(:o de um #ogador R1..........................................................................33
F+rmula 79 deci(:o do #ogador de aprendi2ado por refor3o.........................................34
F+rmula 89 recompen(a de uma deci(:o........................................................................3"
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io E
"*S,A '( ,A!("AS
Ta<ela 19 8imen(=e( do e(tado do #ogo.........................................................................37
Ta<ela 29 8eci(:o di(creti2ada.......................................................................................31
Ta<ela 39 8i(tri<ui3:o da deci(:o do #ogador aleat+rio...............................................32
Ta<ela 49 ?imite( u(ado( pelo algoritmo gen4tico para encontrar <oa( con(tante( para o
#ogador por Refor3o.......................................................................................................3&
Ta<ela "9 @6emplo de um ,ro((oer utili2ado para a#u(tar o #ogador por Refor3o.....37
Ta<ela &9 ,on(tante( encontrada( para (er utili2ado pelo /ogador @(for3o................42
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io =!
"*S,A '( &R.F*)OS
0r>fico 19 @6emplo de utili2a3:o do m4todo -onte-,arlo para calcular a pro<a<ilidade de
encer............................................................................................................................3!
0r>fico 29 )erifica3:o da ;uantidade de me(a( nece((>ria( para aaliar o de(empen$o de um
#ogador..........................................................................................................................47
0r>fico 39 Progre((o do #ogador com o aumento de informa3:o com a mel$or configura3:o
encontrada pelo algoritmo gen4tico..............................................................................41
0r>fico 49 Progre((o do #ogador com o aumento de informa3:o com a mel$or configura3:o
encontrada pelo <om (en(o...........................................................................................41
0r>fico "9 /ogador -FS 6 /ogador *leat+rio..............................................................43
0r>fico &9 /ogador -FS 6 /ogador ,on(tante.............................................................43
0r>fico 79 /ogador *leat+rio 6 /ogador ,on(tante.....................................................4"
0r>fico 89 /ogador R1 6 /ogador *leat+rio................................................................4&
0r>fico !9 /ogador R1 6 /ogador ,on(tante...............................................................47
0r>fico 179 /ogador R1 6 /ogador -FS.....................................................................48
0r>fico 119 /ogador Refor3o 6 /ogador *leat+rio......................................................48
0r>fico 129 /ogador Refor3o 6 /ogador ,on(tante.....................................................4!
0r>fico 139 /ogador Refor3o 6 /ogador -FS............................................................."7
0r>fico 149 /ogador Refor3o 6 /ogador R1..............................................................."7
0r>fico 1"9 8i(puta entre todo( o( #ogadore(............................................................."1
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io ==
"*S,A '( F*&-RAS
Figura 19 @6emplo de uma (itua3:o de #ogo ;ue o #ogador por refor3o con(ulta (ua <a(e de
con$ecimento e decide 2 ;ue (ignifica Acontinuar no #ogoB.......................................3"
Figura 29 @6emplo do mapa de con$ecimento do #ogador por refor3o (endo cada ponto um
e(tado do #ogo pintado com a deci(:o a (er tomada....................................................42
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io =
/0 *+,RO'-@AO
Jingu4m sa&e ao certo a origem do 0o.er KL:M:0CD:# 05MC), !!"N/ 5 %ogo mais antigo
conhecido $ue tenha as caracter2sticas de &le'e, Ovence $uem tem a melhor moP e aposta 4 do
s4culo Q+ e de origem alem, chamado Poc$(piel/ ?6 registros de pessoas %ogando um %ogo
chamado *( Ca( no s4culo Q:Q, $ue 4 muito parecido com po.er e usa vinte cartas/ #lguns
historiadores descordam da origem do po.er como uma variao do #s Jas e acreditam vir de
um %ogo 'rancs chamado Po;ue. 5 ator ingls *oseph CroIell relatou $ue o %ogo era %ogado
em JeI 5rleans em ="E, com um &aralho de vinte cartas e $uatro %ogadores apostando $ual
OmoP era a mais valiosa/ ,ogo aps isso, o &aralho ingls de < cartas 'oi utili-ado e durante
a Ruerra Civil #mericana as regras 'icaram mais parecidas com as $ue so utili-adas ho%e/
Cm torno de =E< comeou8se a %ogar o po.er com cartas comunit6rias, $ue 4 a modalidade
usada neste tra&alho/ 5 po.er e seus %arg7es 'a-em parte da cultura americana/ Cm =ED!
comearam os campeonatos mundiais de po.er nos Cstados Unidos/ Cm =E"D, o po.er com
cartas comunit6rias 'oram introdu-idos em cassinos da Cali'rnia e se tornaram a modalidade
de po.er mais popular at4 ho%e/ Cm =EE", um 'ilme com o tema de po.er chamado OCartas na
(esaP, em ingls O)oundersP, 'oi lanado nos Cstados Unidos/
0o.er 4 um %ogo de risco ou &le'e/ 5 esp2rito do %ogo 4 conseguir convencer o advers6rio $ue
o seu %ogo 4 mais 'orte $ue o dele e tentar adivinhar se o %ogo dele 4 mais 'orte $ue o seu/ 5
convencimento 4 atrav4s de apostas/ Se voc no apostar $ue seu %ogo 4 melhor $ue o do seu
advers6rio, o seu advers6rio vence sem precisar mostrar o %ogo/ Tam&4m 4 conhecido como
%ogo de mentiroso, assim como o OtrucoP no Brasil/
#s regras do %ogo so &em simples e o %ogador no possui in'orma7es su'icientes para tomar
a deciso tima/ 5u se%a, 4 um %ogo de in'ormao incompleta e essa 4 uma caracter2stica de
muitos pro&lemas relacionados a 6rea de :nteligncia #rti'icial/
Um %ogador com muita sorte consegue ganhar todos os %ogos sem precisar tomar decis7es
inteligentes, mas esses casos so raros/ 0ara a maioria das %ogadores, 0o.er envolve alguma
deciso inteligente/ :sso e>plica por$ue &ons %ogadores de po.er ganham mais $ue %ogadores
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io =B
medianos e por$ue e>istem %ogadores de 0o.er pro'issionais/ #lgumas pessoas a'irmam $ue
0o.er 4 um %ogo puramente de sorte mas para outras, $ue escreveram muitos livros a respeito,
como David S.lans.G, no/ C>istem muitos livros e artigos pu&licados a respeito, de-enas de
so'tIares sendo comerciali-ados em $ue o Snico propsito 4 tomar decis7es inteligentes em
0o.er e muitos sites de 0o.er 5nline pro2&em o uso destes so'tIares por dar muita vantagem
aos %ogadores $ue os utili-am/
5 o&%etivo deste tra&alho 4 procurar e 'ormular algoritmos $ue tomem decis7es inteligentes
em po.er, especi'icamente na modalidade 0o.er Te>as ?old@em, $ue 4 a modalidade mais
popular de 0o.er/ 0ara esse o&%etivo ser cumprido 'oi necess6rio implementar diversos
algoritmos e como resultado 'oi mostrado neste tra&alho cinco di'erentes estrat4gias/ #
primeira estrat4gia 'oi um %ogador aleatrio, $ue decide $ual$uer coisa sem levar em conta o
estado do %ogo/ # segunda 'oi o %ogador constante, $ue toma uma deciso constante, tam&4m
sem se importar com o estado do %ogo/ # terceira estrat4gia, nomeada (FS, 'oi utili-ar uma
'rmula $ue 'a- uma relao linear com algumas in'orma7es do %ogo, $ue so9 com a
$uantidade de dinheiro apostado, a $uantidade de dinheiro $ue possa vir a rece&er caso vena,
a pro&a&ilidade de vencer e a pro&a&ilidade de perder/ # $uarta estrat4gia, nomeada )?, 'oi
tam&4m utili-ar outra 'rmula $ue 4 uma relao linear de outras in'orma7es do %ogo, $ue
so9 $uantidade de dinheiro $ue rece&er6 caso vena, a $uantidade de %ogadores $ue ainda vo
tomar alguma deciso, a $uantidade de %ogadores no 'ugiram, a $uantidade de dinheiro $ue
precisa pagar para continuar no %ogo e a $uantidade de ve-es $ue algu4m aumentou a aposta/
# Sltima estrat4gia, nomeada %ogador de aprendi-ado por re'oro, 'oi arma-enar milh7es de
decis7es e recompensas em di'erentes estados do %ogo atrav4s de simula7es e, $uando 'or
tomar uma deciso, consultar essa &ase de dados por todas as decis7es 'eitas em um estado
semelhante e tomar a deciso $ue o&teve o melhor resultado, na m4dia/ Csta Sltima estrat4gia
precisava de muitas constantes para a%ustar a Osemelhana do estado do %ogoP e para encontrar
estas constantes 'oi utili-ado #lgoritmo Ren4tico/
0ara medir o desempenho dos %ogadores 'oi 'eito uma comparao de $uantidade de vitrias
disputando as di'erentes estrat4gias uma com a outra al4m de %ogadores humanos testarem os
%ogadores arti'iciais/ #s disputas 'oram 'eitas utili-ando di'erentes con'igura7es dos
%ogadores arti'iciais/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io =3
# %usti'icativa para esse tra&alho no 4 apenas criar um &om %ogador de po.er/ # motivao 4
testar e comparar di'erentes algoritmos de para %ogar po.er e testar um novo algoritmo de
aprendi-ado para solucinar um pro&lema com in'ormao incompleta em um dom2nio
relativamente simples $ue 4 o po.er/ Uma &oa soluo pode servir de inspirao para resolver
pro&lemas mais gen4ricos relacionados a &arganha, $ue 4 o esp2rito do po.er, como a &olsa de
valores/
5 tra&alho est6 estruturado em cinco cap2tulos, sendo este 8 a introduo 1 o primeiro/ 5
pr>imo cap2tulo 'ar6 uma reviso &i&liogr6'ica de teorias e m4todos $ue sero usadas no
tra&alho/ Jo terceiro cap2tulo, h6 todos os m4todos utili-ados em detalhes/ 5 $uarto cap2tulo
mostra os resultados o&tidos pelos m4todos utili-ados e uma interpretao destes resultados/
5 Sltimo cap2tulo cont4m uma reviso dos resultados o&tidos e sugest7es de tra&alhos 'uturos/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io =<
20 F-+'AM(+,A@AO ,(?R*)A
# 6rea da inteligncia arti'icial $ue estuda %ogos 4 uma das 6reas mais antigas da computao/
Segundo K,URC); STUBBC,F:C,D, =EE"N9
A0ame pla.ing i( al(o one of t$e olde(t area( of endeaor in artificial intelligence. Dn 1!"7E
almo(t a( (oon a( computer( <ecame programma<leE t$e fir(t c$e(( program( %ere %ritten <.
,laude S$annon Ft$e inentor of information t$eor.G and <. *lan Turing. Since t$enE t$ere
$a( <een (tead. progre(( in t$e (tandard of pla.E to t$e point %$ere current (.(tem( can
c$allenge t$e $uman %orld c$ampion %it$out fear of gro(( em<arra((ment.
F...G
5ut %$at ma'e( game( reall. different i( t$at t$e. are u(uall. muc$ too $ard to (ole. ,$e((E
for e6ampleE $a( an aerage <ranc$ing factor of a<out 3"E and game( often go to "7 moe( <.
eac$ pla.erE (o t$e (earc$ tree $a( a<out 3"
177
node( Falt$oug$ t$ere are Honl.H a<out 17
47
different legal po(ition(G. Tic-Tac-Toe Fnoug$t( and cro((e(G i( <oring for adult( preci(el.
<ecau(e it i( ea(. to determine t$e rig$t moe. T$e comple6it. of game( introduce( a
completel. ne% 'ind of uncertaint. t$at %e $ae not (een (o farI t$e uncertaint. ari(e( not
<ecau(e t$ere i( mi((ing informationE <ut <ecau(e one doe( not $ae time to calculate t$e
e6act con(e;uence( of an. moe. Dn(teadE one $a( to ma'e oneH( <e(t gue(( <a(ed on pa(t
e6perienceE and act <efore one i( (ure of %$at action to ta'e. Dn t$i( re(pectE game( are muc$
more li'e t$e real %orld t$an t$e (tandard (earc$ pro<lem( %e $ae loo'ed at (o far.
/ogar 4 uma da( >rea( de e(for3o da inteligJncia artificial. @m 1!"7E logo ap+( o(
computadore( (e tornarem program>ei(E o primeiro programa de 6adre2 foi e(crito por
,laude S$annon Fo inentor da teoria da informa3:oG e por *lan Turing. 8e(de ent:oE tem
ocorrido um (+lido progre((o no( padr=e( de #ogarE ao ponto em ;ue o( (i(tema( atuai(
podem de(afiar campe=e( mundiai( $umano( (em medo de con(trangimento.
F...G
-a( o ;ue fa2 o( #ogo( realmente diferente( Kde outro( pro<lema( da inteligJncia artificialL 4
;ue ele( (:o geralmente muito mai( difMcei( de re(oler. Nadre2E por e6emploE tem um fator de
e6pan(:o de 3"E e #ogo( fre;uentemente :o a "7 moimento( por #ogadorE ent:o a >rore de
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io =A
pe(;ui(a tem apro6imadamente 3"
177
nodo( Fape(ar de e6i(tir Hapena(H 17
47
diferente(
po(i3=e( permitida(G. /ogo da el$a 4 entediante para adulto( preci(amente por;ue 4 f>cil
determinar o moimento correto. * comple6idade do( #ogo( introdu2 um tipo de incerte2a
completamente noo ;ue n:o imo( aindaI a incerte2a acontece n:o por falta de informa3:o
ma( por;ue n:o $> tempo de calcular a e6ata con(e;uJncia de ;ual;uer moimento. *o in4(
di((oE algu4m dee fa2er o mel$or tentatia <a(eado em e6periJncia pa((adaE e agir ante( de
ter certe2a de ;ual a3:o tomar. 8e((a maneiraE #ogo( (:o muito mai( como o mundo real ;ue
o( pro<lema( de <u(ca comun( ;ue imo( at4 agora.A.
0ortanto, %ogos so um grande est2mulo na 6rea de inteligncia arti'icial para desco&rir novas
solu7es para pro&lemas $ue podem ser generali-ados e aplicado para resolver outros
pro&lemas do cotidiano %6 $ue os pro&lemas do cotidiano tem caracter2sticas de pro&lemas de
%ogos/ Decidir o preo de um produto 4 um e>emplo de um pro&lema $ue poderia ser
resolvido atrav4s de uma soluo semelhante T soluo do 0o.er por$ue am&os precisam
tomar decis7es $ue podem ser rent6veis ou no e am&os contm in'orma7es incompletas/
/=/ )egras do 0o.er Te>as ?old@em
0o.er 4 um %ogo com regras simples e isso 'oi um dos motivos de ter se tornado to popular
K05MC),5C5, !!"N/ 5 o&%etivo do %ogo 4 ganhar mais dinheiro/ Todos os %ogadores
apostam dinheiro e o %ogador $ue tiver o melhor %ogo no 'inal rece&e todo o dinheiro/ 5 %ogo
deve ter no m2nimo dois %ogadores e 4 poss2vel at4 vinte e dois %ogadores/ 5 aconselh6vel 4
at4 de- %ogadores/
C>istem diversas modalidades de aposta, divididas em dois grandes grupos9 "imit e +oB
"imit/ # modalidade ,imit tem algum tipo de limite pr48esta&elecido de aposta en$uanto a
Jo8,imit a aposta pode ir at4 a $uantidade de dinheiro dispon2vel para o %ogador apostar/
Jo comeo do %ogo, cada %ogador rece&e duas cartas $ue somente o dono das cartas pode ver/
Um %ogo 4 dividido em $uatro rodadas/ Cm todas as rodadas, o primeiro a %ogar 4 o %ogador T
es$uerda de $uem distri&uiu as cartas/ 5 segundo a %ogar 4 a es$uerda do primeiro a %ogar, e
assim sucessivamente/ 5 $ue 'a-er em cada rodada 4 e>plicado a seguir/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io =D
2.1.1. Primeira rodada Pre-flop
5 primeiro a %ogar 4 o Small !lind $ue signi'ica $ue ele 4 o&rigado a apostar a aposta
m2nima/ 5 valor da aposta m2nima 4 com&inada entre os %ogadores antes de comear o %ogo/
Segue o %ogo para o segundo a %ogar, a es$uerda do Sltimo $ue %ogou/ Cle 4 o !ig !lind $ue
signi'ica $ue ele 4 o&rigado a apostar o do&ro da aposta m2nima/ Segue o %ogo para o pr>imo
a %ogar, a es$uerda do Sltimo a %ogar/ #gora ele tem trs alternativas9
=/ Fugir 8 Fold9 Cle a&andona o %ogo, no tendo direito a nenhum prmio e perde o $ue %6
apostou/ #l4m disso, esse %ogador no pode mais tomar nenhuma deciso no %ogo/
/ Continuar no %ogo 8 )all ou )Ceck9 0ara continuar no %ogo, ele tem $ue ter apostado a
mesma $uantidade de dinheiro $ue o %ogador $ue mais apostou/ 5 termo Call 4 $uando voc
precisa pagar alguma coisa para continuar no %ogo/ 5 termo Chec. 4 $uando voc pode
continuar no %ogo sem pagar nada/ Por e6emplo9 (e o primeiro #ogador apo(tou "E o (egundo
17E o terceiroE para continuar no #ogoE preci(a apo(tar 17. Ce((e ca(o 4 um ,all.
B/ #umentar a aposta 8 Raise ou !et9 0ara aumentar a aposta, ele deve apostar o necess6rio
para continuar no %ogo e mais o $ue ele $uiser aumentar/ 5 termo Bet 4 $uando voc no
precisa pagar nada para aumentar a aposta/ 5 termo )aise 4 $uando voc precisa pagar
alguma coisa antes de aumentar a aposta/ Por e6emplo9 (e o primeiro #ogador apo(tou "E o
(egundo 17E o terceiro dee apo(tar mai( ;ue 17 para e(tar aumentando a apo(ta. Ce((e ca(o
4 um Rai(e. C>iste um tipo especial de aumento de aposta chamado AllB*n0 #contece $uando
o %ogador aposta tudo o $ue tem/ Cle pode usar esse recurso $uando a $uantidade de dinheiro
$ue ele precisa apostar para continuar no %ogo 4 maior $ue a $uantidade de dinheiro
dispon2vel para ele/ #postando tudo, ele pode continuar no %ogo, mas a distri&uio do prmio
4 di'erenciada/ Ser6 e>plicada na sesso @+encedor@/
Todos os %ogadores tem a ve- de %ogar, em ordem/ Toda ve- $ue algum %ogador aumenta a
aposta, o %ogo continua em ordem at4 $ue todos tenham pagado a aposta ou 'ugido/ Toda ve-
$ue um %ogador vai pagar a aposta, ele pode tomar $ual$uer uma das trs decis7es acima, $ue
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io ="
4 'ugir, pagar a aposta ou aumentar ainda mais a aposta, 'a-endo com $ue todos tenham $ue
pagar novamente esse aumento de aposta/ Se nenhum %ogador precisar pagar nada para
continuar no %ogo e todos os %ogadores %6 %ogaram, a rodada aca&a/ Seno, segue o pr>imo
%ogador/
@6emplo da primeira rodada9 Om #ogo de 4 #ogadore(. P primeiro 4 Small 5lind e apo(tou ".
P (egundo 4 A5ig 5lindB e apo(tou 17. P terceiro decidiu continuar no #ogo9 apo(tou 17. P
;uarto decidiu aumentar a apo(ta9 apo(tou 37. P primeiroE para continuar no #ogo dee
apo(tar 2" Fcomo ele #> apo(tou " no (mall <lindE " Q 2" R 37G. @le apo(ta 47E totali2ando
uma apo(ta de 4". P (egundoE para continuar no #ogo dee apo(tar 3" F17 Q 3" R 4"G. @le
decide fugirE dei6ando o( 17 ;ue ele #> apo(tou na me(a. P terceiro dee apo(tar 3" para
continuar no #ogo F17 Q 3" R 4"G. @le decide continuar no #ogoE apo(tando 3". P ;uarto dee
apo(tar 1" para continuar no #ogo F37 Q 1" R 4"G. @le decide aumentarE apo(tando 27E
totali2ando "7 F37 Q 27 R "7G. P primeiroE para continuar no #ogoE dee apo(tar " F4" Q "G.
@le apo(ta "E continuando no #ogo. P (egundo #> fugiu e n:o tem direito a nada. P terceiro
dee apo(tar " para continuar no #ogo. @le apo(ta "E continuando no #ogo. ,omo ningu4m
preci(a pagar mai( nada para continuar no #ogoE ai para a pr+6ima rodada
2.1.2. Segunda rodada Flop
Jo comeo da rodada, o %ogador $ue deu as cartas coloca trs cartas do &aralho na mesa para
$ue todos possam ver/
5 %ogador T es$uerda de $uem deu as cartas tem as mesmas trs alternativas da primeira
rodada/ Como ningu4m apostou nada ainda, se ele $uiser continuar no %ogo ele no precisa
pagar nada, 'a-endo um Chec./ 5s crit4rios para aca&ar a rodada so os mesmos da primeira
rodada/ 5 primeiro a aumentar a aposta 'ar6 um Bet, pois ele estar6 aumentando a aposta sem
precisar pagar nada para continuar no %ogo/ 5 resto da rodada segue como na primeira rodada/
2.1.3. Terceira rodada Turn
Jo comeo da rodada, o %ogador $ue deu as cartas coloca mais uma carta do &aralho na mesa
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io =E
para $ue todos possam ver/ Segue o %ogo como no Flop/
2.1.4. Quarta rodada - River
Jo comeo da rodada, o %ogador $ue deu as cartas coloca mais uma carta do &aralho na mesa
para $ue todos possam ver/ Segue como no Turn/
2.1.". Fim do #ogo - Showdown
Todos os %ogadores $ue no 'ugiram mostram suas cartas e declaram o seu %ogo/ Seu %ogo 4 o
melhor %ogo 'ormado por cinco cartas das sete dispon2veis Kcinco cartas da mesa mais duas
cartas $ue rece&eu no comeo do %ogoN/
2.1.&. Rankings
5 ran.ing 4 o valor de um con%unto de cinco cartas/ Fuase todos os )an.ing dependem da
Omaior cartaP/ # ordem das cartas so, em ordem decrescente9 #, M, F, *, =!, E, ", D, A, <, 3,
B, , #/ 5 @#@ aparece duas ve-es por$ue ele 4 considerado a menor carta somente no caso de
@se$Uncia@ de #, , B, 3, </ 5 ran.ing @se$Uncia@ ser6 e>plicado a&ai>o/ 5 %ogador com o
melhor ran.ing vence o %ogo/ 5s ran.ings, em ordem crescente, so9
:/ (aior carta 8 DigC )ards9 Cinco cartas di'erentes/ # maior carta vence/ Por e6emplo9
SE8E2E4E" 4 mai( forte ;ue QE17E/E8E7. Jo caso de empate de maior carta, a segunda maior, e
assim sucessivamente/ Por e6emplo9 /E7E&E"E3 4 mai( forte ;ue /E7E&E"E2. 5 nSmero de
com&ina7es poss2veis desse ran.ing 4 =/B!/<3!/
::/ Um par 8 One Pair9 0ar 4 duas cartas com o mesmo nSmero e trs cartas di'erentes/ Por
e6emplo9 SESE"E2E3 4 par de S. "E"E*E&E3 4 par de ". Jo caso de empate de par, o par maior
ganha/ Por e6emplo9 SESE4E2E8 4 mai( forte "E"E*ESEQ. Jo caso de empate de par, a maior
carta das B $ue restaram vence/ Cm caso de empate da maior, a segunda maior, e assim
sucessivamente/ Por e6emplo9 "E"ESE7E3 4 mai( forte ;ue "E"EQE/E17. 7E7ESE/E3 4 mai( forte
;ue 7E7ESE/E2. 5 nSmero de com&ina7es poss2veis desse ran.ing 4 =/!E"/3!/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io !
:::/ Dois pares 8 ,Eo Pairs9 Dois pares e uma carta di'erente/ Por e6emplo9 SESE"E"E3 4 par
de S e ". "E"E*E*E3 4 par de " e *. Jo caso de empate de dois pares, o par maior ganha/ Jo
caso de empate de maior par, o segundo maior par ganha/ Por e6emplo9 SESE4E4E8 4 mai( forte
SESE3E3EQ. Jo caso de empate de dois pares, a maior carta da carta $ue so&rou vence/ Por
e6emplo9 "E"E3E3E4 4 mai( forte ;ue "E"E3E3E2. 5 nSmero de com&ina7es poss2veis desse
ran.ing 4 =B/<</
:+/ Trio 8 ,Cree O; A Find9 Trio 4 trs cartas com o mesmo nSmero e duas cartas di'erentes/
Por e6emplo9 /E/E"E/E3 4 trio de /. *E*E*E4E3 4 trio de *. Jo caso de empate de trio, o trio
maior ganha/ Por e6emplo9 *E*E*E4E8 4 mai( forte SESESE3EQ. Jo caso de empate de trio, a
maior carta das $ue so&raram vence/ Jo caso de empate, a segunda maior carta $ue so&rou
vence/ Por e6emplo9 "E"E"E7E4 4 mai( forte ;ue "E"E"E7E2. 5 nSmero de com&ina7es poss2veis
desse ran.ing 4 <3/E=/
+/ Se$Uncia 1 StraigCt9 Se$Uncia so cinco cartas na se$Uncia de nSmero/ Por e6emplo9
*E2E3E4E" 4 (e;TJncia de ". 7E8E!E17E/ 4 (e;TJncia de /. Jo caso de empate de se$Uncia, a
se$Uncia com a maior carta vence/ Por e6emplo9 3E4E"E&E7 ence de *E2E3E4E". P * 4
con(iderado a menor carta (omente no ca(o de (e;TJncia de *E 2E 3E 4E ". 5 nSmero de
com&ina7es poss2veis desse ran.ing 4 =!/!!/
+:/ Jaipes iguais 1 FlusC9 Cinco cartas di'erentes com naipes iguais/ Por e6emplo9 3E 7E 2E &E
8 de copa( 4 flu($ de 8. &E !E 17E SE 2 de pau( 4 flu($ de 8. Jo caso de empate de 'lush, a
maior carta vence/ Jo caso de empate de maior carta, a segunda maior, e assim
sucessivamente/ Por e6emplo9 *E 7E "E 4E 3 4 maior ;ue SESE /E QE 17. Cote ;ue o Ultimo #ogo
tem tam<4m um par. -a( como o flu($ 4 maior ;ue o parE o par 4 ignorado. 5 nSmero de
com&ina7es poss2veis desse ran.ing 4 </=!"/
+::/ Trio e par 8 Full Douse9 Trs cartas com o mesmo nSmero e duas com o mesmo nSmero/
Por e6emplo9 SESESE/E/ 4 full $ou(e de S. "E"E"EQEQ 4 full $ou(e de ". Jo caso de empate de
'ull house, o 'ull hose com o maior trio vence/ Jo caso de empate de trio, o maior par vence/
Por e6emplo9 "E"E"E2E2 ence de 4E4E4ESES. 8E8E8E*E* ence de 8E8E8ESES. 5 nSmero de
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io =
com&ina7es poss2veis desse ran.ing 4 B/D33/
+:::/ Fuadra 8 Four O; A Find9 Fuatro cartas com o mesmo nSmero e uma carta di'erente/
Por e6emplo9 SESESESE/ 4 ;uadra de S. "E"E"E"EQ 4 ;uadra de ". Jo caso de empate de
$uadra, a $uadra maior vence/ Por e6emplo9 "E"E"E"E2 ence de 2E2E2E2ES. Jo caso de empate
de $uadra, a maior carta restante vence/ Por e6emplo9 7E7E7E7E8 ence de 7E7E7E7E& 5 nSmero
de com&ina7es poss2veis desse ran.ing 4 A3/
:Q/ Se$uncia com naipes iguais 8 StraigCt FlusC9 5 maior ran.ing do po.er/ Cinco cartas
em se$Uncia com o mesmo naipe/ Por e6emplo9 3E4E"E&E7 de ouro 4 um Straig$t Flu($ de 7.
17E /E QE SE * de e(pada 4 um (traig$t flu($ de *E tam<4m con$ecido como ro.al (traig$t
flu($E ;ue 4 o maior #ogo po((Mel do po'er. Jo caso de empate de straight 'lush, a maior carta
vence/ Por e6emplo9 7E8E!E17E/ de ouro 4 maior ;ue &E7E8E!E17 de pau(. 5 nSmero de
com&ina7es poss2veis desse ran.ing 4 BA/
2.1.7. )encedor
Se so&rar apenas um %ogador $uando todos os %ogadores 'ugirem, o %ogador $ue no 'ugiu, em
$ual$uer rodada, vence o %ogo/ Seno, o %ogador com o %ogo mais 'orte vence/ Toda aposta 4
colocada em um monte comum chamado Pot0 5 %ogador $ue vence rece&e o 0ot/ Cm caso de
empate, os vencedores dividem todo o dinheiro 0ot/ Cm caso de algum %ogador ter apostado
tudo o $ue tinha, ou se%a all8in, o pot 4 dividido/ Cm um pot 'ica apenas o dinheiro $ue 'oi
apostado at4 o all8in/ Cm outro monte 'ica o restante, em aposta separada/
Por e6emplo9 P #ogador * apo(ta "7E o #ogador 5 tem apena( 37 e anuncia Hall-inH apo(tando
todo o (eu din$eiroE ;ue 4 37. Ce((e momentoE o pot 4 diidido. P primeiro pot fica toda(
apo(ta( at4 o momento mai( 37. Co (egundo pot ficar> a( apo(ta( ;ue o #ogador 5 n:o pode
apo(tarE ou (e#aE "7-37 R 27. P #ogador , ;uer continuar no #ogoE ent:o ele coloca 37 no
primeiro pot e 27 no (egundo pot. 8igamo( ;ue o #ogador 5 enceu. @le lea todo o pot ;ue
ele tin$a direitoE ou (e#aE o primeiro pot. P (egundo potE ;ue tem 47E 4 di(putado pelo(
#ogadore( ;ue apo(taram neleE ou (e#a #ogador * e ,. 8entre o( doi(E digamo( ;ue * tem o
mel$or #ogo. @nt:o * gan$a o (egundo pot.
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io
// #n6lise do 0o.er
0o.er 4 um %ogo de in'ormao incompleta/ :sso signi'ica $ue voc precisa tomar decis7es
com in'orma7es $ue so insu'icientes para garantir $ue voc tomou a melhor ou a pior
deciso/ *ogos de in'ormao completa seriam o >adre-, a damas ou o %ogo da velha9 todas as
in'orma7es para 'a-er a melhor %ogada esto dispon2veis para os %ogadores/ 5s %ogadores de
>adre- s no tomam a melhor deciso poss2vel no %ogo por$ue e>igiria muitos c6lculos, mas
todas as in'orma7es para 'a-8lo esto dispon2veis/ Jo 0o.er, 4 imposs2vel garantir $ue a
deciso tomada 4 a melhor deciso poss2vel devido a in'ormao incompleta, mas pode ser
poss2vel tomar mais decis7es &oas $ue ruins/ Um grande %ogador de po.er chamado S.lans.G
escreveu o Teorema Fundamental do 0o.er de S.lans.G KSM,#JSMV, =EE<N9
AS'lan('.H( Fundamental T$eorem of Po'er9
@er. time .ou pla. a $and differentl. from t$e %a. .ou %ould $ae pla.ed it if .ou could (ee
all .our opponent(H card(E t$e. gainI and eer. time .ou pla. .our $and t$e (ame %a. .ou
%ould $ae pla.ed it if .ou could (ee all t$eir card(E t$e. lo(e. ,oner(el.E eer. time
opponent( pla. t$eir $and( differentl. from t$e %a. t$e. %ould $ae if t$e. could (ee all .our
card(E .ou gainI and eer. time t$e. pla. t$eir $and( t$e (ame %a. t$e. %ould $ae pla.ed if
t$e. could (ee all .our card(E .ou lo(e.
Teorema Fundamental do Po'er de S'lan('.9
Toda e2 ;ue ocJ #oga uma m:o diferentemente da maneira ;ue ocJ #ogaria ca(o pude((e
er a( carta( de (eu( oponente(E ele( gan$am. @ toda e2 ;ue ocJ #oga (ua m:o do me(mo
#eito ;ue ocJ teria #ogado ca(o pude((e er toda( a( carta( de (eu( oponente(E ele( perdem.
Dner(amenteE toda e2 ;ue (eu( oponente( #ogam (ua( m:o( diferentemente da maneira ;ue
ele( teriam #ogado ca(o pude((em er toda( (ua( carta(E ocJ gan$aE e toda e2 ;ue ele(
#ogam (ua( m:o( da me(ma maneira ;ue ele( teriam #ogado ca(o pude((em er toda( (ua(
carta(E ocJ perde. A
5u se%a, se voc tivesse a in'ormao completa em po.er, voc sempre venceria/ C se o
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io B
advers6rio tivesse a in'ormao completa, ele venceria/ # melhor 'orma de vencer, portanto, 4
tentar o&ter in'ormao completa e di'icultar o m6>imo o advers6rio de o&ter essa
in'ormao/
#s maneiras de se o&ter mais in'ormao so atrav4s de estat2stica, atrav4s de su&%etividade e
atrav4s de trapaas/ Criar um %ogador arti'icial $ue colete in'orma7es su&%etivas 4
e>tremamente comple>o, s 4 v6lida $uando se %oga contra humanos e mesmo assim pode ser
invi6vel/ Seria criar um algoritmo $ue tivesse empatia de como est6 o %ogo do advers6rio ou
perce&esse $ue o advers6rio est6 mentindo, nervoso, muito alegre, com medo, desatento ou
outras emo7es atrav4s de uma entrada de v2deo e som/ W realmente comple>o por$ue muitos
seres humanos no conseguem distinguir essas in'orma7es, muito menos criar algoritmos
$ue as identi'i$ue, no se%am enganados e sai&a como lidar com elas/ W invi6vel o&ter esse
tipo de in'ormao $uando se %oga na internet, onde no se tem acesso a um v2deo nem a vo-
dos advers6rios/ # soluo de trapaa 4 uma soluo ileg2tima pois $ue&ra as regras do %ogo/ #
soluo de o&ter in'orma7es estat2sticas seria utili-ar a e>perincia de muitos %ogos, a
e>perincia do comportamento mais comum de determinado %ogador para sa&er a
pro&a&ilidade de &le'ar ou no e in'orma7es concretas como as cartas, as cartas na mesa, o
dinheiro apostado na mesa, os %ogadores $ue ainda esto em %ogo, a $uantidade de %ogadores,
dinheiro necess6rio para continuar no %ogo/
/B/ *ogadores #rti'iciais Cst6ticos
*ogadores $ue tomam decis7es &aseado em uma 'uno imut6vel so os %ogadores est6ticos/
So simples e so timas re'erncias para comparao com %ogadores treinados/
2.3.1. *leat+rio(
Csse %ogador 4 um dos mais simples poss2veis/ Simplesmente %ogam aleatoriamente, no se
importando com o $ue est6 acontecendo no %ogo/
2.3.2. ,on(tante(
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io 3
Csses tam&4m so &em simples/ Cles tomam sempre a mesma deciso, no se importando
com o $ue est6 acontecendo no %ogo/
2.3.3. -at$ematicall. Fair Strateg. - MFS
(athematicallG Fair StrategG KF:JD,C), =EDDN 4 um tipo de %ogador $ue %oga %usto em
relao a pro&a&ilidade de vencer/ Cle aposta proporcional a pro&a&ilidade e ao 05T/ #
relao (FS 4 o&tido por ) pela 'rmula9
) =*V?/
F+rmula 19 rela3:o -FS
5nde V 4 a pro&a&ilidade do %ogador vencer, ? 4 a pro&a&ilidade do %ogador perder, * 4 a
soma de aposta 'eita pelos advers6rios e / 4 a soma de aposta 'eita pelo %ogador/ Se ) 'or
negativa, a deciso a ser tomada 4 F5,D/ Se ) 'or pr>ima de -ero, a deciso a ser tomada 4
C#,, / C?CCM/ Se ) 'or positiva, a deciso a ser tomada 4 )#:SC / BCT proporcional a )
2.3.4. /ean Rac$lin e 0ar. 1iggin( - RH
Csse tipo de %ogador KF:JD,C), =EDDN 'oi gerado a partir de um estudo estat2stico de dois
estudantes9 *ean )achlin e RarG ?iggins/ Cles chegaram a concluso $ue na maioria dos
%ogos, a chance de um %ogador vencer no depende das cartas em suas mos e sim de outras
vari6veis, algumas diretamente proporcionais e outras inversamente proporcionais/ Cles
chegaram na seguinte 'rmula9
) =
P
,=?FR
F+rmula 29 rela3:o R1
5nde P 4 o 05T, R 4 o )#:SC, ? 4 a $uantidade de %ogadores $ue no 'ugiram, F 4 a
$uantidade de %ogadores $ue precisam tomar alguma deciso antes de aca&ar a rodada e , 4 a
$uantidade de ve-es $ue algu4m decidiu )#:SC / BCT/ Se ) 'or muito &ai>o, a deciso a ser
tomada 4 F5,D/ Se ) 'or ra-o6vel, deve8se decidir C#,, / C?CCM/ Se ) 'or alto, deve8se
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io <
decidir )#:SC / BCT/ 5u se%a, a pro&a&ilidade de vencer 4 proporcional ao dinheiro apostado
e inversamente proporcional as outras vari6veis contidas na 'rmula/
/3/ *ogadores #rti'iciais Cvolutivos
#o contr6rio de %ogadores est6ticos, esses %ogadores aprendem com a e>perincia/ # 'uno de
deciso 4 mut6vel de acordo com um &anco de dados de e>perincia/ Cssa e>perincia pode
ter in'orma7es so&re um %ogador espec2'ico, $ue 4 uma &oa estrat4gia partindo da hiptese de
$ue %ogadores de po.er tendem a %ogar da mesma maneira/ 5 &anco pode ter tam&4m
in'orma7es so&re situa7es de %ogos em $ue o %ogador advers6rio no 4 levado em conta na
'uno de deciso, o $ue 4 o torna um %ogador mais completo e gen4rico/
2.4.1. *prendi2ado por Refor3o
#prendi-ado por re'oro KSUTT5J; B#)T5, !!", L:M:0CD:# )C:JF5)CC(CJT
,C#)J:JR, !!"N 4 uma 'orma de programar agentes para aprender &aseado em
recompensas/ W um tipo de aprendi-ado no supervisionado/ Jo aprendi-ado supervisionado,
o agente tem uma s4rie de e>emplos de a7es e suas conse$Uncias $ue o agente deve usar
para aprender/ Jo aprendi-ado no supervisionado, o agente toma decis7es aleatrias e
registra a reao do meio am&iente, as recompensas/ Cm alguns casos, as recompensas a
longo pra-o devem ser consideradas/ Depois de alguma e>perincia com o meio am&iente, o
agente pode tomar decis7es &aseado nas recompensas/ Se em determinada situao o agente
o&teve &astante recompensa ao tomar determinada deciso, ele tomar6 essa deciso/
C>istem dois tipos de aprendi-ados por re'oro &asicamente9 o aprendi-ado passivo e o ativo/
Jo aprendi-ado passivo, o agente sempre toma decis7es aleatrias no per2odo de aprendi-ado
para o&ter &astante in'ormao/ Csse tipo de aprendi-ado normalmente demora mais para
convergir para um &om resultado mas normalmente converge para resultado melhores/ Jo
aprendi-ado ativo, o agente aprende utili-ando o conhecimento %6 ad$uirido para tentar agir
&em desde o comeo/ Jesse tipo de aprendi-ado, o agente normalmente converge mais r6pido
para uma &oa soluo mas normalmente no converge para uma soluo to &oa $uanto o
aprendi-ado passivo/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io A
2.4.2. *lgoritmo 0en4tico
#lgoritmo gen4tico 4 um m4todo de &usca da computao inspirado na gen4tica/ 5 algoritmo
gen4tico e>ige uma 'uno de 'itness, $ue 4 uma 'uno $ue in'orma o $uo perto do melhor
resultado a$uela entrada est6/ Depois de de'inida a 'uno 4 gerado uma populao inicial,
$ue 4 normalmente gerada aleatoriamente/ # populao 4 um con%unto de indiv2duo, $ue 4
uma entrada para a 'uno de 'itness/ 5 pr>imo passo 4 avaliar toda a populao na 'uno
de 'itness por$ue os melhores tendem a ser escolhidos para a reproduo, atrav4s do algoritmo
de seleo/ # reproduo 4 pegar dois indiv2duos da populao e gerar um novo indiv2duo
com uma parte dos valores de cada um dos dois indiv2duos atrav4s do algoritmo de
reproduo/ Ja reproduo pode haver mutao, $ue 4 um valor aleatrio colocado no
indiv2duo gerado $ue no era de nenhum dos dois indiv2duos geradores/ # populao segue
reprodu-indo at4 encontrar um indiv2duo com um valor aceit6vel na 'uno de 'itness ou at4
$ue outra condio $ual$uer acontea, como um limite na $uantidade de reprodu7es se%a
atingido, e isso 4 a condio de parada K?5,,#JD, =ED, )USSC,; J5)+:R, =EE<N/
#s implementa7es variam pela escolha de representao de um indiv2duo, 'uno de 'itness,
algoritmo de reproduo, pro&a&ilidade de mutao, algoritmo de seleo e a condio de
parada/ Cm geral, o algoritmo gen4tico consegue &ons resultados com uma &usca muito
menor $ue uma &usca aleatria ou uma &usca de por todos os casos/
2.". Pro<a<ilidade de )encer
Calcular a pro&a&ilidade de vencer em po.er e>ige um m4todo por$ue no 4 um c6lculo
intuitivo/ W essencial $ue o m4todo se%a ao mesmo tempo preciso e r6pido de calcular por$ue
no treinamento de %ogadores evolutivos 4 necess6rio 'a-er esse c6lculo milhares e at4 milh7es
de ve-es/ Jo 'oi encontrado um algoritmo timo para esse c6lculo/ Considerando, por
e>emplo, o 'lop/ Trs cartas na mesa, sete advers6rios/ 0ara calcular a chance de vencer 4
nesss6rio considerar $uais cartas podem ver ainda no turn e no river al4m das cartas de cada
um dos sete %ogadores/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io D
2.".1. For3a 5ruta
Csse m4todo 4 preciso ao e>tremo e lento ao e>tremo tam&4m/ Cle simplesmente considera
todas as possi&ilidades e veri'ica a ta>a de vitrias/ Jo 'lop com sete advers6rios, a
$uantidade de possi&ilidades, por permutao, 49
3D3A3<333B33=3!BEB"BDBAB<B3BBBB=B!
DA<3B=
=!
3
F+rmula 39 e6emplo de ;uantidade de com<ina3=e( em um #ogo no flop com (ete ader(>rio(
Considerando $ue, segundo e>perimentos &em otimi-ados, um computador comum consegue
calcular cerca de mil pro&a&ilidades de vencer por segundo, e supondo $ue 'osse utili-ado um
&ilho de computadores em paralelo para 'a-er o c6lculo, e cada ve- $ue 'osse necess6rio
calcular por 'ora &ruta a pro&a&ilidade de vencer, seria necess6rio B= anos para apenas um
c6lculo/ 0or isso, essa soluo 4 invi6vel/
2.".2. -onte ,arlo
Csse m4todo KL:M:0WD:# (WT5D5 DC (5JTC C#),5, !!"N 4 parecido com o m4todo
'ora &ruta com a vantagem de ser e>tremamente r6pido/ W um m4todo estat2stico para
apro>imar 'un7es comple>as/ Utili-ando8a na pro&a&ilidade de vencer, ao inv4s de testar
todas as possi&ilidades por 'ora &ruta at4 chegar na proporo e>ata de vitrias e derrotas, 4
'eito apenas alguns testes aleatrios at4 $ue a proporo de vitrias e derrotas se esta&ili-e e
varie at4 uma porcentagem tolerante/ Segundo e>perimentos, uma simulao de apenas mil
%ogos tem como resultado uma pro&a&ilidade de vencer com uma margem de erro de menos
de cinco porcento/
/A/ 5utras Solu7es
(uitos %ogadores arti'iciais de po.er, tam&4m conhecidos como po.er&ots, %6 'oram
desenvolvidos/ C>istem at4 torneios K*5?#JS5J, !!DN de po.er&ots, como o !!D ###:
Computer 0o.er Competition Jo8,imit event ocorrido no ano de !!D/ Por e6emplo )e6<ot 4
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io "
um po'er<ot de(enolido pelo Onier(it. of *l<erta ,omputer Po'er Re(earc$ 0roupE ;ue
utili2a o algoritmo minima6 K05MC)#:L:M:, !!"N. 1.per<orean77E outro <otE foi o
encedor do 277& ***D ,omputer Po'er ,ompetition Co-?imit eentE e utili2a - Ca($
@;uili<riumE ;ue 4 <a(eado em Ca($-@;uili<rium. P Ca($-@;uili<rium 4 um con#unto de
e(trat4gia( utili2ada( por cada #ogador em ;ue ningu4m ten$a antagem em mudar FCDS*C
et al.E 2777G.
Segue a lista de alguns po.er&ots dispon2veis no mercado, gratuitos ou pagos, acessado !" de
setem&ro de !!" K05MC)#:L:M:, !!"N9
#dvanced 0o.er Calculator9 $ttp9WW%%%.pro$i<itedpo'er.com
Blu''Bot9 $ttp9WW%%%.<luff<ot.comWonlineWpla..p$p
RoldBullion9 $ttp9WW%%%.c<loom.comWpo'erW0old5ullion.$tml
?oldem ?aI.9 $ttp9WW%%%.$oldem$a%'.com
?oldem 0irate9 $ttp9WW%%%.$oldempirate.com
?oldem :nspector a/./a/ 5nline ?oldem :nspector9 $ttp9WW%%%.po'erin(pector.com
(agic ?oldem9 $ttp9WW%%%.magic$oldem.com
(andra.er9 $ttp9WW%%%.c$eapla<(.comWu'WSoft%are(W-andra'er.$tm
5pen ?oldem Bot9 $ttp9WWopen-$oldem-<ot.;arc$ie.org
0o.er#nalGtics9 $ttp9WW%%%.po'eranal.tic(.org
0o.er #ndroid9 $ttp9WW%%%.po'erandroid.com
0o.er BotX9 $ttp9WWpo'er<otplu(.com
0o.er Bloodhound9 $ttp9WW%%%.t$epo'er$ound.com
0o.er Crusher9 $ttp9WW%%%.po'ercru($er.com
0o.er Cdge9 $ttp9WW%%%.po'er-edge.com
0o.er :nspector a/./a/ 5nline 0o.er :nspector9 $ttp9WW%%%.po'erin(pector.com
0o.er (ate9 $ttp9WW%%%.erudite(.(.comWPo'er-ateWinde6.$tml
0o.er 0rophecG9 $ttp9WW%%%.po'erprop$ec..com
0o.er Sherloc.9 $ttp9WW%%%.po'er($erloc'.com
Sit n@ Ro Brain9 $ttp9WW%%%.po'er<rain(.netW(itandgo<rain.$tml
Te>as ?oldem Bot9 $ttp9WW%%%.te6a(-$oldem-<ot.com
Lin?oldem9 $ttp9WW%%%.%in$oldem.net
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io E
50 M(,O'O"O&*A
Foi desenvolvido um programa de %ogo de po.er na modalidade no8limit $ue aceita %ogadores
gen4ricos, $ue pode ser um %ogador humano 1 $ue pega as entradas do teclado, $uatro
%ogadores est6ticos 1 constante, aleatrio, (FS e )?, e um %ogador evolutivo 1 aprendi-ado
por re'oro/ Todos esses %ogadores %ogam entre si milhares de ve-es e de diversas 'ormas
poss2veis9 me(a( entre a =! %ogadores e com %ogadores aleatoriamente escolhidos tanto no
treinamento como na veri'icao de desempenho dos %ogadores/ Cm todos os %ogos, o valor de
dinheiro inicial 'oi =!!! e o valor do small &lind 'oi =!/
B/=/ Ferramenta e linguagem
Todos os algoritmos 'oram implementados em linguagem Mat"aY e )/ # opo por
(at,a& 'oi pela 'acilidade em tra&alhar com matri-es, $ue 'oi amplamente utili-ado/ # opo
por C 'oi para implementar os algoritmos cr2ticos, $ue e>igem grande desempenho, $ue so o
de c6lculo de pro&a&ilidade de vencer e o treinamento do %ogador de aprendi-ado por re'oro/
:n'orma7es so&re a linguagem (at,a& pode ser encontrado em K(#T,#B, !!"N e so&re a
linguagem C pode ser encontrado em KCCMC,, !!!N/
B// Treinamento
5 treinamento dos %ogadores deveria ser r6pido para se tornar vi6vel a tentativa de diversas
'ormas de treinamento/ # estrat4gia utili-ada para o treinamento com este o&%etivo 'oi dividir
em duas etapas onde a primeira etapa 4 'eita apenas uma ve- e a segunda etapa, $ue necessita
de muitos a%ustes, 4 'eita muitas ve-es/
# primeira etapa 'oi registrar um histrico de %ogos, decis7es e recompensas/ Jessa &ase 'oi
registrado todos as decis7es de %ogadores com di'erentes m4todos em v6rios %ogos e a
recompensa da$uela deciso, $ue s 4 preenchida no 'inal do %ogo e 4 replicada para todas as
a7es $ue levaram T$uele recompensa/ # in'ormao contida nessa &ase 4 a seguinte9
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io B!
+ome 'escri1$o
05T Soma da $uantidade de dinheiro apostado por todos
5DDS )elao do 05T com o dinheiro apostado
)#:SC Fuantidade de dinheiro $ue precisa usar para continuar no %ogo
C?#JCC 0ro&a&ilidade de vencer o %ogo $uando todos mostram as cartas
)5UJD Cm $ue rodada 8 pre8'lop, 'lop, turn ou river 8 o %ogo se encontra
F5,,5LC)S JSmero de %ogadores $ue ainda vo decidir na rodada atual
:JR#(C JSmero de %ogadores $ue no 'ugiram nem sa2ram
J0,#VC)S JSmero de %ogadores
FTV)#:SC Fuantidade de BCT / )#:SC 'eito por todos
Ta<ela 19 dimen(=e( do e(tado do #ogo
#s in'orma7es contidas no estado do %ogo ainda no comentadas so o 5DDS, o
F5,,5LC)S, o :JR#(C, o J0,#VC)S e o FTV)#:SC/ 5DDS 4 apenas a relao do
dinheiro do 05T em relao ao dinheiro apostado, por e6emploE um P88S igual a " (ignifica
;ue tem no PPT " e2e( o alor apo(tado pelo #ogador. 5 F5,,5LC)S indica $uantos
%ogadores ainda vo decidir algo/ :sso por$ue o Sltimo a decidir tem vantagem em relao ao
primeiro a decidir por$ue o Sltimo %6 sa&e $uem aumentou e $uem no/ :JR#(C indica
$uantos %ogadores ainda no 'ugiram/ J0,#VC)S indica $uantos %ogadores esto %ogando,
independente de ter 'ugido, 'alido ou ainda estar em %ogo/ 5 FTV)#:SC indica a $uantidade
de ve-es $ue algum %ogador aumentou a aposta e 4 importante por$ue %ogos $ue houveram
muito aumento de aposta pode indicar $ue muitos %ogadores esto com &oas chances de
vencer/
Depois de preenchida essa &ase de dados com milhares de decis7es, 'oi iniciado a segunda
etapa, $ue consiste em passar para todos os %ogadores in'orma7es de treinamento $ue so
essas in'orma7es do histrico de %ogos/ 5s %ogadores est6ticos ignoram essa in'ormao
assim como os humanos/ Om e6emplo de uma lin$a de informa3:o de((a <a(e de dado(9
primeira rodadaE c$ance de encer de 37XE PPT de "7E P88S de 3E 4 nece((>rio pagar 27
para continuar no #ogoE foi tomada a deci(:o de R*DS@ 47E recompen(a de "7.
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io B=
B/B/ +eri'icao de desempenho
Depois do treinamento 'oi 'eito a veri'icao do desempenho de todos os %ogadores/ Cssa
medio 'oi 'eita atrav4s da comparao de proporo de vitria de cada %ogador em centenas
de mesas/ Uma mesa 4 um con%unto de %ogadores $ue comeam com a mesma $uantidade de
dinheiro e %ogam diversas ve-es at4 $ue so&re apenas um %ogador com dinheiro ou at4 atingir
um nSmero limite de %ogos, normalmente em torno de !, o $ue acontecer primeiro/ 5
vencedor da mesa 4 o %ogador $ue tiver mais dinheiro no 'inal/
B/3/ :mplementao dos *ogadores #rti'iciais
Cada %ogador tem dois tipos de a7es9 @tomar uma deciso@ e @treinar@/ Ja ao @tomar uma
deciso@, cada %ogador tem como entrada o estado do jogo/ 5 @estado do %ogo@ 4
multidimensional e suas dimens7es so as mesmas in'orma7es guardadas na &ase de dados,
$ue so9 05T, 5DDS, )#:SC, C?#JCC, )5UJD, F5,,5LC)S, :JR#(C, J0,#VC)S,
FTV)#:SC/
0ara simpli'icar a implementao e o treinamento dos %ogadores, 'oi esta&elecido $ue cada
%ogador tem como sa2da da ao @tomar uma deciso@ um valor discreto entre = e A, $ue 4 a
decis$o discretizada9
)3digo 'escri1$o
= Fugir
Continuar no %ogo
B #umentar pouco9 e$uivalente a a 3 small &lind
3 #umentar m4dio9 e$uivalente a A a =" small &lind
< #umentar muito9 e$uivalente a ! a 3! small &lind
A #umentar tudo9 all8in
Ta<ela 29 deci(:o di(creti2ada
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io B
# ao @treinar@ no tem nenhum retorno pois ela apenas altera o estado interno de cada
%ogador/ Jote $ue %ogadores humanos e est6ticos no 'a-em nada nessa ao/ # entrada dessa
ao 4 um @estado do %ogo@, uma @deciso discreti-ada@ e uma recompensa/ # recompensa 4
de'inida por R 9
R = FD
F+rmula 49 recompen(a de um #ogo
5nde F 4 a $uantidade de dinheiro $ue o %ogador tinha $uando aca&ou o %ogo e D 4 a
$uantidade de dinheiro $ue o %ogador tinha $uando comeou o %ogo/
3.4.1. *leat+rio(
Csses %ogadores tomam a deciso discreti-ada aleatria na seguinte proporo9
Propor1$o 'escri1$o
==Z Fugir
33Z Continuar no %ogo
==Z #umentar pouco
==Z #umentar m4dio
==Z #umentar muito
==Z #umentar tudo
Ta<ela 39 8i(tri<ui3:o da deci(:o do #ogador aleat+rio
3.4.2. ,on(tante(
Csses %ogadores tomam sempre a mesma deciso discreti-ada/
3.4.3. -at$ematicall. Fair Strateg. - -FS
Csses %ogadores tomam a deciso discreti-ada de'inida por 8 na 'rmula9
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io BB
(e P = ! 8=
@=
PP=
P
-=P@R
)=
,@=!!,-
=!!
(e P ! e ) T 8 ==
(e P ! e T ) T 8=
(e P ! e T ) <T 8 =B
(e P ! e <T ) =!T 8 = 3
(e P ! e =!T ) =<T 8 =<
(e P ! e ) =<T 8= A
F+rmula "9 deci(:o de um #ogador -FS
5nde ) 4 a relao (FS KFrmula =N e T 4 uma constante $ue 'oi testado v6rios valores/
0ara chegar em ) 'oi necess6rio usar outra 'rmula $ue o&t4m o mesmo resultado da relao
(FS KFrmula =N por$ue o programa no o'erece as vari6veis e>atamente como descrito na
'rmula/ @ 4 a $uantidade de dinheiro do advers6rio, P 4 o 05T, P 4 o 5DDS, R 4 o
)#:SC, - 4 a $uantidade de dinheiro apostado pelo %ogador e , 4 a C?#JCC em
porcentagem/ Caso o ) , $ue 4 o 5DDS, se%a igual a -ero, signi'ica comeo de %ogo onde o
%ogador no apostou nada ainda/ Jesse caso, a deciso dele 4 sempre entrar no %ogo/
3.4.4. /ean Rac$lin e 0ar. 1iggin( R1
Csses %ogadores tomam a deciso discreti-ada de'inida por 8 9
)=
P
,=F? R=
(e ) T 8= =
(e T ) !T 8 =
(e !T ) <!T 8= B
(e <!T ) =!!T 8 =3
(e =!!T ) =!!!T 8= <
(e ) =!!!T 8= A
F+rmula &9 deci(:o de um #ogador R1
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io B3
5nde ) 4 a relao )? KFrmula N, P 4 o 05T, , 4 o nSmero de ve-es $ue algu4m
decidiu )#:SC / BCT, F 4 o nSmero de %ogadores $ue ainda vo %ogar nesta rodada, ? 4 o
nSmero de %ogadores $ue no 'ugiram, R 4 o )#:SC e T 4 uma constante $ue 'oi testado
diversos valores/ 5 )#:SC 'oi alterado para com o OX=P para $ue no houvesse diviso por
-ero/
3.4.". *prendi2ado por Refor3o
Csse %ogador internamente tem matri- com o nSmero de dimens7es iguais ao nSmero de
dimens7es do estado do %ogo KTa&ela =N/ Cada dimenso tem uma $uantidade de n2veis e um
intervalo correspondente a cada n2vel e o estado do %ogo se en$uadrar6 em um n2vel se o
intervalo do estado corresponder T$uele n2vel/ Por e6emploE (e a dimen(:o PPT da matri2
tem 7 nMei( e cada nMel tem o interalo de 13E3E um e(tado do #ogo em ;ue o PPT e(te#a em
2! (e en;uadrar> no 3Y nMel de(ta dimen(:o da matri2 por;ue o 1Y nMel ai de 7 a 13E3 e o
2Y nMel ai de 13E3 a 2&E&. Caso o valor da dimenso do estado do %ogo se%a maior $ue o
limite da matri-, esse valor 4 colocado no Sltimo n2vel/ #l4m destas dimens7es, a matri- tem
mais duas dimens7es, uma para indicar a deciso tomada e outra para indicar se o resultado
'oi pre%u2-o ou lucro/ 5 conteSdo de cada c4lula da matri- 4 os resultados re'erentes T$uele
estado do %ogo/
# ao @treinar@ ir6 colocar na matri-, na posio re'erente ao estado do %ogo, as recompensas
KFrmula 3N/
# ao @tomar deciso@ consulta a matri- na posio re'erente ao estado do %ogo e o&t4m uma
lista de pares @deciso discreti-ada@ / @recompensa@/ Com essa lista, toma8se uma deciso
&aseado na 'rmula9
8=-*N r 6
F+rmula 79 deci(:o do #ogador de aprendi2ado por refor3o
5nde 8 4 a deciso 4 a deciso do %ogador, $ue 4 a deciso 6 $ue retorna o m6>imo valor
na 'uno r 6 / # 'uno r 6 , $ue 4 a recompensa de uma deciso 6 , 4 de'inida por9
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io B<
r 6=

i ==
n
e 6
i
n
F+rmula 89 recompen(a de uma deci(:o
5nde e 6 4 o con%unto de recompensas em $ue a deciso tomada 'oi 6 / 0ortanto, o %ogador
decide a deciso $ue o&teve uma melhor m4dia de recompensas na proporo Ke>emplo na
Figura =N/
Figura 19 @6emplo de uma (itua3:o de #ogo ;ue o #ogador por refor3o con(ulta (ua <a(e de con$ecimento e
decide 2 ;ue (ignifica Acontinuar no #ogoB.
5 %ogador de aprendi-ado por re'oro tem diversas constantes, di'erentemente dos %ogadores
citados at4 agora $ue tinham no m6>imo =/ # matri- interna desse %ogador contem nove
dimens7es 8 C?#JCC, 05T, )#:SC, 5DD, FTV)#:SC, J0,#VC)S, F5,,5LC)S,
)5UJD e :JR#(C 8 $ue precisam de uma constante para o intervalo $ue cada n2vel da
matri- representa, com e>ceo da dimenso )5UJD, $ue %6 'oi pr48de'inida como tamanho
, sendo o primeiro re'erente a primeira rodada e o segundo re'erente as demais rodadas/ Cada
vari6vel deveria tam&4m ter a $uantidade de n2veis mas, para simpli'icar, e>iste apenas duas
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io BA
constantes O$uantidade de n2veisP, uma para 5DDS, 05T, )#:SC e C?#JCC, chamado de
OB:R FTVP e outra para FTV)#:SC, J0,#VC)S, F5,,5LC)S e :JR#(C, chamada de
O,:TT,C FTVP, $ue totali-a de- constantes/ Se cada vari6vel 'ossem testados apenas <
valores di'erentes, a $uantidade de testes seria
<
=!
=E/DA</A<
, o $ue impossi&ilita testar
todos os casos/ 0ara encontrar uma &oa con'igurao destas constantes 'oi utili-ado #lgoritmo
Ren4tico/ 5s genes so essas de- constantes, onde os valores m2nimo e m6>imo para cada
uma das constantes so9
Vari8%el Mnimo M8>imo
C?#JCC < <
05T = <!
)#:SC = <
5DD = =!
FTV)#:SC = =!
J0,#VC)S = =!
F5,,5LC)S = =!
:JR#(C = =!
B:R FTV =!
,:TT,C FTV 3
Ta<ela 49 ?imite( u(ado( pelo algoritmo gen4tico para encontrar <oa( con(tante( para o #ogador por Refor3o
# 'uno 'itness 4 a soma da $uantidade vitrias diversas disputas, cada disputa com de-
me(a(E com o *ogador por )e'oro usando =! milh7es de dados preenchidos na sua matri-
interna/ Foram usadas sete disputas, uma contra o %ogador (FS com constante T [ =, uma
contra o (FS com T[<, uma contra o *ogador #leatrio, uma contra o *ogador Constante $ue
decide OcontinuarP, uma contra o *ogador Constante $ue decide Oaumentar muitoP, uma
contra o *ogador )? com constante T[!,= e uma contra o *ogador )? com T[!,!!=/ 5
resultado da 'uno 'itness 4 a soma ponderada de vitrias das disputas com peso contra o
*ogador (FS, peso = contra o *ogador Constante, peso = contra o *ogador )? e peso 3 contra
o *ogador #leatrio/
# populao tem tamanho =! e a reproduo 4 'eita na seguinte proporo9 os melhores
so&revivem para a pr>ima gerao, = 4 mutao e D so produtos de crossover KTa&ela <N/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io BD
0ot Chance )aise 5dds FtG)aise FolloIers :ngame JplaGers ,F BF
0ai = =3 < D E = 3 B " B D
0ai D ! B 3 = B < =!
Filho D ! D E = = B B B D
Ta<ela "9 @6emplo de um ,ro((oer utili2ado para a#u(tar o #ogador por Refor3o.
# 'uno de seleo escolhida 'oi a stochastic uni'orm K(#T,#B, !!"N/ Cssa 'uno gera
uma linha onde cada indiv2duo tem um pedao da linha proporcional ao 'itness/ Um ponto
aleatrio da linha 4 selecionado e o indiv2duo $ue estiver na$uela 'ai>a da linha 4 o primeiro
pai escolhido/ 5s outros pais so selecionados pela distri&uio uni'orme de pontos pela
linha, igualmente espaados/
B/</ 0ro&a&ilidade de +encer
0ara o c6lculo de pro&a&ilidade de vencer 'oi utili-ado apenas o m4todo (onte8Carlo pela
necessidade de e'icincia e pela prov6vel preciso aceit6vel/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io B"
70 A+."*S( 'OS R(S-",A'OS
5 o&%etivo do tra&alho 4 'ormular e procurar algoritmos $ue %oguem &em 0o.er/ 0ara cumprir
esse o&%etivo, 'oi 'eito uma comparao de nSmero de vitrias, em porcentagem, com
con'ronto direto entre %ogadores com m4todos di'erentes/ #l4m dos %ogadores 'oi analisado
tam&4m o m4todo de pro&a&ilidade de vitria, $ue 4 uma in'ormao dispon2vel para todos os
%ogadores, tanto no treinamento $uanto na analise de desempenho dos %ogadores/ 0ara o
%ogador evolutivo 'oi 'eito uma an6lise um pouco maior, contendo a sua evoluo e as
constantes usadas/
3/=/ +eri'icao do m4todo (onte8Carlo
5 m4todo (onte8Carlo se mostrou e'iciente em calcular a pro&a&ilidade de vencer com
apenas B!! simula7es de %ogos/ Com essa $uantidade de simula7es, a pro&a&ilidade de
vencer 4 o&tida com uma margem de erro de <Z apro>imadamente/ # pro&a&ilidade de vencer
no so're grande variao com mais simula7es, como mostra o gr6'ico a&ai>o/ :sso se repete
em todas as situa7es de %ogo e com $ual$uer $uantidade de %ogadores/ # linha em vermelho
mostra a regresso linear simples desse gr6'ico, mostrando $ue o valor se mantem constante
com o aumento no nSmero de simula7es/ Uma in'ormao $ue no est6 sendo mostrada no
gr6'ico 4 $ue depois de =!!/!!! simula7es da mesma situao, a pro&a&ilidade de vencer se
manteve em BB,<3<Z, muito pr>imo ao valor o&tido com B!! simula7es/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io BE
0r>fico 19 @6emplo de utili2a3:o do m4todo -onte-,arlo para calcular a pro<a<ilidade de encer
3// Fuantidade de mesas necess6rias para avaliar um %ogador
5 m4todo (onte8Carlo tam&4m 'oi usado para encontrar a $uantidade de %ogos necess6rios
para avaliar o desempenho de um %ogador em relao ao outro/ 5 gr6'ico a&ai>o, e>emplo de
resultados dos %ogos em relao a $uantidade de mesas %ogadas, mostra $ue depois de =!!
mesas, a proporo de vitrias permanece apro>imadamente constante ao longo de mais
mesas, portanto esse 'oi o valor utili-ado para avaliao de desempenho/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io 3!
0r>fico 29 )erifica3:o da ;uantidade de me(a( nece((>ria( para aaliar o de(empen$o de um #ogador
3/B/ Constantes de con'igurao e evoluo do *ogador por )e'oro
0ara o&ter as constantes deste %ogador 'oi utili-ado algoritmo gen4tico e tentativas atrav4s de
&om senso/ Uma limitao para o algoritmo gen4tico 'oi a 'uno de 'itness pois 'oi
considerado apenas =! mesas para avaliar o desempenho de um con%unto de constantes/
Segundo o Rr6'ico , uma disputa de =! mesas 4 muito inst6vel e pode ter levado a &usca
gen4tica ao 'racasso/ 0or outro lado, se 'osse usado =!! mesas, o tempo para e>ecutar a &usca
gen4tica seria cerca de vinte dias/ # limitao da tentativa atrav4s do &om senso 4 a pouca
$uantidade de tentativas/ Cn$uanto o algoritmo gen4tico testou milhares de com&ina7es de
constantes, a tentativa atrav4s do &om senso se limita a poucas de-enas/ 5s resultados 'oram
interessantes por$ue o algoritmo gen4tico encontrou uma &oa con'igurao de constantes para
a $uantidade de dados utili-ada na &usca/ 0or4m, $uando a $uantidade de dados aumenta, o
%ogador piora o desempenho/ # &usca pelo &om senso o&teve uma &oa con'igurao de
maneira gradual e cont2nua mas tam&4m houve piora no desempenho a partir de uma
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io 3=
$uantidade de in'ormao/ 5 erro nos gr6'icos 4 a soma da proporo de derrotas da 'uno
de 'itness/
0r>fico 39 Progre((o do #ogador com o aumento de informa3:o com a mel$or configura3:o encontrada pelo
algoritmo gen4tico
0r>fico 49 Progre((o do #ogador com o aumento de informa3:o com a mel$or configura3:o encontrada pelo
<om (en(o
#s constantes encontradas por cada m4todo 'oram9
0 10 100 600 800 1000
0
100
200
300
400
500
600
700
800
Melhor configurao por Algoritmo Gentico
a!o" #$ 100%000&
'
o
m
a

!
a
"

!
e
r
r
o
t
a
"

#
(
&
0 10 100 600 800 1000
0
100
200
300
400
500
600
700
800
Melhor configurao por )om 'en"o
a!o" #$ 100%000&
'
o
m
a

!
a
"

!
e
r
r
o
t
a
"

#
(
&
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io 3
)onstante Algoritmo &enGtico !om Senso
:ntervalo 5DDS E,A
:ntervalo C?#JCC B,B =!
:ntervalo 05T BD,3 =!
:ntervalo )#:SC =B, <
:ntervalo F5,,5LC)S ,A =
:ntervalo J0,#VC)S B,< Jo usado
:ntervalo FTV)#:SC B,< Jo usado
:ntervalo :JR#(C <,A Jo usado
B:R FTV 3 =!
,:TT,C FTV
Ta<ela &9 ,on(tante( encontrada( para (er utili2ado pelo /ogador @(for3o
Um retrato das decis7es tomadas em diversas situa7es pelo %ogador por es'oro utili-ando a
con'igurao Bom Senso com A! milh7es de dados de in'orma7es pode ser visuali-ado na
'igura a&ai>o, sendo cada $uadrado de cor a melhor deciso de um estado do %ogo/
Figura 29 @6emplo do mapa de con$ecimento do #ogador por refor3o (endo cada ponto um e(tado do #ogo
pintado com a deci(:o a (er tomada
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io 3B
3/3/ Disputas
Cada con'ronto 4 'ormado por !! mesas/ Cada mesa contem um nSmero par de a =!
%ogadores igualmente distri&u2dos, sendo metade %ogadores de um m4todo e a outra metade
outro m4todo, e contem at4 3! %ogos ou at4 $ue um %ogador ganhe todo o dinheiro dos
advers6rios, o $ue ocorrer primeiro/ Fuando cada mesa aca&a, 4 pontuado a vitria de um dos
dois m4todos con'rontados/ #o 'im de =!! mesas 4 'eita a proporo de vitrias de cada
m4todo/ Cada %ogo comea com =!!! de dinheiro para cada %ogador e o Small Blind 4 =! e a
ordem dos %ogadores 4 aleatria/
4.4.1. -FS 6 *leat+rio
0ara essa avaliao 'oi testado v6rios poss2veis valores para a constante T do %ogador (FS/
(FS 4 um %ogador $ue provavelmente mostraria melhores resultados $ue o %ogador aleatrio
pois o (FS %oga de acordo com a pro&a&ilidade de vencer e os resultados comprovaram
KRr6'ico <N/ :sso demonstra $ue 0o.er no 4 somente sorte pois uma deciso inteligente
melhora o desempenho do %ogador/
Rr6'ico <9 *ogador (FS > *ogador #leatrio
0*2 0*4 0*7 1 2 4 5 6 7 10 20
0
10
20
30
40
50
60
70
80
+0
100
M,'
Aleat-rio
.on"tante / !o M,' #"mall 0lin!&
1
r
o
p
o
r

o

!
e

2
i
t
-
r
i
a
"

#
(
&
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io 33
4.4.2. -FS 6 ,on(tante
Jessa disputa 'oram testados apenas alguns valores principais para o (FS e todas as decis7es
poss2veis para o %ogador constante com e>ceo de fugir/ Cra prov6vel $ue igualmente o (FS
o&tivesse melhores resultados por considerar a pro&a&ilidade de vencer, ao contr6rio do
%ogador constante $ue sempre tem o mesmo comportamento/ Como o %ogador (FS %oga %usto
de acordo com a pro&a&ilidade de vencer e 'oge $uando a pro&a&ilidade de vencer no 4 &oa,
em geral aumentar muito a aposta 'a- o %ogador (FS 'ugir/ 0or outro lado, aceitar as
aumentadas de aposta do %ogador (FS 4 a pior coisa a ser 'eita pois a longo pra-o ele ter6
timos ganhos por %ogar e>atamente de acordo com a 'ora do seu %ogo/ 5 %ogador constante
o&teve melhores resultados $uando sua deciso era sempre aumentar a aposta por$ue 'a-ia o
(FS 'ugir sempre, mas no 'oi su'iciente para vence8lo pois $uando o aumento de aposta
'avorecia o (FS, este recuperava todo o pre%u2-o e vencia/ Segue os resultados gra'icamente9
0r>fico &9 /ogador -FS 6 /ogador ,on(tante
4.4.3. *leat+rio 6 ,on(tante
1

3

.
o
n
t
i
n
u
a
r
1

3

A
u
m
e
n
t
a
r

p
o
u
c
o
1

3

A
u
m
e
n
t
a
r

m

!
i
o
1

3

A
u
m
e
n
t
a
r

m
u
i
t
o
1

3

A
u
m
e
n
t
a
r

t
u
!
o
5

3

.
o
n
t
i
n
u
a
r
5

3

A
u
m
e
n
t
a
r

p
o
u
c
o
5

3

A
u
m
e
n
t
a
r

m

!
i
o
5

3

A
u
m
e
n
t
a
r

m
u
i
t
o
5

3

A
u
m
e
n
t
a
r

t
u
!
o
1
0

3

.
o
n
t
i
n
u
a
r
1
0

3

A
u
m
e
n
t
a
r

p
o
u
c
o
1
0

3

A
u
m
e
n
t
a
r

m

!
i
o
1
0

3

A
u
m
e
n
t
a
r

m
u
i
t
o
1
0

3

A
u
m
e
n
t
a
r

t
u
!
o
0
10
20
30
40
50
60
70
80
+0
100
M,'
.on"tante
.on"tante / !o M,' #"mall 0lin!& 3 eci"o !o 4oga!or .on"tante
1
r
o
p
o
r

o

!
e

5
i
t
-
r
i
a
"

#
(
&
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io 3<
#$ui, o %ogador constante usou todas as decis7es poss2veis com e>ceo de 'ugir/ 5s
resultados mostraram uma insigni'icante vantagem para o %ogador constante9
0r>fico 79/ogador *leat+rio 6 /ogador ,on(tante
4.4.4. R1 6 *leat+rio
5 %ogador )? %oga com &ase no nSmero de ve-es $ue os advers6rios aumentaram a aposta, no
nSmero de %ogadores $ue ainda tem no %ogo, resumindo, em in'orma7es $ue podem di-er
como esto os advers6rios/ Como o %ogador aleatrio %oga $ual$uer coisa, essa in'ormao 4
pode ser de pouca utilidade/ (as mesmo assim, se o )? aposta mais $uando ningu4m est6
apostando, ele pode vencer por$ue os %ogadores aleatrios 'ugiram/ 5s resultados constataram
uma vantagem para o )?9
.
o
n
t
i
n
u
a
r
A
u
m
e
n
t
a
r

p
o
u
c
o
A
u
m
e
n
t
a
r

m

!
i
o
A
u
m
e
n
t
a
r

m
u
i
t
o
A
u
m
e
n
t
a
r

t
u
!
o
0
10
20
30
40
50
60
.on"tante
Aleat-rio
eci"o !o 4oga!or .on"tante
1
r
o
p
o
r

o

!
e

5
i
t
-
r
i
a
"

#
(
&
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io 3A
0r>fico 89 /ogador R1 6 /ogador *leat+rio
4.4.". R1 6 ,on(tante
Jessa disputa e>iste um pro&lema para o )?9 como o %ogador )? de acordo com a ao do
advers6rio, um advers6rio $ue %oga constante 'ar6 o %ogador )? %ogar constante tam&4m,
'a-endo com $ue 'i$ue imprevis2vel os resultados9
0
*
0
0
0
1
0
*
0
0
1
0
*
0
1
0
*
0
5
0
*
1
0
*
51
0
10
20
30
40
50
60
70
80
+0
100
67
Aleat-rio
.on"tante / !o 8oga!or 67
1
r
o
p
o
r

o

!
e

5
i
t
-
r
i
a
"

#
(
&
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io 3D
0r>fico !9 /ogador ,on(tante 6 /ogador R1
4.4.&. R1 6 -FS
5 (FS 'oge $uando no tem muita chance de vencer e o advers6rio aumenta muito a aposta/
0or isso, um %ogador agressivo 4 mais 'orte contra o (FS do $ue um %ogador menos
agressivo/ 0or4m, muita agressividade pode 'a-er com $ue o (FS se aproveite nas melhores
situa7es e ganhe muito dinheiro em apenas uma rodada/ Csse 'oi o resumo do resultado dessa
disputa/ 5 )? 4 mais agressivo $uanto menor 'or a constante T / 5 )? 4 o algoritmo $ue
poderia vencer o (FS por se aproveitar dos momentos $ue o (FS no est6 aumentando para
aumentar as apostas, mas o m6>imo $ue ele conseguiu 'oi $uase um empate/ 5 %ogador (FS
utili-ou apenas um valor para sua constante T , o valor O=P, $ue e>perimentalmente
demonstrou &ons resultados9
0
*
0
0
1

3

.
o
n
t
i
n
u
a
r
0
*
0
0
1

3

A
u
m
e
n
t
a
r

m

!
i
o
0
*
0
0
1

3

A
u
m
e
n
t
a
r

t
u
!
o
0
*
0
1

3

.
o
n
t
i
n
u
a
r
0
*
0
1

3

A
u
m
e
n
t
a
r

m

!
i
o
0
*
0
1

3

A
u
m
e
n
t
a
r

t
u
!
o
0
*
1

3

.
o
n
t
i
n
u
a
r
0
*
1

3

A
u
m
e
n
t
a
r

m

!
i
o
0
*
1

3

A
u
m
e
n
t
a
r

t
u
!
o
0
10
20
30
40
50
60
70
67
.on"tante
.on"tante / !o 8oga!or 67 3 eci"o !o 8oga!or .on"ntate
1
r
o
p
o
r

o

!
e

5
i
t
-
r
i
a
"

#
(
&
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io 3"
0r>fico 179 /ogador R1 6 /ogador -FS
4.4.7. Refor3o 6 *leat+rio
#pesar de ter sido criado com muita in'ormao aleatria, o %ogador por re'oro conseguiu
vencer o %ogador aleatrio/ Talve- por$ue e>ista realmente a melhor %ogada em cada situao/
0r>fico 119 /ogador Refor3o 6 /ogador *leat+rio
4.4.8. Refor3o 6 ,on(tante
0
*
0
0
1

3

1
0
*
0
0
1

3

5
0
*
0
1

3

1
0
*
0
1

3

5
0
*
1

3

1
0
*
1

3

5
0
10
20
30
40
50
60
70
80
+0
67
M,'
.on"tante / !o 8oga!or 67 3 .on"tante / !o 8oga!or M,'
1
r
o
p
o
r

o

!
e

5
i
t
-
r
i
a
"

#
(
&
0 10 50 100 250 500 600
0
10
20
30
40
50
60
70
80
6ef oro
Aleat-rio
9uanti!a!e !e !a!o" #$100%000& com configurao )om 'en"o
1
r
o
p
o
r

o

!
e

2
i
t
-
r
i
a
"

#
(
&
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io 3E
5 %ogador por re'oro conseguiu aprender um %eito para vencer o %ogador $ue sempre
continua/ 5 %ogador $ue aumenta muito ele conseguiu melhorar o desempenho com mais
in'ormao/
Rr6'ico =9 *ogador )e'oro > *ogador Constante
4.4.!. Refor3o 6 -FS
5 %ogador (FS, $ue parecia ser o %ogador mais di'2cil de vencer, 'oi o mais '6cil/ 5 %ogador
por re'oro teve uma vitria &em signi'icativa/
0

3

.
o
n
t
i
n
u
a
r
1
0

3

.
o
n
t
i
n
u
a
r
5
0

3

.
o
n
t
i
n
u
a
r
1
0
0

3

.
o
n
t
i
n
u
a
r
2
5
0

3

.
o
n
t
i
n
u
a
r
5
0
0

3

.
o
n
t
i
n
u
a
r
6
0
0

3

.
o
n
t
i
n
u
a
r
0

3

A
u
m
e
n
t
a
r

m
u
i
t
o
1
0

3

A
u
m
e
n
t
a
r

m
u
i
t
o
5
0

3

A
u
m
e
n
t
a
r

m
u
i
t
o
1
0
0

3

A
u
m
e
n
t
a
r

m
u
i
t
o
2
5
0

3

A
u
m
e
n
t
a
r

m
u
i
t
o
5
0
0

3

A
u
m
e
n
t
a
r

m
u
i
t
o
6
0
0

3

A
u
m
e
n
t
a
r

m
u
i
t
o
0
10
20
30
40
50
60
70
80
+0
6ef oro
.on"tante
9uanti!a!e !e !a!o" #$100%000& com configurao )om 'en"o 3 !eci"o con"tante
1
r
o
p
o
r

o

!
e

5
i
t
-
r
i
a
"

#
(
&
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io <!
Rr6'ico =B9 *ogador )e'oro > *ogador (FS
4.4.17. Refor3o 6 R1
5 %ogador )? surpreendeu, conseguindo empatar com o %ogador por re'oro $uando
con'igurado com a constante T=!,= / 0or algum motivo, o %ogador no consegue evoluir
contra este %ogador/
0r>fico 149 /ogador Refor3o 6 /ogador R1
4.".11. 8i(puta entre o( mel$ore( de cada
0

3

1
1
0

3

1
5
0

3

1
1
0
0

3

1
2
5
0

3

1
5
0
0

3

1
6
0
0

3

1
0

3

5
1
0

3

5
5
0

3

5
1
0
0

3

5
2
5
0

3

5
5
0
0

3

5
6
0
0

3

5
0
10
20
30
40
50
60
70
80
+0
6ef oro
M,'
9uanti!a!e !e !a!o" #$100%000& com configurao )om 'en"o 3 .on"tante / #M,'&
1
r
o
p
o
r

o

!
e

2
i
t
-
r
i
a
"

#
(
&
0

3

0
*
1
1
0

3

0
*
1
5
0

3

0
*
1
1
0
0

3

0
*
1
2
5
0

3

0
*
1
5
0
0

3

0
*
1
6
0
0

3

0
*
1
0

3

0
*
0
0
1
1
0

3

0
*
0
0
1
5
0

3

0
*
0
0
1
1
0
0

3

0
*
0
0
1
2
5
0

3

0
*
0
0
1
5
0
0

3

0
*
0
0
1
6
0
0

3

0
*
0
0
1
0
10
20
30
40
50
60
70
6ef oro
67
9uanti!a!e !e !a!o" #$100%000& com configurao )om 'en"o 3 .on"tante / #67&
1
r
o
p
o
r

o

!
e

2
i
t
-
r
i
a
"

#
(
&
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io <=
Cssa disputa 'oi 'eita com =! %ogadores em %ogo sendo %ogadores de cada tipo/ 5 (FS tinha
um %ogador com constante T== e outro com T=< / 5 )? tinha um %ogador com constante
T=!,= e outro com T=!,!!= / 5 %ogador constante teve um %ogador $ue decidia sempre
Continuar e outro $ue decidia sempre #umentar (uito/ Foi %ogado <!! mesas e o %ogador
treinado %ogou melhor/ #pesar do %ogador )? ter tido vantagem contra o %ogador por )e'oro
%ogando individualmente, $uando %ogou8se em grupo, o %ogador )? teve um desempenho
ruim/
0r>fico 1"9 8i(puta entre todo( o( #ogadore(
4.".12. Refor3o 6 1umano
Contra %ogadores humanos &em amadores, o %ogador por re'oro o&teve um &om desempenho/
Foram testados de- me(a( e $uatro %ogadores humanos di'erentes e a proporo de vitrias 'oi
de =!!Z para o %ogador por re'oro/ Cada mesa tinha um %ogador humano e trs %ogadores
por re'oro treinados com a con'igurao encontrada por Bom Senso e com A! milh7es de
dados/ 5 %ogador por re'oro mostrou8se &em coerente com a sua pro&a&ilidade de vencer
$uando decidia fugir ou $uando decidia apo(tar tudo/ (esmo assim, no 4 sempre $ue ele
%oga de acordo com a pro&a&ilidade de vencer e 'ica di'2cil prever a sua %ogada/
6
e
f
o
r

o
M
,
'
A
l
e
a
t
o
r
i
o
.
o
n
"
t
a
n
t
e
6
7
0
5
10
15
20
25
30
35
/ipo !e 4oga!or
1
r
o
p
o
r

o

!
e

2
i
t
-
r
i
a
"

#
(
&
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io <
40 )O+)"-SAO
5s algoritmos testados para %ogar po.er tiveram desempenhos di'erentes, sendo $ue o melhor
testado 'oi o %ogador com aprendi-ado por re'oro, $ue 4 o %ogador $ue 'ica %ogando
aleatoriamente at4 ter dados su'icientes para tomar uma deciso &aseado nos casos %6
e>perimentados/ 5 %ogador (FS, $ue parecia um e>celente %ogador %6 $ue po.er 4 um %ogo de
aposta e pro&a&ilidade de vencer e este %ogador %oga &aseado na aposta e na pro&a&ilidade de
vencer, 'icou um pouco pior $ue o %ogador de aprendi-ado por re'oro $uando %ogado todos
%unto mas mesmo assim o&teve um &om desempenho/ 5 m4todo (onte8Carlo para c6lculo de
pro&a&ilidade de vencer 'oi su'iciente e e'iciente/
5s a%ustes 'eitos na con'igurao do %ogador geraram di'erentes 'ormas de progresso, mas o
e'eito 'oi o mesmo/ #t4 uma determinada $uantidade de in'ormao, o %ogador melhorou o
desempenho, mas com mais in'ormao o desempenho do %ogador no melhorou mais/ Csse
pro&lema aconteceu com diversas con'igura7es e 'rmulas do %ogador por aprendi-ado/ Cm
geral os a%ustes 'eitos em pro&lemas relacionados a inteligncia arti'icial so &astante
tra&alhosos e pouco determin2stico/
5 0o.er se mostrou um %ogo &em desa'iador de criar um &om %ogador pois no e>iste
claramente um m4todo timo de vencer neste %ogo o $ue permite utili-ar muitas t4cnicas
di'erentes da :nteligncia #rti'icial para chegar a um &om resultado/ )e'erncias de outros
tra&alhos mostraram a utili-ao de t4cnicas &em di'erentes como (inima>, Jash
C$uili&rium e )edes Jeurais/
Jeste tra&alho, dois pontos cr2ticos 'oram o desempenho do algoritmo e pro&lemas de
implementao/ (uito cdigo 'oi reescrito em C por$ue a lentido do (atla& invia&ili-ava a
continuao do tra&alho/ # diviso do tra&alho em etapas para testar di'erentes
implementa7es em apenas uma etapa de todo o processo 'oi uma soluo $ue tam&4m
economi-ou muito tempo/ 5s pro&lemas de implementao no sistema geraram grandes
pre%u2-os no tempo em $ue demorou para o tra&alho 'icar pronto por$ue todos os resultados
eram descartados toda ve- $ue algum pro&lema no sistema era encontrado e tinha $ue gerar
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io <B
tudo de novo, o $ue em alguns casos levavam dias/
0ara tra&alhos 'uturos, pode ser interessante testar algoritmos di'erentes/ 0or e>emplo, um
algoritmo no discreti-asse o conhecimento mas normali-asse as dimens7es de 'orma $ue
pudesse utili-ar OM Jearest Jeigh&orP $ue classi'ica um dado de acordo com os casos mais
pr>imos/ 5utra e>emplo, utili-ar m4todos h2&ridos atrav4s de uma rede neural $ue
identi'icasse $ual m4todo tem o melhor desempenho em determinada situao e utili-asse8o/
#lguns tra&alhos lidos procuraram uma 'orma de criar um %ogador arti'icial de 0o.er $ue
utili-asse in'orma7es mais detalhada do %ogo, como o histrico de %ogadas de cada %ogador, o
$ue pode a%udar a identi'icar e vencer advers6rios muito previs2veis como os %ogadores
est6ticos apresentados neste tra&alho/
0ode ser 'eita uma investigao mais apro'undada em por$ue o %ogador no melhora
continuamente com mais in'ormao ou, pelo menos, se mantem no melhor desempenho com
mais in'ormao pode ser &astante Stil para desco&rir novas 'ormas de criar %ogadores mais
e'icientes/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io <3
:0 R(F(RH+)*AS !*!"*O&R.F*)AS
CCMC,, Bruce/ ,Cinking in )II: Second Cdition9 +olume =9 :ntroduction to Standard CXX/
JeI *erseG9 0rentice ?all, !!!/ Dispon2vel em9
\http9//III/mindvieI/net/Boo.s/T:C00/Thin.ing:nC00e/html]/ #cesso em = out/ !!"/
F:JD,C), Jicholas +// Studies in MacCine )ognition -sing tCe &ame o; Poker0 State
UniversitG 5' JeI Vor. #t Bu''alo9 )/ */ ?anson, =EDD/
?5,,#JD, *ohn ?// Renetic #lgorithms and the 5ptimal #llocation o' Trials/ Siam #ournal
On )omputing, 0hiladelphia, n/ , p/""8=!<, B ago/ =ED/
*5?#JS5J, (ichael BradleG/ Roust Strategies and )ounterBStrategies: Building a
Champion ,evel Computer 0o.er 0laGer/ !!D/ ED '/ Tese K(estradoN 8 UniversitG 5' #l&erta,
#l&erta, !!D/
,URC), Reorge F/; STUBB,CF:C,D, Lillian #/ Arti;icial *ntelligence: Structures and
Strategies 'or Comple> 0ro&lem Solving/ ?arloI, Cngland9 #ddison LesleG ,ongman, :nc/,
=EE"/
J:S#J, Joam et al/ A )ourse *n &ame ,CeorJ0 JeI Vor.9 Cam&ridge UniversitG 0ress,
!!D/
)USSC,, Stuart */; J5)+:R, 0eter/ Arti;icial *ntelligence: # (odern #pproach/ JeI
*erseG9 0rentice ?all, =EE</
SM,#JSMV, David/ ,Ce ,CeorJ o; Poker0 ,as +egas Jv9 TIo 0lus TIo 0u&, =E"D/
SUTT5J, )ichard S/; B#)T5, #ndreI R// Rein;orcement "earning: #n :ntrodution/ C8
Boo./ Dispon2vel em9 \http9//III/cs/ual&erta/ca/^sutton/&oo./e&oo./the8&oo./html]/
#cesso em9 = out/ !!"/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io <<
Outras re;er<ncias Ksem autorL:
(#T,#B K5rg/N/ ,Ce MatCMorks: (#T,#B and Simulin. 'or Technical Computing/
Dispon2vel em9 \http9//III/mathIor.s/com/]/ #cesso em = out/ !!"/
05MC)#:L:M: K5rg/N/ )omputer Poker Ai Miki/ Dispon2vel em9
\http9//po.erai/org/Ii.i/inde>/php/(ainH0age]/ #cesso em9 = out/ !!"/
05MC),5C5 K5rg/N/ )omo #ogar Poker: )esumo/ Dispon2vel em9
\http9//III/po.erloco/com/pt/hoItoplaGpo.er/inde>/htm]/ #cesso em9 = out/ !!"/
L:M:0WD:# (WT5D5 DC (5JTC C#),5 K5rg/N/ MGtodo de Monte )arlo0 5rigem
Li.ip4dia, a enciclop4dia livre/ Dispon2vel em9
\http9//pt/Ii.ipedia/org/Ii.i/(4todoHdeH(onteHCarlo]/ #cesso em9 = out/ !!"/
L:M:0CD:# 05MC) K5rg/N/ Poker0 From Li.ipedia, the 'ree encGclopedia/ Dispon2vel em9
\http9//en/Ii.ipedia/org/Ii.i/0o.er]/ #cesso em9 = out/ !!"/
L:M:0CD:# )C:JF5)CC(CJT ,C#)J:JR K5rg/N/ Rein;orcement "earning0 From
Li.ipedia, the 'ree encGclopedia/ Dispon2vel em9
\http9//en/Ii.ipedia/org/Ii.i/)ein'orcementHlearning]/ #cesso em9 = out/ !!"/
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io <A
=0 A+(NOS
Csta sesso cont4m os cdigos 'ontes implementados/
D/=/ plaGpo.er/m
Cste m4todo %oga po.er at4 $ue um %ogador na mesa se torne campeo9
function [ results, winner ] =
playpoker(nplayers,playersai,maxgames,initialmoney,smallblind,database,mode
) %#ok<!"#$%
% PLAYPOKER Play a poker game.
% Play a poker game. It requests playersai their decision and make them
% learn ith the results o! the game.
%
% Arguments"
% nplayers # num$er o! players that are gonna play
% playersai # players ai that are gonna play
% ma%games # ma% num$er o! games
% initialmoney # initial money !or each player
% small$lind # the small $lind money
% data$ase # data$ase that recei&es game in!o
% mode # i! '( test( i! )( check &ictories( i! *( de$ug...
%
% +author ,in-cius .ousa /a0io

%tic
%%
1E.123O4E 5 '6
78E7K,I723O4E 5 )6
4E9:;23O4E 5 *6
PLAYER23O4E 5 <6

P8PLAYER5)6
P8O44.5*6
P8PO15<6
P8RAI.E5=6
P8RO:>45?6
P878A>7E5@6
P8>PLAYER.5A6
P8/OLLOBER.5C6
P8I>;A3E5D6
P8E1YRAI.E5)'6
P84E7I.IO>5))6

P8.IFE5))6

#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io <D
i! nargin G5 A
dispHIerro playpoker )IJ6
return6
end
i! mode 55 1E.123O4E
shogame5'6
playgameH'J6 % test
return6
end

%% constantes
ta$lesi0e5?6
handsi0e5*6
pro$precision5<''6

%% aloca memKria
hand50erosHnplayers(handsi0eJ6
ta$le50erosHta$lesi0e()J6
chances50erosHnplayers()J6
money50erosHnplayers()JLinitialmoney6
money$e!ore50erosHnplayers()J6
$etmade50erosHnplayers(nplayersJ6
potlimit50erosHnplayers()J6
score50erosHnplayers()J6
prescore50erosHnplayers()J6
!old50erosHnplayers()J6
out50erosHnplayers()J6
i! mode 55 1E.123O4E
results5createresults6
else
results5MN6
end

%% inicia as &aria&eis de todos os Oogos
shogame5'6
i! mode 55 4E9:;23O4E PP mode 55 PLAYER23O4E
shogame 5 )6
end
totalplayers5si0eHplayersai(*J6

i! mode 55 78E7K,I723O4E
playersids5)"totalplayers6
else
playersids5randpermHtotalplayersJ6
end
ta$lecount5'6

%% Ooga todos os Oogos
%inicia as &aria&eis de um Oogo
ta$lecount5ta$lecountL)6
moneyH)"nplayersJ5initialmoney6
moneyHHnplayersL)J"endJ5'6
gamecount5'6
playersH)"nplayersJ5playersaiHplayersidsH)"nplayersJJ6
%Ooga todos os Oogos
hile gamecount Q ma%games
% dispHRI#gameI int*strHgamecountL)JSJ6
%reseta o histKrico
clear playhistory
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io <"
playhistory50erosHnplayersT*'(P8.IFEJ6
playhistoryPointer5)6
numRaises5'6
% Ooga
gamecount5gamecountL)6
i! shogame 55 )
dispHRITTTT UO;O I int*strHgamecountJ I TTTTISJ6
end
playgame6
i! shogame 55 )
!or pp5)"nplayers
mondi!5moneyHppJ#money$e!oreHppJ6
i! mondi! Q '
dispHRIOogador I int*strHppJ I perdeu I int*strH#mondi!J I
com a mVo I int*strHprescoreHppJJ I I hand*strHpp(?JSJ6
elsei! mondi! W '
dispHRIOogador I int*strHppJ I ganhou I int*strHmondi!J I
com a mVo I int*strHprescoreHppJJ I I hand*strHpp(?JSJ6
else
dispHRIOogador I int*strHppJ I nVo ganhou nem perdeu nada
com a mVo I int*strHprescoreHppJJ I I hand*strHpp(?JSJ6
end
end
dispHI. .IJ6
!or pp5)"nplayers
dispHRIdinheiro do Oogador I int*strHppJ I" I
int*strHmoneyHppJJSJ6
end
dispHI. .IJ6
end


% sal&a as decisXes dos Oogadores em um $anco de dados
i! GisemptyHdata$aseJ
!or php5)"HplayhistoryPointer#)J
ph5playhistoryHphp("J6
pp5phHP8PLAYERJ6
result5HmoneyHppJ#money$e!oreHppJJYsmall$lind6
data$ase.insertHphHP8O44.J(phHP8PO1J(phHP8RAI.EJ(phHP8RO:>4J(ph
HP878A>7EJ(phHP8>PLAYER.J(phHP8/OLLOBER.J(phHP8I>;A3EJ(phHP8E1YRAI.EJ(phHP8
4E7I.IO>J(resultJ6
end
end

%pZra o Oogo caso apenas um Oogador consiga pagar o $ig$lind
i! si0eHmoneyHmoneyW5*Tsmall$lindJ()J Q5 )
% dispHInot enough playersIJ6
$reak6
end
end
%atuali0a os &encedores
inner5)6
!or g5*"nplayers
i! moneyHinnerJQmoneyHgJ
inner5g6
end
end
inner5playersidsHinnerJ6

#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io <E
%%
!unction R handstr S 5 hand*strHnum(stJ
handstr5RI## mVo I int*cardHhandHnum()JJ I I int*cardHhandHnum(*JJ I Y
mesaIS6
!or ss5)"st
handstr5Rhandstr I I int*cardHta$leHssJJS6 %[okQA;ROBW
end
!unction R card S 5 int*cardHnumJ
c 5 !i%HHnum#)JY=JL*6
sitch modHnum#)(=J
case '
kind 5 IpI6
case )
kind 5 IeI6
case *
kind 5 IoI6
case <
kind 5 IcI6
end
i! c W5 * \\ c Q5 )'
card5Rint*strHcJ kindS6
end
sitch c
case ))
card5RIUI kindS6
case )*
card5RIEI kindS6
case )<
card5RIKI kindS6
case )=
card5RIAI kindS6
end
end
end
%% results o$Oect
% money ] quanto cada Oogador tem de dinheiro
% guarda os resultados dos Oogos Hpara testeJ
!unction R r S 5 createresultsHJ
totalplayers5si0eHplayersai(*J6
r5structHIsetgameI(+setgame(IgetgameI(+getgameJ6
resultdata50erosHnplayers(ma%games(!i%HtotalplayersYnplayersJJ6
!unction R S 5 setgameHta$leid(gameid(moneyJ
resultdataH"(gameid(ta$leidJ5money6
end
!unction R g S 5 getgameHta$leid(gameidJ
g5resultdataH"(gameid(ta$leidJ6
end
end

%% playgame !unction
%supXe#se que tenha * Oogadores ou mais com dinheiro para o $ig $lind.
!unction RS 5 playgameHtestInternalJ %[okQI>:.4W
i! nargin 55 ) % test case
money5R)''' ) ?' 'S6
potlimit5R?) )'' )'?'S6
$etmade5RR?' ' ' 'S6 R?' ' ' 'S6 R?' ' ' 'S6 R' ' ' 'SS6
nplayersongame5<6
do9etH)(*''('J6
i! moneyH)J G5 C'' PP sumH$etmadeH"()JJ G5 )?) PP
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io A!
sumH$etmadeH"(*JJ G5 )'' PP sumH$etmadeH"(<JJ G5 DD
dispHIerror playgame#do9et ).)IJ6
end


nplayers5?6
$etmade5RR' ' ' ' 'S6R' ' ' ' 'S6R*' ' ' ' 'S6R)' ' ' ' 'S6R' '
' ' 'SS6
!old5R' ' ' ) 'S6
out5R) ) ' ' )S6
potlimit5RDC' ='*' ' ' 'S6
money5R' ' D@' =')' 'S6
money$e!ore5R' ' DC' ='*' 'S6
prescore5R' ' C<<D*A )'@<C<<) 'S6
distri$utePri0esHJ6
i! moneyH<J G5 DD' PP moneyH=J G5 =')'
dispHIerror playgame#distri$utePri0es ).)IJ6
end

return6
end

% &aria&eis gerais
$etmadeH"J5'6
money$e!oreH"J5moneyH"J6

%sorteia e distri$ue as cartas
deck5randpermH?*J6
ta$leH)"ta$lesi0eJ5deckH)"ta$lesi0eJ6
handH)"HnplayersThandsi0eJJ5deckHHta$lesi0eL)J"
Hta$lesi0eLnplayersThandsi0eJJ6

%calcula os limites de aposta Hpara o caso de all#inJ
tmp5sortHmoneyHmoneyG5'JJ6
nplayersongame5si0eHtmp()J6
potlimitH)"nplayersongameJ5tmpH)"nplayersongameJ6

%elimina os Oogadores sem dinheiro
outH"J5'6
!or OO5)"nplayers
i! moneyHOOJ Q *Tsmall$lind
outHOOJ5)6
end
end
!oldH"J5'6

%small $lind e $ig $lind
!irstplayeronround5!i%HrandHJTnplayersJL)6
!irstplayer5!irstplayeronround6
lastplayer5!irstplayerL*6
hile !irstplayer Q lastplayer
p5remH!irstplayer(nplayersJL)6
i! outHpJ55)
lastplayer5lastplayerL)6
else
$et5small$lindTH<#Hlastplayer#!irstplayerJJ6
do9etHp($et('J6
end
!irstplayer5!irstplayerL)6
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io A=
end

%primeiro round( antes do !lop
raise5*Tsmall$lind6
lastplayer5!irstplayerLnplayers6
shonta$le5'6
round5)6

i! shogame 55 )
dispHRIround I int*strHroundJSJ6
end
playround6
%!lop( turn and ri&er
!or shonta$le5<"?
round5roundL)6
!irstplayer5!irstplayeronround6
lastplayer5!irstplayerLnplayers6
i! shogame 55 )
dispHRIround I int*strHroundJSJ6
end
playround6
end

%distri$ui os pr^mios
!or OO5)"nplayers
prescoreHOOJ5pokeronerankHhandHOO("J(ta$leJ6
end

distri$utePri0esHJ6

%guarda os resultados
i! GisemptyHresultsJ
results.setgameHta$lecount(gamecount(moneyJ6
end

!unction RS 5 distri$utePri0esHJ
!or m5)"nplayers
pot 5 sumH$etmadeH"(mJJ6
i! pot 55 '
continue6
end
!or k5)"nplayers
i! !oldHkJ 55 ' \\ outHkJ 55 ' \\ potlimitHmJ Q5
money$e!oreHkJ
scoreHkJ5prescoreHkJ6
else
scoreHkJ5'6
end
end
Rignore( orderS5sortH#scoreJ6
k)5orderH)J6
count5)6
!or k5*"nplayers
k*5orderHkJ6
i! scoreHk)J55scoreHk*J
count5countL)6
else
$reak6
end
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io A
end
!or k5)"count
o5orderHkJ6
scoreHoJ5'6
i! outHoJ 55 '
moneyHoJ5moneyHoJLHpotYcountJ6
end
end
remaind5remHpot(countJ6
i! remaindG5'
o5orderH!i%HcountTrandHJL)JJ6
i! outHoJ 55 '
moneyHoJ5moneyHoJLremaind6
end
end
end

end
%% playround !unction
!unction RS 5 playroundHJ
!or k5)"nplayers
chancesHkJ5pokerrankHhandsi0e(shonta$le(handHk("J(ta$le(su
mHout55'J#)(pro$precisionJ6
i! mode 55 4E9:;23O4E
dispHRI## chance do player I int*strHkJ I 5 I
int*strHchancesHkJJ I%ISJ6
end
i! mode 55 PLAYER23O4E \\
strcmpH!unctiontostringHplayersHkJ.decideJ(IcreatehumanplayerYdecideIJ
dispHhand*strHk(shonta$leJJ6
end
end

%% apostas
hile !irstplayer Q lastplayer
p5remH!irstplayer(nplayersJL)6
m5money55'6
mm50erosHnplayers()J6
!or mmm5'"Hlastplayer#!irstplayer#)J
mmHremH!irstplayerLmmm(nplayersJL)J5)6
end
m5m\mm6
out!old5outL!oldLm6
nplayers$etting 5 sumHout!old55'J6
i! outHpJG5) \\ !oldHpJ G5 ) \\ moneyHpJ W ' \\
nplayers$etting W )

already$et5sumH$etmadeHp("JJ6
realraise5raise#already$et6


startingmoney5moneyHpJLalready$et6

realraise 5 minH realraise( moneyHpJJ6

realpot5sumHsumH$etmadeH"(potlimitQ5startingmoneyJJJ6
odds5'6
i! already$et G5 '
odds5realpotYalready$et6
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io AB
end

out!old5outL!old6
ingame5sumHout!old55'J6

!olloers50erosHnplayers()J6
!or mmm5'"Hlastplayer#!irstplayer#)J
!olloersHremH!irstplayerLmmm(nplayersJL)J5)6
end
!olloers5!olloers\Hout!old55'J6
!olloers5sumH!olloersJ6

i! mode 55 PLAYER23O4E \\
strcmpH!unctiontostringHplayersHpJ.decideJ(IcreatehumanplayerYdecideIJ
dispHRI$ankroll" I int*strHmoneyHpJJSJ6
end
decision5playersHpJ.decideHodds(realpotYsmall$lind(real
raiseYsmall$lind(round(chancesHpJ(nplayers(!olloers(ingame(numRaisesJ6

$et5'6
sitch decision
case ) % !oldYcall
$et5'6
case * % call
$et5realraise6
case < % raise lo H*#= small$lindJ
$et5realraiseL!i%HrandHJTH*Tsmall$lindJJ
L*Tsmall$lind6
case = % raise medium H@#)C small$lindJ
$et5realraiseL!i%HrandHJTH)*Tsmall$lindJJ
L@Tsmall$lind6
case ? % raise high H*'#=' small$lindJ
$et5realraiseL!i%HrandHJTH*'Tsmall$lindJJ
L*'Tsmall$lind6
case @ % raise all#in
$et5moneyHpJ6
end
i! H$et W moneyHpJJ
%% allin
$et5moneyHpJ6
end
i! moneyHpJ W ' \\ $et 55 ' \\ realraise W '
!oldHpJ5)6
i! shogame 55 )
dispHRIOogador I int*strHpJ I !ugiuISJ6
end
end
playhistoryHplayhistoryPointer(P8PLAYERJ5p6
playhistoryHplayhistoryPointer(P8RO:>4J5round6
playhistoryHplayhistoryPointer(P878A>7EJ5chancesHpJ6
playhistoryHplayhistoryPointer(P8PO1J5realpotYsmall$lin
d6
playhistoryHplayhistoryPointer(P8O44.J5odds6
playhistoryHplayhistoryPointer(P8RAI.EJ5realraiseYsmall
$lind6
playhistoryHplayhistoryPointer(P8>PLAYER.J5nplayers6
playhistoryHplayhistoryPointer(P8I>;A3EJ5ingame6
playhistoryHplayhistoryPointer(P8/OLLOBER.J5!olloers6
playhistoryHplayhistoryPointer(P8E1YRAI.EJ5numRaises6
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io A3
playhistoryHplayhistoryPointer(P84E7I.IO>J5decision6
playhistoryPointer5playhistoryPointerL)6

i! decision W5 <
numRaises 5 numRaises L )6
end
do9etHp($et(realraiseJ6

$m 5 sumH$etmadeHp("JJ6
i! sumH$m W raiseJ
raise 5 $m6
lastplayer 5 !irstplayerLnplayers6
end
end
!irstplayer5!irstplayerL)6
end
end
!unction RS 5 do9etHp( $et( realraiseJ
i! shogame 55 ) \\ !oldHpJ 55 '
i! $et 55 '
dispHRIOogador I int*strHpJ I pede mesaISJ6
elsei! $et 55 moneyHpJ
dispHRIOogador I int*strHpJ I aumenta all#in com I
int*strH$etJSJ6
elsei! $et W realraise \\ realraise 55 '
dispHRIOogador I int*strHpJ I aposta I int*strH$etJSJ6
elsei! $et W realraise
dispHRIOogador I int*strHpJ I paga I int*strHrealraiseJ
I e aumenta I int*strH$et#realraiseJSJ6
elsei! $et 55 realraise
dispHRIOogador I int*strHpJ I paga I int*strH$etJSJ6
else
dispHRIOogador I int*strHpJ I paga misteriosamente
somente I int*strH$etJSJ6
end
end
%tira o dinheiro
moneyHpJ5moneyHpJ#$et6
%coloca no pot
!or i5)"nplayersongame
pl5potlimitHiJ6
$ 5 $et6
$m 5 $etmadeHp(iJ6
i! H$et L $m W plJ
$ 5 pl # $m6
end
i! $ Q '
$ 5 '6
end
$et5$et#$6
$etmadeHp(iJ5$etmadeHp(iJL$6
i! $et 55 '
$reak6
end
end

end


#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io A<
%% end o! playgame
end
%% end o! playpoker
%toc
end
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io AA
D// computeHvictorG/h
Cste m4todo implementa o (onte8Carlo/ Cle 'a- simula7es aleatrias e retorna o nSmero de
simula7es vitoriosas/
&'
T author ,in-cius .ousa /a0io
TY


[include _getpoer.h_

dou$le computeRealVictoriesRandomlyHint n7ardsOn8and( int n7ardsOn1a$le(
intT ally8and( intT ta$le( int nEnemies( int game7ountJ M

intT pgc 5 player;ame7ards6
intT egc 5 enemy;ame7ards6
intT adeck 5 deck6

YY contador dos Oogos
int iLose 5 '6

YYtemporZrios
int i( O( c( po6
YY coloca a mesa no Oogo de todo mundo.
!or Hi 5 '6 i Q n7ardsOn1a$le6 iLLJ M
pgcRiS 5 ta$leRiS6
!or HO 5 '6 O Q nEnemies6 OLLJ M
egcRO T ;A3E2.IFE L iS 5 ta$leRiS6
N
N
!or Hi 5 '6 i Q n7ardsOn8and6 iLLJ M
pgcR1A9LE2.IFE L iS 5 ally8andRiS6
N

YY comeca a Oogar
!or Hc 5 game7ount6 c W '6 c##J
M

YY monta um $aralho com as cartas que OZ sa-ram
int total7ards 5 HnEnemies L )J T 8A>42.IFE L 1A9LE2.IFE6
int deckP 5 '6
!or Hi 5 '6 i Q n7ardsOn1a$le6 iLLJ M
adeckRdeckPLLS 5 ta$leRiS6
N
!or Hi 5 '6 i Q n7ardsOn8and6 iLLJ M
adeckRdeckPLLS 5 ally8andRiS6
N

YY sorteia o resto do $aralho
po 5 '6
!or Hi 5 deckP6 i Q total7ards6 iLLJ M
YY O rand ] $ugado. Ele nVo sorteia todos os n`meros.
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io AD
YY 7om essa gam$iarra !unciona.
YY os comentarios a$ai%o sVo de$ug
int card 5 HrandHJ % H7AR4.2E:A>1I1Y QQ *JJ WW *6
$ool repeated 5 !alse6
YY me%Print! H_%i P %i a _( card( iJ6
!or HO 5 '6 O Q i \\ brepeated6 OLLJ
M
YY me%Print! H_ %i_( adeckROSJ6
repeated P5 card 55 adeckROS6
N
YY me%Print! H_cn_J6
adeckRiS 5 card6
i! HrepeatedJ
M
i##6
N
YY i! HpoLL W )''J $reak6
N
YY me%Print! H_7ontagem" %icn_( poJ6


YY sorteia o resto da mao.
!or Hi 5 n7ardsOn8and6 i Q 8A>42.IFE6 iLLJ M
pgcR1A9LE2.IFE L iS 5 adeckRdeckPLLS6
N
YY sorteia o resto da mesa.
!or Hi 5 n7ardsOn1a$le6 i Q 1A9LE2.IFE6 iLLJ M
int card 5 adeckRdeckPLLS6
pgcRiS 5 card6
!or HO 5 '6 O Q nEnemies6 OLLJ M
egcRO T ;A3E2.IFE L iS 5 card6
N
N
YY sorteia as cartas dos inimigos
!or HO 5 HnEnemies # )J T ;A3E2.IFE6 O W5 '6 O #5 ;A3E2.IFEJ M
!or Hi 5 1A9LE2.IFE6 i Q ;A3E2.IFE6 iLLJ M
egcRO L iS 5 adeckRdeckPLLS6
N
N

po 5 getGameCardsPowerHpgcJ6
!or HO 5 HnEnemies # )J T ;A3E2.IFE6 O W5 '6 O #5 ;A3E2.IFEJ M
i! Hpo Q getGameCardsPowerHegc L OJJ M
iLoseLL6
$reak6
N
N
N
return game7ount # iLose6
N
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io A"
D/B/ getpoIer/h
Cste m4todo retorna um nSmero representando o ran.ing de um %ogador/ Por e6emploE (e o
#ogador tem um par com um SE / e " para de(empateE e((e #ogo 4 tran(formado em um
nUmero inteiro (endo ;ue o maior nUmero 4 o maior #ogo.
&'
T author ,in-cius .ousa /a0io
TY

int getGameCardsPowerHintT someone;ame7ardsJ M
YTT
T
T return int" = $its HgameJ L *' $its HcardsJ game" '" highcard )"
pair
T *" * pairs <" < o! a kind =" straight ?" !lush @" !ullhouse A" = o!
a
T kind C" straight !lush
T
T cartas" = $its por carta( em ordem descendente.
T
T os RWW *S( RQQ *S e R\ <S sVo para otimi0ar as contas RY
T 7AR421YPE2.IFES( RT 7AR421YPE2.IFES e R%
T 7AR421YPE2.IFES respecti&amente.
TY

int nPair 5 '6
int n1hreeO!AKind 5 '6
int n/ourO!AKind 5 '6
$ool straight 5 !alse6
$ool !lush 5 !alse6
$ool straight/lush 5 !alse6
int straight7ard 5 '6
int straight/lush7ard 5 '6
int poer 5 '6

intT sgc 5 sorted;ame7ards6
intT sgcs 5 sorted;ame7ards.hi!ted6

YYtemporZrio
int i( O( repeated6
!or Hi 5 '6 i Q ;A3E2.IFE6 iLLJ
M
sgcRiS 5 someone;ame7ardsRiS6
N

YY ordena as cartas em ordem descendente
!or Hi 5 '6 i Q ;A3E2.IFE6 iLLJ M
$ool changed 5 !alse6
!or HO 5 '6 O Q ;A3E2.IFE # )6 OLLJ M
int s) 5 sgcROS6
int s* 5 sgcRO L )S6
i! Hs) Q s*J M
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io AE
sgcROS 5 s*6
sgcRO L )S 5 s)6
changed 5 true6
N
N
i! HbchangedJ $reak6
N

!or Hi 5 '6 i Q ;A3E2.IFE6 iLLJ M
sgcsRiS 5 sgcRiS WW *6
N

YY pair( <#o!#a#kind( =#o!#a#kind( !ull house e * pairs
repeated 5 '6
!or Hi 5 )6 i Q ;A3E2.IFE6 iLLJ M
i! HHsgcsRi # )SJ 55 HsgcsRiSJJ M
repeatedLL6
sitch HrepeatedJ M
case )"
pair7ardsRnPairLLS 5 i6
pair7ardsRnPairLLS 5 i # )6
$reak6
case *"
threeO!AKind7ardsRn1hreeO!AKindLLS 5 i6
threeO!AKind7ardsRn1hreeO!AKindLLS 5 pair7ardsR##
nPairS6
threeO!AKind7ardsRn1hreeO!AKindLLS 5 pair7ardsR##
nPairS6
$reak6
case <"
!ourO!AKind7ardsRn/ourO!AKindLLS 5 i6
!ourO!AKind7ardsRn/ourO!AKindLLS 5 threeO!AKind7ardsR##
n1hreeO!AKindS6
!ourO!AKind7ardsRn/ourO!AKindLLS 5 threeO!AKind7ardsR##
n1hreeO!AKindS6
!ourO!AKind7ardsRn/ourO!AKindLLS 5 threeO!AKind7ardsR##
n1hreeO!AKindS6
$reak6
N
N else M
repeated 5 '6
N
N

YY straight !lush
!or HO 5 '6 O Q ;A3E2.IFE # < \\ bstraight/lush6 OLLJ M
int cardsInARo 5 ) QQ *6

int a 5 sgcROS6
!or Hi 5 O L )6 i Q ;A3E2.IFE6 iLLJ M
int $ 5 sgcRiS6
i! Ha # $ 55 cardsInARoJ M
cardsInARo L5 ) QQ *6
i! HcardsInARo 55 ? QQ *J M
straight/lush7ard 5 O6
straight/lush 5 true6
$reak6
N
N
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io D!
N
i! HcardsInARo 55 = QQ * \\ YY = cartas na sequencia
Ha WW *J 55 < \\ bstraight/lushJ YY sequencia at] ?
M
!or Hi 5 '6 i Q 7AR421YPE2.IFE6 iLLJ M
i! HsgcsRiS 55 7AR42AJ YY tem A
M
i! HHsgcRiS \ <J 55 Ha \ <JJ YY mesmo
YY naipe
M
straight/lush7ard 5 O6
straight/lush 5 true6
$reak6
N
N else M
$reak6
N

N
N
N

i! Hbstraight/lushJ M

YY !lush
int n7ardsO!Each1ypeR7AR421YPE2.IFES6
!or Hi 5 '6 i Q 7AR421YPE2.IFE6 iLLJ M
n7ardsO!Each1ypeRiS 5 '6
N
!or Hi 5 '6 i Q ;A3E2.IFE6 iLLJ M
int t 5 sgcRiS \ <6 YY naipe
i! HLLn7ardsO!Each1ypeRtS 55 ?J M
int count 5 '6
!lush 5 true6
!or HO 5 '6 O Q5 i6 OLLJ M
i! Ht 55 HsgcROS \ <JJ M
!lush7ardsRcountLLS 5 O6
N
N
$reak6
N
N

YY straight
i! Hb!lushJ M
int cardsInARo 5 )6
$ool hasA 5 sgcsR'S 55 7AR42A6
int last7ard 5 sgcsR'S6
straight7ard 5 '6
!or Hi 5 )6 i Q ;A3E2.IFE \\ bstraight6 iLLJ M
int ne7ard 5 sgcsRiS6
sitch Hlast7ard # ne7ardJ M
case )"
sitch HLLcardsInARoJ M
case ?"
straight 5 true6
$reak6
case ="
i! HhasA \\ ne7ard 55 'J YY seq de IaI a
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io D=
I?I
M
straight 5 true6
N
$reak6
N
$reak6
case '"
YY carta repetida
$reak6
de!ault"
cardsInARo 5 )6
straight7ard 5 i6
N
last7ard 5 ne7ard6
N
N

N

poer 5 '6
i! Hstraight/lushJ M
poer 5 sgcsRstraight/lush7ardS6
poer P5 C QQ H? T 7AR429I12.IFEJ6
N else i! Hn/ourO!AKind 55 =J M
poer 5 sgcsR!ourO!AKind7ardsR'SS6
poer QQ5 7AR429I12.IFE6
poer P5 getOtherCardsHsgcs(
!ourO!AKind7ards( =( )J6
poer P5 A QQ H? T 7AR429I12.IFEJ6
N else i! HHn1hreeO!AKind W5 < \\ nPair W5 *JJ M
poer P5 sgcsRthreeO!AKind7ardsR'SS6
poer QQ5 7AR429I12.IFE6
i! Hn1hreeO!AKind W <J M
int card) 5 sgcsRpair7ardsR'SS6
int card* 5 sgcsRthreeO!AKind7ardsR<SS6
poer P5 card) W card* d card) " card*6
N else M
poer P5 sgcsRpair7ardsR'SS6
N
poer P5 @ QQ H? T 7AR429I12.IFEJ6
N else i! Hn1hreeO!AKind W5 @J M
poer P5 sgcsRthreeO!AKind7ardsR'SS6
poer QQ5 7AR429I12.IFE6
poer P5 sgcsRthreeO!AKind7ardsR<SS6
poer P5 @ QQ H? T 7AR429I12.IFEJ6
N else i! H!lushJ M
!or Hi 5 '6 i Q ?6 iLLJ M
poer QQ5 7AR429I12.IFE6
poer P5 sgcsR!lush7ardsRiSS6
N
poer P5 ? QQ H? T 7AR429I12.IFEJ6
N else i! HstraightJ M
poer 5 sgcsRstraight7ardS6
poer P5 = QQ H? T 7AR429I12.IFEJ6
N else i! Hn1hreeO!AKind 55 <J M
poer 5 sgcsRthreeO!AKind7ardsR'SS6
poer QQ5 * T 7AR429I12.IFE6
poer P5 getOtherCardsHsgcs(
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io D
threeO!AKind7ards( <( *J6
poer P5 < QQ H? T 7AR429I12.IFEJ6
N else i! HnPair W5 =J M
poer 5 sgcsRpair7ardsR'SS6
poer QQ5 7AR429I12.IFE6
poer P5 sgcsRpair7ardsR*SS6
poer QQ5 7AR429I12.IFE6
poer P5 getOtherCardsHsgcs( pair7ards( =( )J6
poer P5 * QQ H? T 7AR429I12.IFEJ6
N else i! HnPair 55 *J M
poer 5 sgcsRpair7ardsR'SS6
poer QQ5 < T 7AR429I12.IFE6
poer P5 getOtherCardsHsgcs( pair7ards( *( <J6
poer P5 ) QQ H? T 7AR429I12.IFEJ6
N else YY high card
M
poer 5 sgcsR'S6
poer QQ5 7AR429I12.IFE6
poer P5 sgcsR)S6
poer QQ5 7AR429I12.IFE6
poer P5 sgcsR*S6
poer QQ5 7AR429I12.IFE6
poer P5 sgcsR<S6
poer QQ5 7AR429I12.IFE6
poer P5 sgcsR=S6
N
return poer6
N
int getOtherCardsHintT hand( intT game( int game7ards(
int qtyJ M
int i( g( cards 5 '6
!or Hi 5 '6 i Q ;A3E2.IFE6 iLLJ M
$ool in;ame 5 !alse6
!or Hg 5 '6 g Q game7ards6 gLLJ M
i! HgameRgS 55 iJ M
in;ame 5 true6
$reak6
N
N
i! Hbin;ame \\ qty W 'J M
cards QQ5 7AR429I12.IFE6
cards P5 handRiS6
qty##6
N
N
return cards6
N
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io DB
D/3/ po.eroneran./c
Cste m4todo 'a- a inter'ace com o (atla& para retornar o ran.ing de um %ogador.
&'
T author ,in-cius .ousa /a0io
TY

[include _me%.h_
[de!ine ;A3E2.IFE A
[de!ine 7AR421YPE2.IFE )<
[de!ine 7AR42A 7AR421YPE2.IFE # )
[de!ine 7AR429I12.IFE =
[de!ine 8A>42.IFE *
[de!ine 1A9LE2.IFE ?
[de!ine 7AR4.2E:A>1I1Y 7AR421YPE2.IFE QQ *

intT sorted;ame7ards6
intT sorted;ame7ards.hi!ted6
intT pair7ards6
intT threeO!AKind7ards6
intT !ourO!AKind7ards6
intT !lush7ards6

[include _getpoer.h_

&oid mexFunctionH int nlhs( m%Array TplhsRS(
int nrhs( const m%Array TprhsRS J
M
dou$le r6

intT hand6
dou$leT ally8and46
dou$leT ta$le46
int i6

i! Hnrhs b5 *JM
mexErrMsgTxt H_>`mero de argumentos in&Zlido._J6
return6
N

ally8and4 5 mxGetPrHprhsR'SJ6
ta$le4 5 mxGetPrHprhsR)SJ6

hand 5 mallocH;A3E2.IFE T si0eo!HintJJ6
sorted;ame7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
sorted;ame7ards.hi!ted 5 mallocH;A3E2.IFE T si0eo!HintJJ6
pair7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
threeO!AKind7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
!ourO!AKind7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
!lush7ards 5 mallocH? T si0eo!HintJJ6

!or Hi 5 '6 i Q 8A>42.IFE6 iLLJ
M
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io D3
handRiS 5 HintJally8and4RiS#)6
N
!or Hi 5 '6 i Q 1A9LE2.IFE6 iLLJ
M
handRiL8A>42.IFES 5 HintJta$le4RiS#)6
N

r5getGameCardsPowerHhandJ6

freeHhandJ6
freeHsorted;ame7ardsJ6
freeHsorted;ame7ards.hi!tedJ6
freeHpair7ardsJ6
freeHthreeO!AKind7ardsJ6
freeH!ourO!AKind7ardsJ6
freeH!lush7ardsJ6

plhsR'S 5 mxCreateDouleMatrixH)()( m%REALJ6
mxGetPrHplhsR'SJR'S 5 r6
N
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io D<
D/</ po.erran./c
Cste m4todo 'a- a inter'ace com o (atla& para retornar a pro&a&ilidade de vencer de um
%ogador pelo m4todo (onte8Carlo/
&'
T author ,in-cius .ousa /a0io
TY

[include _me%.h_

[de!ine ;A3E2.IFE A
[de!ine 7AR421YPE2.IFE )<
[de!ine 7AR42A 7AR421YPE2.IFE # )
[de!ine 7AR429I12.IFE =
[de!ine 8A>42.IFE *
[de!ine 1A9LE2.IFE ?
[de!ine 7AR4.2E:A>1I1Y 7AR421YPE2.IFE QQ *

intT sorted;ame7ards6
intT sorted;ame7ards.hi!ted6
intT pair7ards6
intT threeO!AKind7ards6
intT !ourO!AKind7ards6
intT !lush7ards6
intT player;ame7ards6
intT enemy;ame7ards6
intT deck6

[include _compute2&ictory.h_

&oid mexFunctionH int nlhs( m%Array TplhsRS(
int nrhs( const m%Array TprhsRS J
M
dou$le r6

int n7ardsOn8and6
int n7ardsOn1a$le6
intT ally8and6
intT ta$le6
dou$leT ally8and46
dou$leT ta$le46
int nEnemies6
int game7ount6
int i6

i! Hnrhs b5 @JM
mexErrMsgTxt H_>`mero de argumentos in&Zlido._J6
return6
N

n7ardsOn8and 5 mxGet!calarHprhsR'SJ6
n7ardsOn1a$le 5 mxGet!calarHprhsR)SJ6
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io DA
ally8and4 5 mxGetPrHprhsR*SJ6
ta$le4 5 mxGetPrHprhsR<SJ6
nEnemies 5 mxGet!calarHprhsR=SJ6
game7ount 5 mxGet!calarHprhsR?SJ6

ally8and 5 mallocHn7ardsOn8and T si0eo!HintJJ6
ta$le 5 mallocHn7ardsOn1a$le T si0eo!HintJJ6
sorted;ame7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
sorted;ame7ards.hi!ted 5 mallocH;A3E2.IFE T si0eo!HintJJ6
pair7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
threeO!AKind7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
!ourO!AKind7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
!lush7ards 5 mallocH? T si0eo!HintJJ6
player;ame7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
enemy;ame7ards 5 mallocH;A3E2.IFE T nEnemies T si0eo!HintJJ6
deck 5 mallocH7AR4.2E:A>1I1Y T si0eo!HintJJ66

!or Hi 5 '6 i Q n7ardsOn8and6 iLLJ
M
ally8andRiS 5 HintJally8and4RiS#)6
N
!or Hi 5 '6 i Q n7ardsOn1a$le6 iLLJ
M
ta$leRiS 5 HintJta$le4RiS#)6
N

r 5 computeRealVictoriesRandomlyHn7ardsOn8and( n7ardsOn1a$le( ally8and(
ta$le( nEnemies( game7ountJ6

freeHally8andJ6
freeHta$leJ6
freeHsorted;ame7ardsJ6
freeHsorted;ame7ards.hi!tedJ6
freeHpair7ardsJ6
freeHthreeO!AKind7ardsJ6
freeH!ourO!AKind7ardsJ6
freeH!lush7ardsJ6
freeHplayer;ame7ardsJ6
freeHenemy;ame7ardsJ6
freeHdeckJ6

plhsR'S 5 mxCreateDouleMatrixH)()( m%REALJ6
mxGetPrHplhsR'SJR'S 5 HHdou$leJ H)''TrJJ Y Hdou$leJ game7ount6
N
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io DD
D/A/ testHpo.erran./c
Cste m4todo 'a- a inter'ace com o (atla& para gerar os dados para demonstrar a convergencia
do m4todo (onte8Carlo/
&'
T author ,in-cius .ousa /a0io
TY

[include _me%.h_

[de!ine ;A3E2.IFE A
[de!ine 7AR421YPE2.IFE )<
[de!ine 7AR42A 7AR421YPE2.IFE # )
[de!ine 7AR429I12.IFE =
[de!ine 8A>42.IFE *
[de!ine 1A9LE2.IFE ?
[de!ine 7AR4.2E:A>1I1Y 7AR421YPE2.IFE QQ *

intT sorted;ame7ards6
intT sorted;ame7ards.hi!ted6
intT pair7ards6
intT threeO!AKind7ards6
intT !ourO!AKind7ards6
intT !lush7ards6
intT player;ame7ards6
intT enemy;ame7ards6
intT deck6

[include _compute2&ictory.h_

&oid mexFunctionH int nlhs( m%Array TplhsRS(
int nrhs( const m%Array TprhsRS J
M
dou$le r6

int n7ardsOn8and6
int n7ardsOn1a$le6
intT ally8and6
intT ta$le6
dou$leT ally8and46
dou$leT ta$le46
int nEnemies6
int game7ount6
int i6
int in7ount6

i! Hnrhs b5 @JM
mexErrMsgTxt H_>`mero de argumentos in&Zlido._J6
return6
N

n7ardsOn8and 5 mxGet!calarHprhsR'SJ6
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io D"
n7ardsOn1a$le 5 mxGet!calarHprhsR)SJ6
ally8and4 5 mxGetPrHprhsR*SJ6
ta$le4 5 mxGetPrHprhsR<SJ6
nEnemies 5 mxGet!calarHprhsR=SJ6
game7ount 5 mxGet!calarHprhsR?SJ6

ally8and 5 mallocHn7ardsOn8and T si0eo!HintJJ6
ta$le 5 mallocHn7ardsOn1a$le T si0eo!HintJJ6
sorted;ame7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
sorted;ame7ards.hi!ted 5 mallocH;A3E2.IFE T si0eo!HintJJ6
pair7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
threeO!AKind7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
!ourO!AKind7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
!lush7ards 5 mallocH? T si0eo!HintJJ6
player;ame7ards 5 mallocH;A3E2.IFE T si0eo!HintJJ6
enemy;ame7ards 5 mallocH;A3E2.IFE T nEnemies T si0eo!HintJJ6
deck 5 mallocH7AR4.2E:A>1I1Y T si0eo!HintJJ66

!or Hi 5 '6 i Q n7ardsOn8and6 iLLJ
M
ally8andRiS 5 HintJally8and4RiS#)6
N
!or Hi 5 '6 i Q n7ardsOn1a$le6 iLLJ
M
ta$leRiS 5 HintJta$le4RiS#)6
N

plhsR'S 5 mxCreateDouleMatrixHgame7ount()( m%REALJ6
in7ount 5 '6
!or Hi 5 '6 i Q game7ount6 iLLJM
in7ount L5 computeRealVictoriesRandomlyHn7ardsOn8and(
n7ardsOn1a$le( ally8and( ta$le( nEnemies( )J6
mxGetPrHplhsR'SJRiS 5 HHdou$leJ H)''Tin7ountJJ Y Hdou$leJ HiL)J6
N
freeHally8andJ6
freeHta$leJ6
freeHsorted;ame7ardsJ6
freeHsorted;ame7ards.hi!tedJ6
freeHpair7ardsJ6
freeHthreeO!AKind7ardsJ6
freeH!ourO!AKind7ardsJ6
freeH!lush7ardsJ6
freeHplayer;ame7ardsJ6
freeHenemy;ame7ardsJ6
freeHdeckJ6

N
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io DE
D/D/ createconstantplaGer/m
Cste m4todo cria o %ogador Constante/
% +author ,in-cius .ousa /a0io
!unction R playerai S 5 createconstantplayerHdecJ
% 7ria um Oogador que Ooga sempre Ooga a mesma coisa
playerai5structHIdecideI(+decide(IlearnI(+learn(IgetI(+getJ6
d5dec6
!unction R decision S 5
decideHodds(pot(raise(round(chances(nplayers(!olloers(ingame(qtyraiseJ
%[okQI>:.4W
decision5d6
end
!unction RS 5 getHJ %[okQI>:.4W
end
!unction RS 5 learnHJ %[okQI>:.4W
end

end
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io "!
D/"/ creatediscreteplaGer/m
Cste m4todo cria o %ogador com aprendi-ado por re'oro/
% +author ,in-cius .ousa /a0io
!unction R playerai S 5
creatediscreteplayerHstopLearn(odds.c(chance.c(pot.c(raise.c(qtyraise.c(!ol
loers.c(ingame.c(nplayers.c(array.i0(littleArray.i0J
% 7ria um Oogador que Ooga atra&]s do aprendi0ado por es!oreo
playerai5structHIdecideI(+decide(IlearnI(+learn(IgetI(+getJ6

%7:I4A4O com o &alue de littleArray.i0 e array.i0 para nVo estourar a
%memKria

%personality paramenters
stopLearning5stopLearn6
&ery$ig&alue5DDDDDD6
i! odds.c 55 #)
odds.caling5&ery$ig&alue6
odds.i0e 5 )6
else
odds.caling5odds.c6
odds.i0e 5 array.i06
end

i! chance.c 55 #)
chances.caling5&ery$ig&alue6
chance.i0e 5 )6
else
chances.caling5chance.c6
chance.i0e 5 array.i06
end

i! pot.c 55 #)
pot.caling5&ery$ig&alue6
pot.i0e 5 )6
else
pot.caling5pot.c6
pot.i0e 5 array.i06
end

i! raise.c 55 #)
raise.caling5&ery$ig&alue6
raise.i0e 5 )6
else
raise.caling5raise.c6
raise.i0e 5 array.i06
end

i! qtyraise.c 55 #)
qtyraise.caling5&ery$ig&alue6
qtyraise.i0e 5 )6
else
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io "=
qtyraise.caling5qtyraise.c6
qtyraise.i0e 5 littleArray.i06
end

i! !olloers.c 55 #)
!olloers.caling5&ery$ig&alue6
!olloers.i0e 5 )6
else
!olloers.caling5!olloers.c6
!olloers.i0e 5 littleArray.i06
end

i! ingame.c 55 #)
ingame.caling5&ery$ig&alue6
ingame.i0e 5 )6
else
ingame.caling5ingame.c6
ingame.i0e 5 littleArray.i06
end

i! nplayers.c 55 #)
nplayers.caling5&ery$ig&alue6
nplayers.i0e 5 )6
else
nplayers.caling5nplayers.c6
nplayers.i0e 5 littleArray.i06
end
numrounds5*6

% odds( pot( raise( chances( round( qtyraise( !olloers( ingame( nplayers(
inYlose( decision
d$50erosHodds.i0e(pot.i0e(raise.i0e(chance.i0e(numrounds(qtyraise.i0e(!ollo
ers.i0e(ingame.i0e(nplayers.i0e(*(@J6
% odds( pot( raise( chances( round( qtyraise( !olloers( ingame( nplayers(
inYlose( decision
qty50erosHodds.i0e(pot.i0e(raise.i0e(chance.i0e(numrounds(qtyraise.i0e(!oll
oers.i0e(ingame.i0e(nplayers.i0e(*(@J6

RA>4O324E7I.IO>5'6
9E.12RE724I//ERE>7E5)6
9E.12RE72RELA1IO>5*6
9E.12,I72RELA1IO>5<6
B8EEL2RE724I//ERE>7E5=6
B8EEL2,I72RELA1IO>5?6
B8EEL2,I72A9.OL:1E5@6

decisionkind59E.12RE724I//ERE>7E6

!unction R decision S 5
decideHodds(pot(raise(round(chances(nplayers(!olloers(ingame(qtyraiseJ
i! nargin 55 )
decisionkind5odds6
elsei! nargin 55 '
%nVo decide nada( apenas plota as decisXes.
dispHRIstopLearning I num*strHstopLearningJSJ6
dispHRIodds.caling I num*strHodds.calingJSJ6
dispHRIchances.caling I num*strHchances.calingJSJ6
dispHRIpot.caling I num*strHpot.calingJSJ6
dispHRIraise.caling I num*strHraise.calingJSJ6
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io "
dispHRIqtyraise.caling I num*strHqtyraise.calingJSJ6
dispHRI!olloers.caling I num*strH!olloers.calingJSJ6
dispHRIingame.caling I num*strHingame.calingJSJ6
dispHRInplayers.caling I num*strHnplayers.calingJSJ6
clear tmp6
tmp5>a>Hodds.i0eTpot.i0e(raise.i0eTchance.i0eTqtyraise.i0eT!oll
oers.i0eTingame.i0eTnplayers.i0eTnumroundsJ6
k5'6
!or nplayers45)"nplayers.i0e6
!or ingame45)"ingame.i0e6
!or !olloers45)"!olloers.i0e6
!or qtyraise45)"qtyraise.i0e6
!or round5)"*
!or chances45)"chance.i0e
!or raise45)"raise.i0e
!or pot45)"pot.i0e
!or odds45)"odds.i0e
k5kL)6
decision5decideBith;ameHJ6
tmpHkJ5decision6
end
end
end
end
end
end
end
end
end
pcolorHtmpJ6
shading !lat6
clear tmp6
else
%discreti0a os argumentos
odds45minH!i%HoddsYodds.calingJL)(odds.i0eJ6
chances45minH!i%HchancesYchances.calingJL)(chance.i0eJ6
pot45minH!i%HpotYpot.calingJL)(pot.i0eJ6
raise45minH!i%HraiseYraise.calingJL)(raise.i0eJ6
qtyraise45minH!i%HqtyraiseYqtyraise.calingJL)(qtyraise.i0eJ6
!olloers45minH!i%H!olloersY!olloers.calingJ
L)(!olloers.i0eJ6
ingame45minH!i%HingameYingame.calingJL)(ingame.i0eJ6
nplayers45minH!i%HnplayersYnplayers.calingJL)(nplayers.i0eJ6
round5minHround(numroundsJ6
decision5decideBith;ameHJ6
end

!unction R decision S 5 decideBith;ameHJ
%e%trai in!ormaeVo no $anco para uma decisVo
resin5d$Hodds4(pot4(raise4(chances4(round(qtyraise4(!olloers4
(ingame4(nplayers4()("J6
reslose5d$Hodds4(pot4(raise4(chances4(round(qtyraise4(!olloers
4(ingame4(nplayers4(*("J6
si0in5qtyHodds4(pot4(raise4(chances4(round(qtyraise4(!olloers
4(ingame4(nplayers4()("J6
si0lose5qtyHodds4(pot4(raise4(chances4(round(qtyraise4(!olloer
s4(ingame4(nplayers4(*("J6

decision5>a>6
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io "B
%sK usa decisVo se o numero de decisoes ] maior que o limiar
i! sumHsi0inJLsumHsi0loseJ W stopLearning
sitch decisionkind
case 9E.12RE724I//ERE>7E %melhor recompensa Hdi!ereneaJ
em dinheiro
ma%res5>a>6
!or dec5)"@
si05si0inHdecJ6
si0l5si0loseHdecJ6
i! si0 L si0l W '
res5HresinHdecJ#resloseHdecJJYHsi0Lsi0lJ6
i! isnanHma%resJ PP res W ma%res
ma%res5res6
decision5dec6
end
end
end
case 9E.12RE72RELA1IO> %melhor recompensa HrelaeVoJ em
dinheiro
ma%res5>a>6
!or dec5)"@
si05si0inHdecJ6
si0l5si0loseHdecJ6
i! si0 L si0l W '
res5HHresinHdecJL)JYHresloseHdecJL)JJ T
HHsi0lL)JYHsi0L)JJ6
i! isnanHma%resJ PP res W ma%res
ma%res5res6
decision5dec6
end
end
end
case 9E.12,I72RELA1IO> %melhor &itKria HrelaeVoJ
ma%res5>a>6
!or dec5)"@
i! si0inHdecJ L si0loseHdecJ W '
res5Hsi0inHdecJYHsi0loseHdecJL)JJ6
i! isnanHma%resJ PP res W ma%res
ma%res5res6
decision5dec6
end
end
end
case B8EEL2RE724I//ERE>7E %roleta de melhor Hdi!ereneaJ
recompensa
receachdecision5R' ' ' ' ' 'S6
!or dec5)"@
si05si0inHdecJ6
si0l5si0loseHdecJ6
i! si0 L si0l W '
res5!i%H)''THresinHdecJ#resloseHdecJJY
Hsi0Lsi0lJJ6
receachdecisionHdecJ5res6
end
end
sumreceachdecision5sumHreceachdecisionHreceachdecis
ion W 'JJ6
i! sumreceachdecision 55 '
receachdecision5receachdecision#
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io "3
minHreceachdecisionJ6
sumreceachdecision5sumHreceachdecisionHreceachd
ecision W 'JJ6
end
rnddecision5randTsumreceachdecision6
!or dec5)"@
i! receachdecisionHdecJW'
rnddecision5rnddecision#
receachdecisionHdecJ6
i! rnddecision Q '
decision5dec6
$reak6
end
end
end
case B8EEL2,I72RELA1IO> %roleta de maior HrelaeVoJ
&itKria
receachdecision5R' ' ' ' ' 'S6
!or dec5)"@
receachdecisionHdecJ5!i%Hsi0inHdecJY
H)Lsi0loseHdecJJJ6
end
sumreceachdecision5sumHreceachdecisionJ6
i! sumreceachdecision W5 )
rnddecision5randTsumreceachdecision6
!or dec5)"@
rnddecision5rnddecision#
receachdecisionHdecJ6
i! rnddecision Q '
decision5dec6
$reak6
end
end
else
decision5)6
end
case B8EEL2,I72A9.OL:1E %roleta de maior Ha$solutoJ
&itKria
sumsi0in5sumHsi0inJ6
i! sumsi0in W5 )
rnddecision5sumsi0inTrand6
!or dec5)"@
rnddecision5rnddecision#si0inHdecJ6
i! rnddecision Q '
decision5dec6
$reak6
end
end
end
case RA>4O324E7I.IO>
% nVo !a0 nada pq &ai tomar a decisVo aleatKria no
!im
end
end
i! isnanHdecisionJ
sitch !i%HrandTDJ
case '
decision 5 )6
case )
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io "<
decision 5 <6
case *
decision 5 =6
case <
decision 5 ?6
case =
decision 5 @6
otherise
decision 5 *6
end
% decision5'6
end
end
end
!unction R rd$( rqty S 5 getHJ
rd$5d$6
rqty5qty6
end
!unction RS 5 learnHargd$(argqtyJ
i! nargin 55 '
% nVo aprende. Apenas plota learn qty
tmp50erosHodds.i0eTpot.i0eTraise.i0eTchance.i0e(qtyraise.i0eT!o
lloers.i0eTingame.i0eTnplayers.i0eTnumroundsT)*J6
tmpH"J5qtyH"J6
pcolorHtmpJ6
shading !lat6
else
d$5argd$6
qty5argqty6
end
end
end
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io "A
D/E/ createhumanplaGer/m
Cste m4todo cria o %ogador humano/
!unction R playerai S 5 createhumanplayerHJ %[okQI>:.4W
% +author ,in-cius .ousa /a0io
% Oogador humano

playerai5structHIdecideI(+decide(IlearnI(+learn(IgetI(+getJ6

!unction R decision S 5
decideHodds(pot(raise(round(chances(nplayers(!olloers(ingame(qtyraiseJ
%[okQI>:.4W
dispHRIodds" I num*strHoddsJSJ6
dispHRIpot" I num*strHpotJSJ6
dispHRIraise" I num*strHraiseJSJ6
dispHRIround" I num*strHroundJSJ6
dispHRIchances" I num*strHchancesJSJ6
dispHRInplay" I num*strHnplayersJSJ6
dispHRI!ollo" I num*strH!olloersJSJ6
dispHRIingame" I num*strHingameJSJ6
dispHRIqtyraise" I num*strHqtyraiseJSJ6
repeat5)6
hile repeat 55 )
decision5inputHIEscolha a Oogada"IJ6
i! decision55) PP decision55* PP decision55< PP decision55= PP
decision55? PP decision55@
repeat5'6
end
end

end
!unction RS 5 getHJ %[okQI>:.4W
end
!unction RS 5 learnHJ %[okQI>:.4W
end
end
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io "D
D/=!/ createm'splaGer/m
Cste m4todo cria o %ogador (FS/
!unction R playerai S 5 createm!splayerHargtJ
% +author ,in-cius .ousa /a0io
% 7ria um Oogador que Ooga matematicamente Ousto
playerai5structHIdecideI(+decide(IlearnI(+learn(IgetI(+getJ6
t 5 argt6
!unction R decision S 5
decideHodds(pot(raise(round(chances(nplayers(!olloers(ingame(qtyraiseJ
%[okQI>:.LW
i! Hodds 55 'J
decision5*6
else
othermoney5HpotTHodds#)JJYodds6
mymoney5pot#othermoneyLraise6
up5HchancesTothermoneyJY)''6
don5HH)''#chancesJTmymoneyJY)''6
di!5up#don6
i! di! Q #) T t
decision 5 )6
elsei! di! Q ) T t
decision 5 *6
elsei! di! Q ? T t
decision 5 <6
elsei! di! Q )' T t
decision 5 =6
elsei! di! Q )? T t
decision 5 ?6
else
decision 5 @6
end
end
end
!unction RS 5 getHJ %[okQI>:.4W
end
!unction RS 5 learnHJ %[okQI>:.4W
end

end
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io ""
D/==/ createrandomplaGer/m
Cste m4todo cria o %ogador #leatrio/
% (aut)or *in+cius #ousa ,a-io
!unction R playerai S 5 createrandomplayerHJ %[okQI>:.4W
% Uogador aleatKrio
playerai5structHIdecideI(+decide(IlearnI(+learn(IgetI(+getJ6


!unction R decision S 5
decideHodds(pot(raise(round(chances(nplayers(!olloers(ingame(qtyraiseJ
%[okQI>:.4W
sitch !i%HrandTDJ
case '
decision 5 )6
case )
decision 5 <6
case *
decision 5 =6
case <
decision 5 ?6
case =
decision 5 @6
otherise
decision 5 *6
end
end
!unction RS 5 getHJ %[okQI>:.4W
end
!unction RS 5 learnHJ %[okQI>:.4W
end
end
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io "E
D/=/ createrhplaGer/m
Cste m4todo cria o %ogador )?/
% +author ,in-cius .ousa /a0io
!unction R playerai S 5 createrhplayerHargtJ
% 7ria um Oogador que Ooga de acordo com R8
playerai5structHIdecideI(+decide(IlearnI(+learn(IgetI(+getJ6
t 5 argt6
!unction R decision S 5
decideHodds(pot(raise(round(chances(nplayers(!olloers(ingame(qtyraiseJ
%[okQI>:.LW
& 5 pot Y HHqtyraiseL)J T !olloers T ingame T HraiseL)JJ6
i! & Q t
decision 5 )6
elsei! & Q *'Tt
decision 5 *6
elsei! & Q ?'Tt
decision 5 <6
elsei! & Q )''Tt
decision 5 =6
elsei! & Q )'''Tt
decision 5 ?6
else
decision 5 @6
end
% dispHRI& I num*strH&J I decision I num*strHdecisionJSJ6
end
!unction RS 5 getHJ %[okQI>:.4W
end
!unction RS 5 learnHJ %[okQI>:.4W
end

end
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io E!
D/=B/ createdata&ase/m
Cste m4todo cria a &ase de dados de %ogadas para ser utili-ada mais tarde pelos %ogadores
evolutivos/
% (aut)or *in+cius #ousa ,a-io
!unction R result S 5 createdata$aseHJ
% 7ria uma $ase de dados de Oogadas e resultados
>,AR.5))6

result5structHIgetI(+get(IinsertI(+insertJ6
d$ 5 0erosH)'''''(>,AR.J6

si0e5'6

%% get data$ase
!unction R resd$(si0 S 5 getHJ
resd$5d$6
si05si0e6
end
%% insert a ne element
!unction R ndata S 5
insertHodds(pot(raise(round(chances(nplayers(!olloers(ingame(qtyraise(deci
sion(resultJ
i! si0e Q lengthHd$J # )
ndata5si0e6
i! nargin G5 '
si0e5si0eL)6
d$Hsi0e()">,AR.J5Rodds pot raise round chances nplayers
!olloers ingame qtyraise decision resultS6
end
else
ndata5'6
end
end
end
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io E=
D/=3/ traindiscrete/c
Cste m4todo treina o %ogador com aprendi-ado por es'oro/
&'
T 1reina o Oogador discreto. /eito em 7 pelo maior desempenho
T author ,in-cius .ousa /a0io
TY

[include _me%.h_

[de!ine 4E7I.IO>. @
[de!ine RO:>4. *
[de!ine BI>LO.E. *


[de!ine 8O44 '
[de!ine 8PO1 )
[de!ine 8RAI.E *
[de!ine 8RO:>4 <
[de!ine 878A>7E =
[de!ine 8>PLAY ?
[de!ine 8/OLLOB @
[de!ine 8I>;A3E A
[de!ine 8E1YRAI.E C
[de!ine 84E7I.IO> D
[de!ine 8RE.:L1 )'

[de!ine ,ERY9I;,AL:E DDDDDD

&oid mexFunctionH int nlhs( m%Array TplhsRS(
int nrhs( const m%Array TprhsRS J
M
YY entrada
dou$le to( tr( tc( tp( tq( t!( ti( tn6
int ma%r( ma%c( ma%p( ma%o( ma%q( ma%!( ma%i( ma%n6
int ma%history(ma%h(hsi0e6
m.i0e Tpd$si0e6
m.i0e Thd$si0e6
dou$le Tqty6
dou$le Tpd$6
dou$le Thd$6

YY calculo
dou$le odd( pot( raise( chance( round( qtyraise( !ollo( ingame( nplay(
result6
int odd4( pot4( raise4( chance4( round4( qtyraise4( !ollo4( ingame4(
nplay4( decision6
int inlose(si06
dou$le neres6
int ip6

YY constantes
int hodd( hpot( hraise( hchance( hround( hqtyraise( h!ollo( hingame(
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io E
hnplay( hdecision( hresult6
int podd( ppot( praise( pchance( pround( pqtyraise( p!ollo( pingame(
pnplay( pdecision( pinlose6

int i6

YY checa n`mero de argumentos
i! Hnrhs b5 )*JM
mexErrMsgTxt H_>`mero de argumentos in&Zlido._J6
return6
N

YY l^ a entrada
to 5 mxGet!calarHprhsR'SJ6
tr 5 mxGet!calarHprhsR)SJ6
tc 5 mxGet!calarHprhsR*SJ6
tp 5 mxGet!calarHprhsR<SJ6

tq 5 mxGet!calarHprhsR=SJ6
t! 5 mxGet!calarHprhsR?SJ6
ti 5 mxGet!calarHprhsR@SJ6
tn 5 mxGet!calarHprhsRASJ6

to 5 to 55 #) d ,ERY9I;,AL:E " to6
tr 5 tr 55 #) d ,ERY9I;,AL:E " tr6
tc 5 tc 55 #) d ,ERY9I;,AL:E " tc6
tp 5 tp 55 #) d ,ERY9I;,AL:E " tp6
tq 5 tq 55 #) d ,ERY9I;,AL:E " tq6
t! 5 t! 55 #) d ,ERY9I;,AL:E " t!6
ti 5 ti 55 #) d ,ERY9I;,AL:E " ti6
tn 5 tn 55 #) d ,ERY9I;,AL:E " tn6

qty 5 mxGetPrHprhsRCSJ6
pd$ 5 mxGetPrHprhsRDSJ6
hsi0e 5 mxGet!calarHprhsR)'SJ6
hd$ 5 mxGetPrHprhsR))SJ6
pd$si0e 5 mxGetDimensionsHprhsRDSJ6
hd$si0e 5 mxGetDimensionsHprhsR))SJ6

ma%o5HintJHpd$si0eR'SJ6
ma%p5HintJHpd$si0eR)SJ6
ma%r5HintJHpd$si0eR*SJ6
ma%c5HintJHpd$si0eR<SJ6
ma%q5HintJHpd$si0eR?SJ6
ma%!5HintJHpd$si0eR@SJ6
ma%i5HintJHpd$si0eRASJ6
ma%n5HintJHpd$si0eRCSJ6

ma%history5HHintJHhd$si0eR'SJJ6
ma%h5HintJHhd$si0eR)SJ6

YY gera constantes para au%iliar os ponteiros das $ases de dados
hodd58O44 T ma%history6
hpot58PO1 T ma%history6
hraise58RAI.E T ma%history6
hchance5878A>7E T ma%history6
hround58RO:>4 T ma%history6
hnplay58>PLAY T ma%history6
h!ollo58/OLLOB T ma%history6
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io EB
hingame58I>;A3E T ma%history6
hqtyraise58E1YRAI.E T ma%history6
hresult58RE.:L1 T ma%history6
hdecision584E7I.IO> T ma%history6

i 5 )6
podd5i6
i T5 ma%o6
ppot5i6
i T5 ma%p6
praise5i6
i T5 ma%r6
pchance5i6
i T5 ma%c6
pround5i6
i T5 RO:>4.6
pqtyraise5i6
i T5 ma%q6
p!ollo5i6
i T5 ma%!6
pingame5i6
i T5 ma%i6
pnplay5i6
i T5 ma%n6
pinlose5i6
i T5 BI>LO.E.6
pdecision5i6

YY loop com toda a $ase de dados
!or Hi 5 '6 i Q hsi0e6 iLLJM
YY separa a in!ormaeVo
odd5hd$RiLhoddS6
pot5hd$RiLhpotS6
raise5hd$RiLhraiseS6
chance5hd$RiLhchanceS6
round5hd$RiLhroundS#)6
nplay5hd$RiLhnplayS6
!ollo5hd$RiLh!olloS6
ingame5hd$RiLhingameS6
qtyraise5hd$RiLhqtyraiseS6

decision5HintJHhd$RiLhdecisionSJ#)6
result5hd$RiLhresultS6

YY deteceVo $Zsica de erro na $ase de dados
i! Hpot Q ' PP raise Q ' PP chance Q ' PP decision Q ' PP
decision W ? PP odd Q ' PP ingame Q ' PP !ollo Q ' PP
nplay Q ' PP !ollo W nplay PP ingame W nplay PP
qtyraise Q 'J
M
mexPrintfH_inde% %icn_(iJ6
mexErrMsgTxtH_4ado inconsistente_J6
N

YY discreti0a a in!ormaeVo
odd45HintJHoddYtoJ6
chance45HintJHchanceYtrJ6
pot45HintJHpotYtpJ6
raise45HintJHraiseYtrJ6
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io E3
round45HintJround#)6
nplay45HintJHnplayYtnJ6
!ollo45HintJH!olloYt!J6
ingame45HintJHingameYtiJ6
qtyraise45HintJHqtyraiseYtqJ6

i!Hround4W5RO:>4.J round45RO:>4.#)6
i!Hodd4W5ma%oJ odd45ma%o#)6
i!Hchance4W5ma%cJ chance45ma%c#)6
i!Hpot4W5ma%pJ pot45ma%p#)6
i!Hraise4W5ma%rJ raise45ma%r#)6
i!Hnplay4W5ma%nJ nplay45ma%n#)6
i!H!ollo4W5ma%!J !ollo45ma%!#)6
i!Hingame4W5ma%iJ ingame45ma%i#)6
i!Hqtyraise4W5ma%qJ qtyraise45ma%q#)6

YYinsere na $ase do Oogador as in!ormaeXes
inlose5'6
i! Hresult Q 'J M
inlose5)6
result5#result6
N
ip5Hodd4TpoddJLHpot4TppotJLHraise4TpraiseJLHchance4TpchanceJL
Hround4TproundJLH!ollo4Tp!olloJLHnplay4TpnplayJL
Hingame4TpingameJLHqtyraise4TpqtyraiseJLHinloseTpinloseJL
HdecisionTpdecisionJ6

si05HintJHqtyRipSJ6
qtyRipS5qtyRipSL)6
neres5'6
i! Hsi0W'J M
neres5pd$RipS6
N
pd$RipS5neresLresult6
N
N
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io E<
D/=</ 'illdata&ase/m
Cste procedimento 'a- diversos %ogos apenas para preencher a &ase de dados/
% (aut)or *in+cius #ousa ,a-io
hile )55)
i! rand Q '.'?
simulatealldispute6
end

tic
dispHItreinandoIJ6

clear6
initialmoney5)'''6
small$lind5)'6
ma%games5)'''6
to5*6
tc5)'6
tp5)'6
tr5?6
t!5)6
tn5#)6
tq5#)6
ti5#)6
n5)'6
ln5*6
clear pd6
clear pd$6
clear qty6
nepochs5)6
pd5creatediscreteplayerH'(to(tc(tp(tr(tq(t!(ti(tn(n(lnJ6
Rpd$(qtyS5pd.getHJ6
hile e%ist HRIsimdata$aseI int*strHnepochsJ I.matIS( I!ileIJ G5 '
clear data$ase6
clear hd$6
clear hsi06
loadHRIsimdata$aseI int*strHnepochsJSJ6
Rhd$(hsi0S5data$ase.getHJ6
traindiscreteHto(tr(tc(tp(tq(t!(ti(tn(qty(pd$(hsi0(hd$J6
nepochs5nepochsL)6
end
clear data$ase6
data$ase5createdata$aseHJ6

clear simplayers6
!or i5)")'
simplayersHiJ5pd6 %[okQA;ROBW
end
!or i5))")?
simplayersHiJ5createconstantplayerH*J6 %[okQA;ROBW
end
!or i5)@"*'
simplayersHiJ5createconstantplayerH?J6 %[okQA;ROBW
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io EA
end
!or i5*)"*?
simplayersHiJ5createm!splayerH)J6 %[okQA;ROBW
end
!or i5*@"<'
simplayersHiJ5createm!splayerH?J6 %[okQA;ROBW
end
!or i5<)"<?
simplayersHiJ5createrhplayerH'.)J6 %[okQA;ROBW
end
!or i5<@"='
simplayersHiJ5createrhplayerH'.'')J6 %[okQA;ROBW
end
!or i5=)"?'
simplayersHiJ5createrandomplayerHJ6 %[okQA;ROBW
end

dispHIOogandoIJ6

nplayers5*6
hile )55)
nplayers5nplayersL)6
i! nplayersW)'
nplayers5*6
end
playpokerHnplayers(simplayers(ma%games(initialmoney(small$lind(data
$ase(DDDJ6
i! data$ase.insertHJ 55 '
$reak6
end
end

dispHRIsal&ando epoca I int*strHnepochsJSJ6
sa&e HRIsimdata$aseI int*strHnepochsJS( Idata$aseIJ6
dispHRIsal&o epoca I int*strHnepochsJSJ6
toc

end
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io ED
D/=A/ neIsimulationdispute/m
Cste m4todo 'oi criado para 'a-er as disputas entre dois %ogadores de tipos di'erentes/
% +author ,in-cius .ousa /a0io
!unction R simulation S 5 nesimulationdisputeH pd (m!s(rh(constantdecision
J

playerdiscrete5pd6
playerhuman5createhumanplayerHJ6
playerm!s5createm!splayerHm!sJ6
playerrh5createrhplayerHrhJ6
playerrandom5createrandomplayerHJ6
playerconstant5createconstantplayerHconstantdecisionJ6

simulation 5 structHIdisputeI(+disputeJ6

!unction R in$ S 5 dispute Ha( $( qtyJ
!unction R p S 5 getplayerHpidJ
i! strcmpHpid( IdiscreteIJ
p 5 playerdiscrete6
elsei! strcmpHpid( Im!sIJ
p 5 playerm!s6
elsei! strcmpHpid( IrhIJ
p 5 playerrh6
elsei! strcmpHpid( IconstantIJ
p 5 playerconstant6
elsei! strcmpHpid( IrandomIJ
p 5 playerrandom6
elsei! strcmpHpid( IhumanIJ
p 5 playerhuman6
end
end
playera 5 getplayerHaJ6
player$ 5 getplayerH$J6
ina5'6
in$5'6
stylegame5)6
i! strcmpHa(IhumanIJ PP strcmpH$(IhumanIJ
stylegame5<6
end

!or i5)"qty
nplayers5modHi(?JT*L*6
i! strcmpHa(IhumanIJ
simplayersH)J5playera6 %[okQA;ROBW
!or O5*"nplayers
simplayersHOJ5player$6 %[okQA;ROBW
end
elsei! strcmpH$(IhumanIJ
simplayersH)J5player$6 %[okQA;ROBW
!or O5*"nplayers
simplayersHOJ5playera6 %[okQA;ROBW
end
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io E"
else
!or O5)"HnplayersY*J
simplayersHOJ5playera6 %[okQA;ROBW
end
!or O5HnplayersY*L)J"nplayers
simplayersHOJ5player$6 %[okQA;ROBW
end
end
Rig(S5playpokerHnplayers(simplayers(='()'''()'(MN(stylegameJ6
i! strcmpH!unctiontostringHsimplayersHJ.decideJ(R IcreateI a
IplayerYdecideI SJ
ina5inaL)6
elsei! strcmpH!unctiontostringHsimplayersHJ.decideJ(R IcreateI
$ IplayerYdecideI SJ
in$5in$L)6
end
% disp HRa I" I num*strHinaT)''YiJ I I $ I" I num*strHin$T)''Y
iJSJ
end
disp HRa I" I num*strHinaT)''YqtyJ I I $ I" I
num*strHin$T)''YqtyJSJ
end

end

#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io EE
D/=D/ neIsimulationdispute/m
Cste m4todo 'a- a disputa entre todos os %ogadores/
% (aut)or *in+cius #ousa ,a-io
dispHItainingIJ6
clear simplayers
to5*6
tc5)'6
tp5)'6
tr5?6
t!5)6
tn5#)6
tq5#)6
ti5#)6
n5)'6
ln5*6
st5@''6
clear pd6
clear pd$6
clear qty6
nepochs5)6
pd5creatediscreteplayerH'(to(tc(tp(tr(tq(t!(ti(tn(n(lnJ6
Rpd$(qtyS5pd.getHJ6
hile e%ist HRIsimdata$aseI int*strHnepochsJ I.matIS( I!ileIJ G5 ' \\
nepochs Q5 st
clear data$ase6
clear hd$6
clear hsi06
loadHRIsimdata$aseI int*strHnepochsJSJ6
Rhd$(hsi0S5data$ase.getHJ6
traindiscreteHto(tr(tc(tp(tq(t!(ti(tn(qty(pd$(hsi0(hd$J6
nepochs5nepochsL)6
end
dispHIplayingIJ6
simplayersH)J5pd6 %[okQA;ROBW
simplayersH*J5pd6 %[okQA;ROBW
simplayersH<J5createm!splayerH)J6 %[okQA;ROBW
simplayersH=J5createm!splayerH?J6 %[okQA;ROBW
simplayersH?J5createrandomplayerHJ6 %[okQA;ROBW
simplayersH@J5createrandomplayerHJ6 %[okQA;ROBW
simplayersHAJ5createconstantplayerH*J6 %[okQA;ROBW
simplayersHCJ5createconstantplayerH?J6 %[okQA;ROBW
simplayersHDJ5createrhplayerH'.)J6 %[okQA;ROBW
simplayersH)'J5createrhplayerH'.'')J6 %[okQA;ROBW

ins5R' ' ' ' ' ' ' ' ' 'S6
!or OO5)"?''
Rig(S5playpokerH)'(simplayers(='()'''()'(MN()J6
insHJ5insHJL)6
dispHint*strHOOJJ6
end
ins
disp HIendIJ6
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io =!!
D/="/ simulatealldispute/m
Cste m4todo 'oi usado para a%ustar o %ogador com aprendi-ado por re'oro/ Cle 'a- simula7es
de disputa contra todos os outros tipos de %ogadores e retorna um O'itnessP/
% (aut)or *in+cius #ousa ,a-io

!unction R in$ S 5 simulatealldisputeHargs( nstJ
% !or am!s5R'.* '.= '.A ) * = ? @ A )' *'S
% sim5nesimulationdisputeH'(am!s('(*J6
% dispHRIm!s5I num*strHam!sJSJ6
% sim.disputeHIrandomI(Im!sI()''J6
% end
% disp I##########################I6
% !or aconstant5*"@
% sim5nesimulationdisputeH'()('(aconstantJ6
% dispHRIconstant5I num*strHaconstantJSJ6
% sim.disputeHIconstantI(IrandomI()''J6
% end
% !or am!s5R) ? )'S
% !or aconstant5*"@
% sim5nesimulationdisputeH'(am!s('(aconstantJ6
% dispHRIm!s5I num*strHam!sJ I constant5I num*strHaconstantJSJ6
% sim.disputeHIconstantI(Im!sI()''J6
% end
% end
% disp I##########################I6
% !or arh5R'.''') '.'') '.') '.'? '.) '.? )S
% dispHRIrh5I num*strHarhJSJ6
% sim5nesimulationdisputeH'()(arh('J6
% sim.disputeHIrandomI(IrhI()''J6
% end
% !or arh5R'.'') '.') '.)S
% !or aconstant5R* = @S
% dispHRIrh5I num*strHarhJ I constant5I num*strHaconstantJSJ6
% sim5nesimulationdisputeH'()(arh(aconstantJ6
% sim.disputeHIconstantI(IrhI()''J6
% end
% end
% !or arh5R'.'') '.') '.)S
% !or am!s5R) ?S
% dispHRIrh5I num*strHarhJ I m!s5I num*strHam!sJSJ6
% sim5nesimulationdisputeH'(am!s(arh('J6
% sim.disputeHIm!sI(IrhI()''J6
% end
% end
% disp Icompiling...I6
% me% Hhich HItraindiscrete.cIJJ6
to5D.@6
tc5*<.<6
tp5<A.=6
tr5)<.*6
t!5*.@6
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io =!=
tn5<.?6
tq5<.?6
ti5?.@6
n5=6
ln5*6

i! ) 55 )
to5*6
tc5)'6
tp5)'6
tr5?6
t!5)6
tn5#)6
tq5#)6
ti5#)6
n5)'6
ln5*6
end
st5DDDD6
np5)''6
i! nargin 55 )
to5argsH)J6
tc5argsH*J6
tp5argsH<J6
tr5argsH=J6
t!5argsH?J6
tn5argsH@J6
tq5argsHAJ6
ti5argsHCJ6
n5!i%HargsHDJJ6
ln5!i%HargsH)'JJ6

st5C''6
np5)''6
end
i! nargin 55 *
st5nst6
np5)''6
end
disp HRI .1OP 5 I int*strHstJSJ6
disp
I#########################################################################I
6
tic
clear pd6
clear pd$6
clear qty6
nepochs5)6
pd5creatediscreteplayerH'(to(tc(tp(tr(tq(t!(ti(tn(n(lnJ6
Rpd$(qtyS5pd.getHJ6
hile e%ist HRIsimdata$aseI int*strHnepochsJ I.matIS( I!ileIJ G5 ' \\
nepochs Q5 st
clear data$ase6
clear hd$6
clear hsi06
loadHRIsimdata$aseI int*strHnepochsJSJ6
Rhd$(hsi0S5data$ase.getHJ6
traindiscreteHto(tr(tc(tp(tq(t!(ti(tn(qty(pd$(hsi0(hd$J6
nepochs5nepochsL)6
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io =!
end

dispHRI++ RE74I/ to5I num*strHtoJ I tc5I num*strHtcJ I tp5I num*strHtpJ
I tr5I num*strHtrJ I t!5I num*strHt!J I tn5I num*strHtnJ I tq5I num*strHtqJ
I ti5I num*strHtiJ I n5I num*strHnJ I ln5I num*strHlnJ I m!s5)Y? cnt5*Y?
rh5'.)Y'.'')ISJ6
clear sim6
sim5nesimulationdisputeHpd()('.)(*J6
in$ 5 '6
in$ 5 in$ L * T sim.disputeHIdiscreteI(Im!sI(npJ6
in$ 5 in$ L = T sim.disputeHIdiscreteI(IrandomI(npJ6
in$ 5 in$ L sim.disputeHIdiscreteI(IrhI(npJ6
in$ 5 in$ L sim.disputeHIdiscreteI(IconstantI(npJ6
clear sim6
sim5nesimulationdisputeHpd(?('.'')(?J6
in$ 5 in$ L * T sim.disputeHIdiscreteI(Im!sI(npJ6
in$ 5 in$ L sim.disputeHIdiscreteI(IconstantI(npJ6
in$ 5 in$ L sim.disputeHIdiscreteI(IrhI(npJ6
dispHRIresult" I num*strHin$JSJ6
clear pd6
clear pd$6
clear qty6
clear data$ase6
clear hd$6
clear hsi06

toc
end
#lgoritmos para um %ogador inteligente de 0o.er 1 +in2cius Sousa Fa-io =!B
D/=E/ simulatehuman/m
Cste procedimento 'oi usado para %ogar o %ogador com aprendi-ado por re'oro contra
humanos/
% (aut)or *in+cius #ousa ,a-io
echo o!!6

to5D.@6
tc5*<.<6
tp5<A.=6
tr5)<.*6
t!5*.@6
tn5<.?6
tq5<.?6
ti5?.@6
n5=6
ln5*6
st5DDD6

tic
clear pd6
clear pd$6
clear qty6
nepochs5)6
pd5creatediscreteplayerH'(to(tc(tp(tr(tq(t!(ti(tn(n(lnJ6
Rpd$(qtyS5pd.getHJ6
hile e%ist HRIsimdata$aseI int*strHnepochsJ I.matIS( I!ileIJ G5 ' \\
nepochs Q5 st
clear data$ase6
clear hd$6
clear hsi06
loadHRIsimdata$aseI int*strHnepochsJSJ6
Rhd$(hsi0S5data$ase.getHJ6
traindiscreteHto(tr(tc(tp(tq(t!(ti(tn(qty(pd$(hsi0(hd$J6
nepochs5nepochsL)6
end

dispHRI++ RE74I/ to5I num*strHtoJ I tc5I num*strHtcJ I tp5I num*strHtpJ I
tr5I num*strHtrJ I t!5I num*strHt!J I tn5I num*strHtnJ I tq5I num*strHtqJ I
ti5I num*strHtiJ I n5I num*strHnJ I ln5I num*strHlnJ I m!s5)Y? cnt5*Y?
rh5'.)Y'.'')ISJ6
clear sim6
sim5nesimulationdisputeHpd()('.')(*J6
%sim.disputeHIhumanI(IdiscreteI()J6
Algoritmos para um jogador inteligente de Poker
Vincius Sousa Fazio
/
1
Departamento de Informtica e Estatstica Universidade Federal do Santa Catarina (UFSC)
Caixa Postal 476 88.040-900 Florianpolis SC Brasil
s!a0io+in!.u!sc.$r
Abstract. Po'er i( a game of <luffing and pro<a<ilit. of %inning. T$e goal %a( to create
and (ear$ for algorit$m( t$at could learn to pla. %ell Po'er. T$e eoling pla.er created
u(e( reinforcement learning %$ere t$e game %a( diided in a $uge (tate matri6 %it$
deci(ion and re%ardH( data. T$e pla.er ta'e( t$e deci(ion %it$ <e(t aerage re%ard on
eac$ (tate. To compare t$e pla.erH( efficienceE t$ere %ere di(pute( %it$ pla.er( t$at ta'e
deci(ion <a(ed on formula(. T$e re(ult( %ere ($o%n grap$icall. on t$i( paper.
Resuo. Po'er 4 um #ogo de <lefe e pro<a<ilidade de encer. P o<#etio foi inentar de
procurar algoritmo( ;ue aprende((em a #ogar <em Po'er. P #ogador eolutio criado
utili2a aprendi2ado por refor3o onde o #ogo foi diidido em uma grande matri2 de e(tado(
com dado( de deci(=e( e recompen(a(. P #ogador toma a deci(:o com a mel$or
recompen(a m4dia para cada e(tado. Para comparar a eficiJncia do #ogadorE >ria(
di(puta( com #ogadore( ;ue tomam deci(=e( <a(eado em f+rmula( foram feita(. P(
re(ultado( foram mo(trado( graficamente no tra<al$o.
/0 *ntrodu1$o
Jingu4m sa&e ao certo a origem do 0o.er KL:M:0CD:# 05MC), !!"N/ 5 %ogo mais antigo
conhecido $ue tenha as caracter2sticas de &le'e, Ovence $uem tem a melhor moP e aposta 4 do
s4culo Q+ e de origem alem, chamado 0ochspiel/ ?6 registros de pessoas %ogando um %ogo
chamado #s Jas no s4culo Q:Q, $ue 4 muito parecido com po.er e usa vinte cartas/ #lguns
historiadores descordam da origem do po.er como uma variao do #s Jas e acreditam vir de um
%ogo 'rancs chamado 0o$ue/ 5 ator ingls *oseph CroIell relatou $ue o %ogo era %ogado em JeI
5rleans em ="E, com um &aralho de vinte cartas e $uatro %ogadores apostando $ual OmoP era a
mais valiosa/ ,ogo aps isso, o &aralho ingls de < cartas 'oi utili-ado e durante a Ruerra Civil
#mericana as regras 'icaram mais parecidas com as $ue so utili-adas ho%e/ Cm torno de =E<
comeou8se a %ogar o po.er com cartas comunit6rias, $ue 4 a modalidade usada neste tra&alho/ 5
po.er e seus %arg7es 'a-em parte da cultura americana/ Cm =ED! comearam os campeonatos
mundiais de po.er nos Cstados Unidos/ Cm =E"D, o po.er com cartas comunit6rias 'oram
introdu-idos em cassinos da Cali'rnia e se tornaram a modalidade de po.er mais popular at4 ho%e/
Cm =EE", um 'ilme com o tema de po.er chamado OCartas na (esaP, em ingls O)oundersP, 'oi
lanado nos Cstados Unidos/
0o.er 4 um %ogo de risco ou &le'e/ 5 esp2rito do %ogo 4 conseguir convencer o advers6rio $ue o seu
%ogo 4 mais 'orte $ue o dele e tentar adivinhar se o %ogo dele 4 mais 'orte $ue o seu/ 5
convencimento 4 atrav4s de apostas/ Se voc no apostar $ue seu %ogo 4 melhor $ue o do seu
advers6rio, o seu advers6rio vence sem precisar mostrar o %ogo/ Tam&4m 4 conhecido como %ogo de
mentiroso, assim como o OtrucoP no Brasil/
#s regras do %ogo so &em simples e isso 'oi um dos motivos de ter se tornado to popular
K05MC),5C5, !!"N/ 5 %ogador no possui in'orma7es su'icientes para tomar a deciso tima/
5u se%a, 4 um %ogo de in'ormao incompleta e essa 4 uma caracter2stica de muitos pro&lemas
relacionados a 6rea de :nteligncia #rti'icial/
Um %ogador com muita sorte consegue ganhar todos os %ogos sem precisar tomar decis7es
inteligentes, mas esses casos so raros/ 0ara a maioria das %ogadores, 0o.er envolve alguma deciso
inteligente/ :sso e>plica por$ue &ons %ogadores de po.er ganham mais $ue %ogadores medianos e
por$ue e>istem %ogadores de 0o.er pro'issionais/ #lgumas pessoas a'irmam $ue 0o.er 4 um %ogo
puramente de sorte mas para outras, $ue escreveram muitos livros a respeito, como David S.lans.G,
no/ C>istem muitos livros e artigos pu&licados a respeito, de-enas de so'tIares sendo
comerciali-ados em $ue o Snico propsito 4 tomar decis7es inteligentes em 0o.er e muitos sites de
0o.er 5nline pro2&em o uso destes so'tIares por dar muita vantagem aos %ogadores $ue os
utili-am/
(uitos %ogadores arti'iciais de po.er, tam&4m conhecidos como po.er&ots, %6 'oram
desenvolvidos/ C>istem at4 torneios K*5?#JS5J, !!DN de po.er&ots, como o !!D ###:
Computer 0o.er Competition Jo8,imit event ocorrido no ano de !!D/
0ara cumprir o o&%etivo de 'ormular algoritmos $ue tomem decis7es inteligentes em po.er
'oi implementado cinco algoritmos de di'erentes %ogadores/ 5 primeiro 'oi o %ogador aleatrio, $ue
toma deciso aleatria, sem levar em conta o estado do %ogo/ 5 segundo 'oi o %ogador constante,
$ue toma uma deciso constante, tam&4m sem se importar com o estado do %ogo/ 5 terceiro,
nomeado (FS, 'oi utili-ar uma 'rmula $ue 'a- uma relao linear com algumas in'orma7es do
%ogo, $ue so9 com a $uantidade de dinheiro apostado, a $uantidade de dinheiro $ue possa vir a
rece&er caso vena, a pro&a&ilidade de vencer e a pro&a&ilidade de perder/ 5 $uarto, nomeado )?,
'oi tam&4m utili-ar outra 'rmula $ue 4 uma relao linear de outras in'orma7es do %ogo, $ue so9
$uantidade de dinheiro $ue rece&er6 caso vena, a $uantidade de %ogadores $ue ainda vo tomar
alguma deciso, a $uantidade de %ogadores no 'ugiram, a $uantidade de dinheiro $ue precisa pagar
para continuar no %ogo e a $uantidade de ve-es $ue algu4m aumentou a aposta/ 5 $uinto, nomeado
%ogador de aprendi-ado por re'oro, 'oi arma-enar milh7es de decis7es e conse$uncias em
di'erentes estados do %ogo atrav4s de simula7es e, $uando 'or tomar uma deciso, consultar essa
&ase de dados por todas as decis7es 'eitas em um estado semelhante e tomar a deciso $ue o&teve o
melhor resultado, na m4dia/ Cste Sltimo %ogador precisava de muitas constantes para a%ustar a
Osemelhana do estado do %ogoP e para encontrar estas constantes 'oi utili-ado #lgoritmo Ren4tico/
0ara medir o desempenho dos %ogadores 'oi 'eito uma comparao de $uantidade de vitrias
disputando as di'erentes estrat4gias uma com a outra, al4m de %ogadores humanos testarem os
%ogadores arti'iciais/ #s disputas 'oram 'eitas utili-ando di'erentes con'igura7es dos %ogadores
arti'iciais/
# %usti'icativa para esse tra&alho no 4 apenas criar um &om %ogador de po.er/ # motivao
4 testar e comparar di'erentes algoritmos de para %ogar po.er e testar um novo algoritmo de
aprendi-ado para solucinar um pro&lema com in'ormao incompleta em um dom2nio relativamente
simples $ue 4 o po.er/ Uma &oa soluo pode servir de inspirao para resolver pro&lemas mais
gen4ricos relacionados a &arganha, $ue 4 o esp2rito do po.er, como a &olsa de valores/
20 Metodologia
Foi desenvolvido um programa de %ogo de po.er na modalidade no8limit $ue aceita %ogadores
gen4ricos, $ue pode ser um %ogador humano, $ue pega as entradas do teclado, $uatro %ogadores
est6ticos 1 constante, aleatrio, (FS e )?, e um %ogador evolutivo 1 aprendi-ado por re'oro/
Todos esses %ogadores %ogam entre si milhares de ve-es e de diversas 'ormas poss2veis9 mesas entre
a =! %ogadores e com %ogadores aleatoriamente escolhidos tanto no treinamento como na
veri'icao de desempenho dos %ogadores/ Cm todos os %ogos, o valor de dinheiro inicial 'oi =!!! e
o valor do small &lind 'oi =!/
20/0 ,reinamento
5 treinamento dos %ogadores deveria ser r6pido para se tornar vi6vel a tentativa de diversas 'ormas
de treinamento/ # estrat4gia utili-ada para o treinamento com este o&%etivo 'oi dividir em duas
etapas onde a primeira etapa 4 'eita apenas uma ve- e a segunda etapa, $ue necessita de muitos
a%ustes, 4 'eita muitas ve-es/
# primeira etapa 'oi registrar um histrico de %ogos, decis7es e recompensas/ Jessa &ase 'oi
registrado todos as decis7es de %ogadores com di'erentes m4todos em v6rios %ogos e a recompensa
da$uela deciso, $ue s 4 preenchida no 'inal do %ogo e 4 replicada para todas as a7es $ue levaram
T$uele recompensa/ # in'ormao contida nessa &ase 4 a seguinte9
Tabela 1. dimenses do estado do jogo
+ome 'escri1$o
05T Soma da $uantidade de dinheiro apostado por todos
5DDS )elao do 05T com o dinheiro apostado
)#:SC Fuantidade de dinheiro $ue precisa usar para continuar no %ogo
C?#JCC 0ro&a&ilidade de vencer o %ogo $uando todos mostram as cartas
)5UJD Cm $ue rodada 8 pre8'lop, 'lop, turn ou river 8 o %ogo se encontra
F5,,5LC)S JSmero de %ogadores $ue ainda vo decidir na rodada atual
:JR#(C JSmero de %ogadores $ue no 'ugiram nem sa2ram
J0,#VC)S JSmero de %ogadores
FTV0,#VC)S Fuantidade de BCT / )#:SC 'eito por todos
#s in'orma7es contidas no estado do %ogo ainda no comentadas so o 5DDS, o F5,,5LC)S, o
:JR#(C, o J0,#VC)S e o FTV)#:SC/ 5DDS 4 apenas a relao do dinheiro do 05T em
relao ao dinheiro apostado, por e>emplo, um 5DDS igual a < signi'ica $ue tem no 05T < ve-es o
valor apostado pelo %ogador/ 5 F5,,5LC)S indica $uantos %ogadores ainda vo decidir algo/ :sso
por$ue o Sltimo a decidir tem vantagem em relao ao primeiro a decidir por$ue o Sltimo %6 sa&e
$uem aumentou e $uem no/ :JR#(C indica $uantos %ogadores ainda no 'ugiram/ J0,#VC)S
indica $uantos %ogadores esto %ogando, independente de ter 'ugido, 'alido ou ainda estar em %ogo/
5 FTV)#:SC indica a $uantidade de ve-es $ue algum %ogador aumentou a aposta e 4 importante
por$ue %ogos $ue houveram muito aumento de aposta pode indicar $ue muitos %ogadores esto com
&oas chances de vencer/
Depois de preenchida essa &ase de dados com milhares de decis7es, 'oi iniciado a segunda
etapa, $ue consiste em passar para todos os %ogadores in'orma7es de treinamento $ue so essas
in'orma7es do histrico de %ogos/ 5s %ogadores est6ticos ignoram essa in'ormao assim como os
humanos/ Um e>emplo de uma linha de in'ormao dessa &ase de dados9 primeira rodada, chance
de vencer de B!Z, 05T de <!, 5DDS de B, 4 necess6rio pagar ! para continuar no %ogo, 'oi
tomada a deciso de )#:SC 3!, recompensa de <!/
2020 *mplementa1$o dos #ogadores Arti;iciais
0ara tomar uma deciso, cada %ogador tem como entrada o estado do %ogo, $ue 4 multidimensional e
suas dimens7es so as mesmas in'orma7es guardadas na &ase de dados, $ue so9 05T, 5DDS,
)#:SC, C?#JCC, )5UJD, F5,,5LC)S, :JR#(C, J0,#VC)S, FTV)#:SC/
0ara simpli'icar a implementao e o treinamento dos %ogadores, 'oi esta&elecido $ue cada
%ogador tem como sa2da da ao @tomar uma deciso@ um valor discreto entre = e A, $ue 4 a deciso
discreti-ada9
Tabela 2. deciso discretizada
)3digo 'escri1$o
= Fugir
Continuar no %ogo
B #umentar pouco9 e$uivalente a a 3 small &lind
3 #umentar m4dio9 e$uivalente a A a =" small &lind
< #umentar muito9 e$uivalente a ! a 3! small &lind
A #umentar tudo9 all8in
2020/0 #ogadores Aleat3rios
Csses %ogadores tomam a deciso discreti-ada aleatria na seguinte proporo9 ==Z para cada
deciso sendo $ue a deciso de continuar o %ogo tem a proporo de 33Z/
202020 #ogadores )onstantes
Csses %ogadores tomam sempre a mesma deciso discreti-ada/
202050 #ogadores MFS O MatCematicallJ Fair StrategJ
Csses %ogadores KF:JD,C), =EDDN tomam a deciso discreti-ada de'inida por na 'rmula9
(e P = ! 8 =
@=
PP=
P
-=P@R
)=
,@=!!,-
=!!
(e P ! e ) T 8 ==
(e P ! e T ) T 8 =
(e P ! e T ) <T 8 =B
(e P ! e <T ) =!T 8 = 3
(e P ! e =!T ) =<T 8 =<
(e P ! e ) =<T 8 = A
5nde ) 4 a relao (FS e T 4 uma constante/ - 4 a $uantidade de dinheiro do advers6rio, P
4 o 05T, P 4 o 5DDS, R 4 o )#:SC, @ 4 a $uantidade de dinheiro apostado pelo %ogador e , 4 a
C?#JCC em porcentagem e 8 4 a deciso discreti-ada/ Caso o P, $ue 4 o 5DDS, se%a igual a -ero,
signi'ica comeo de %ogo onde o %ogador no apostou nada ainda/ Jesse caso, a deciso dele 4
sempre entrar no %ogo/
20207 #ogadores RD O #ean RacClin e &arJ Diggins
Csses %ogadores KF:JD,C), =EDDN tomam a deciso discreti-ada de'inida por 9
)=
P
,=F? R=
(e ) T 8 = =
(e T ) !T 8 =
(e !T ) <!T 8 = B
(e <!T ) =!!T 8 =3
(e =!!T ) =!!!T 8 = <
(e ) =!!!T 8 = A
5nde ) 4 a relao )?, P 4 o 05T, R 4 o nSmero de ve-es $ue algu4m decidiu )#:SC /
BCT, F 4 o nSmero de %ogadores $ue ainda vo %ogar nesta rodada, ? 4 o nSmero de %ogadores $ue
no 'ugiram, R 4 o )#:SC, T 4 uma constante e 8 4 a deciso discreti-ada/
20204 #ogadores com Aprendizado por Re;or1o
*ogadores com aprendi-ado por re'oro KSUTT5J; B#)T5, !!", L:M:0CD:#
)C:JF5)CC(CJT ,C#)J:JR, !!"N tem uma matri- com o nSmero de dimens7es iguais ao
nSmero de dimens7es do estado do %ogo/ Cada dimenso tem uma $uantidade de n2veis e um
intervalo correspondente a cada n2vel e o estado do %ogo se en$uadrar6 em um n2vel se o intervalo
do estado corresponder T$uele n2vel/ Por e6emploE (e a dimen(:o PPT da matri2 tem 7 nMei( e
cada nMel tem o interalo de 13E3E um e(tado do #ogo em ;ue o PPT e(te#a em 2! (e en;uadrar> no
3Y nMel de(ta dimen(:o da matri2 por;ue o 1Y nMel ai de 7 a 13E3 e o 2Y nMel ai de 13E3 a 2&E&.
Caso o valor da dimenso do estado do %ogo se%a maior $ue o limite da matri-, esse valor 4 colocado
no Sltimo n2vel/ #l4m destas dimens7es, a matri- tem mais duas dimens7es, uma para indicar a
deciso tomada e outra para indicar se o resultado 'oi pre%u2-o ou lucro/ 5 conteSdo de cada c4lula
da matri- 4 os resultados re'erentes T$uele estado do %ogo/
Jo treinamento, a deciso e a conse$uncia, $ue 4 o dinheiro ganho ou perdido, 4 salvo na
posio re'erente ao estado do %ogo/
Ja hora de tomar uma deciso, a matri- na posio re'erente ao estado do %ogo 4 consultada
e o&t4m uma lista de pares deci(:o di(creti2ada e recompen(a/ Com essa lista, toma8se uma deciso
$ue o&tiver a maior m4dia de recompensas por %ogo/
Figura 1. Exemplo de uma situao de jogo que o jogador por reforo consulta sua base de
conhecimento e decide 2, que significa continuar no jogo.
5 %ogador de aprendi-ado por re'oro contem v6rias constantes $ue precisam de a%ustes/ Clas
representam o intervalo $ue cada n2vel da matri- interna desse %ogador $ue contem as nove
dimens7es 8 C?#JCC, 05T, )#:SC, 5DD, FTV)#:SC, J0,#VC)S, F5,,5LC)S, )5UJD e
:JR#(C, com e>ceo da dimenso )5UJD, $ue %6 'oi pr48de'inida como tamanho , sendo o
primeiro re'erente a primeira rodada e o segundo re'erente as demais rodadas/ Cada dimenso
deveria ter duas constantes9 uma para o intervalo e outra para a $uantidade de n2veis mas, para
simpli'icar, e>iste apenas duas constantes O$uantidade de n2veisP, uma para 5DDS, 05T, )#:SC e
C?#JCC, chamado de OB:R FTVP e outra para FTV)#:SC, J0,#VC)S, F5,,5LC)S e
:JR#(C, chamada de O,:TT,C FTVP, $ue totali-a de- constantes/ Se cada vari6vel 'ossem
testados apenas < valores di'erentes, a $uantidade de testes seria <
=!
=E/DA</A< , o $ue
impossi&ilita testar todos os casos/ 0ara encontrar uma &oa con'igurao destas constantes 'oi
utili-ado #lgoritmo Ren4tico K?5,,#JD, =ED, )USSC,; J5)+:R, =EE<N//
# 'uno 'itness do algoritmo gen4tico 4 a soma da $uantidade vitrias diversas disputas,
cada disputa com de- mesas, com o *ogador por )e'oro usando =! milh7es de dados preenchidos
na sua matri- interna/ Foram usadas sete disputas, uma contra o %ogador (FS com constante T [ =,
uma contra o (FS com T[<, uma contra o *ogador #leatrio, uma contra o *ogador Constante $ue
decide OcontinuarP, uma contra o *ogador Constante $ue decide Oaumentar muitoP, uma contra o
*ogador )? com constante T[!,= e uma contra o *ogador )? com T[!,!!=/ 5 resultado da 'uno
'itness 4 a soma ponderada de vitrias das disputas com peso contra o *ogador (FS, peso = contra
o *ogador Constante, peso = contra o *ogador )? e peso 3 contra o *ogador #leatrio/ # populao
tem tamanho =! e a reproduo 4 'eita na seguinte proporo9 os melhores so&revivem para a
pr>ima gerao, = 4 mutao e D so produtos de crossover/ Cada gene 4 uma constante e a
populao inicial 4 aleatria/ # 'uno de seleo escolhida 'oi a stochastic uni'orm K(#T,#B,
!!"N/ Cssa 'uno gera uma linha onde cada indiv2duo tem um pedao da linha proporcional ao
'itness/ Um ponto aleatrio da linha 4 selecionado e o indiv2duo $ue estiver na$uela 'ai>a da linha 4
o primeiro pai escolhido/ 5s outros pais so selecionados pela distri&uio uni'orme de pontos pela
linha, igualmente espaados/
0ot Chance )aise 5dds FtG)aise FolloIers :ngame JplaGers ,F BF
0ai = =3 < D E = 3 B " B D
0ai D ! B 3 = B < =!
Filho D ! D E = = B B B D
Figura 2. Exemplo de uma situao de jogo que o jogador por reforo consulta sua base de
conhecimento e decide 2, que significa continuar no jogo.
de %ogadores $ue no 'ugiram, R 4 o )#:SC, T 4 uma constante e 8 4 a deciso discreti-ada/
50 Resultados
Jo houve um algoritmo predominantemente vencedor/ ?ouve apenas um $ue venceu, na m4dia,
mais $ue outro em uma disputa de todos contra todos/ (as em disputas individuais, $ue 4 um
m4todo contra outro, houve o caso do )e'oro vencer o (FS $ue venceu o )? $ue venceu o
)e'oro, o $ue no dei>ou de continuar sendo o re'oro o %ogador 'avorito por ter vencido a maioria
das disputas individuais/ 5 %ogador (FS o&teve resultados muito &ons em disputas individuais e os
outros %ogadores tiveram os piores resultados/ Durante os e>perimentos o %ogador (FS o&teve
resultados muito &ons e demorou at4 $ue um %ogador evolutivo conseguisse venc8lo/
Figura B/ )esultado da disputa entre todos os %ogadores
70 )onclus$o
5s resultados 'oram a&ai>o da e>pectativa, $ue era do %ogador por re'oro ganhar muito mais $ue
perder dos outros tipos de %ogadores, $ue so decis7es de 'rmulas simples/ Todos os resultados
'oram o&tidos de simula7es arti'iciais e uma &ase de dados com %ogadas humanas pode aumentar a
chance de vitria dos algoritmos evolutivos/ Um pro&lema em melhorar os algoritmos 4 o tempo de
processamento necess6rio pois milhares de %ogos precisam ser 'eitos para evoluir um %ogador e pode
demorar muito at4 veri'icar se um m4todo 4 melhor $ue outro/ 5utro pro&lema 4 $ue m4todos
arti'iciais $ue vencem m4todos arti'iciais no necessariamente %ogam &em contra %ogadores
humanos e uma &ateria de teste com %ogadores humanos 4 ainda mais demorado/ (esmo assim o
resultado 'inal 'oi um %ogador $ue %ogou ra-oavelmente &em/
Re;er<ncias
F:JD,C), Jicholas +// Studies in MacCine )ognition -sing tCe &ame o; Poker0 State
UniversitG 5' JeI Vor. #t Bu''alo9 )/ */ ?anson, =EDD/
?5,,#JD, *ohn ?// Renetic #lgorithms and the 5ptimal #llocation o' Trials/ Siam #ournal On
)omputing, 0hiladelphia, n/ , p/""8=!<, B ago/ =ED/
*5?#JS5J, (ichael BradleG/ Roust Strategies and )ounterBStrategies: Building a Champion
,evel Computer 0o.er 0laGer/ !!D/ ED '/ Tese K(estradoN 8 UniversitG 5' #l&erta, #l&erta,
!!D/
(#T,#B K5rg/N/ ,Ce MatCMorks: (#T,#B and Simulin. 'or Technical Computing/ Dispon2vel
em9 \http9//III/mathIor.s/com/]/ #cesso em = out/ !!"/
05MC),5C5 K5rg/N/ )omo #ogar Poker: )esumo/ Dispon2vel em9
\http9//III/po.erloco/com/pt/hoItoplaGpo.er/inde>/htm]/ #cesso em9 = out/ !!"/
)USSC,, Stuart */; J5)+:R, 0eter/ Arti;icial *ntelligence: # (odern #pproach/ JeI *erseG9
0rentice ?all, =EE</
SUTT5J, )ichard S/; B#)T5, #ndreI R// Rein;orcement "earning: #n :ntrodution/ C8Boo./
Dispon2vel em9 \http9//III/cs/ual&erta/ca/^sutton/&oo./e&oo./the8&oo./html]/ #cesso em9 =
out/ !!"/
L:M:0CD:# 05MC) K5rg/N/ Poker0 From Li.ipedia, the 'ree encGclopedia/ Dispon2vel em9
\http9//en/Ii.ipedia/org/Ii.i/0o.er]/ #cesso em9 = out/ !!"/
L:M:0CD:# )C:JF5)CC(CJT ,C#)J:JR K5rg/N/ Rein;orcement "earning0 From
Li.ipedia, the 'ree encGclopedia/ Dispon2vel em9
\http9//en/Ii.ipedia/org/Ii.i/)ein'orcementHlearning]/ #cesso em9 = out/ !!"/
6
e
f
o
r

o
M
,
'
A
l
e
a
t
o
r
i
o
.
o
n
"
t
a
n
t
e
6
7
0
5
10
15
20
25
30
35
/ipo !e 4oga!or
1
r
o
p
o
r

o

!
e

2
i
t
-
r
i
a
"

#
(
&