Prijava



Razdelitev kart na članskem taroku ...


nagy

nagy

Elitni član Št. sporočil: 27
Regija: Ljubljana z okolico
Datum objave: 04.01.2014 14:38:37 Citiraj objavo Pošlji ZS

Sicer se zavedam, da je tema z težavami že odprta, vendar sem se zaradi večje preglednosti (in v upanju na hitrejši odziv) odločil, da odprem posebno temo. Že vnaprej pa opozarjam, da je to zgolj moje opažanje in da nimam vpogleda v samo kodo, vendar pa imam dovolj izkušenj iz računalniških področij, da lahko izvedem eno tako ugibanje ("educated guess" smile ). Nisem pa pure-breed matematik, tako da lahko kdo z širšim znanjem statistike zagotovo potrdi ali ovrže moje domneve.

Za razliko od nečlanske verzije je talon v članski verziji zelo dobra varianta minolovca (z izjemo zastavic). Kralji se pojavljajo grobo v tretjini odigranih iger; zato sem se odločil, da v zadnjem času malce "raztegnem" igralne seanse v upanju, da dobim zunaji vpogled pri nizkem in visokem številu iger. Nekateri algoritmi namreč niso numerično stabilni, ampak imajo pri nizkih ali visokih iteracijah lahko odstopanja; konkretno, pričakoval sem, da bi kralji bili v talonu prisotni v prvih 20-ih igrah, nato pa bi se razdelitev kart uravnotežila in bi se pri npr. 100 igrah povprečje kraljev v talonih znižalo. Seveda pa to ni tako, kralji se pojavljajo pri nizkem in visokem številu odigranih iger v približno 1/3 iger. V to tretjino sem zaradi poenostavitve vštel tudi igre, ki so imeli več kot enega kralja v talonu.

Zavedam se, da se kritike v smislu "kralji so v talonu" malce težje rešijo. Zato grem malce bolj v detajle. Potrebno je matematično preveriti, ali se kralji dejansko pojavljajo pogosteje, kot ostale karte. Na ta način lahko tudi programer oz. avtor algoritma dobi točne podatke, kar je lahko dobra iztočnica za popravke a, saj lahko nato podatke pred in po popravkih primerjamo in vidimo, ali smo bili uspešni.

Analiza je narejena za igro s štirimi igralci, vendar je logika pri igri s tremi igralci identična (potrebno je samo določiti upper in lower indekse, ki določajo, kje se nahajajo karte ima igralca 1, 2 ali 3).

Sam bi se zadeve lotil tako, da bi vzel 1000 odigranih iger ter pridobil podatke o razdelitvi kart. Vsaka karta ima določeno ime - cifro. Torej imamo v vsaki iteraciji števila od 1-54;

  • taroke bi označil 1 - 22 (palica - škis)
  • srca 23 - 30 (platecl - kralj)
  • kara 31 - 38 (platelc - kralj)
  • pik 39 - 46 (platelc - kralj)
  • križ 47 - 54 (platelc - kralj)

Idealno bi se zaporednje števil (z delimitri) vpisalo v eno vrstico baze, tekstovne datoteke, excel vrstice ... odvisno od možnosti zajema in izvoza podatkov. Seveda morajo biti določeni indeksi, ki označujejo karte talona, 1., 2., 3. in 4. igralca (odvisno od algoritma oziroma implementacije statističnega algoritma so lahko določeni samo začetni indeks + število kart ali upper in lower indeksi za talon in 4 igralce).

Nato imamo več načinov, kako dejansko preveriti število kraljev v talonu; Začel bom z enostavnimi in napredoval k bolj natančni metodi.

  • Štetje pritožb na forumu (kralji se v talonu pojavljajo prepogosto)
  • Srednješolsko; vsaka karta ima 1:54 možnosti, da se pojavi kjerkoli. Nato preštejemo, kolikokrat se pojavi v 54-ih igrah v talonu (to je bolj ocena, saj ima talon 6 pozicij)
  • s Count funkcijo lahko štejemo pojavljanje števil 30, 38, 46 in 54 med lower in upper indeksom talona (tudi Excel bi lahko to prebavil)
  • Lahko uporabimo RegEx, s katerim analiziramo pojavljanje števil 30, 38, 46, 54 med upper in lower indeksom talona. To zahteva uporabo integriranega razvojnega okolja (IDE).
    • S RegEx (Regual Expressions) lahko preverjamo pojavljanje ostalih kart v talonu s kralji in različne kombinacije, ki bi lahko bile prepogosto na tapeti. Za samo analizo talona to ni pomembno, lahko pa bi analizirali pojavljanje tarokov pri igralcih (konkretno, igralci imajo daljša obdobja dobrih in slabih kart, pogosti klopi itd).
  • Preverjanje "Mean" in "Variance" z uporabo Welford-ovega algoritma, s katerim analiziramo pojavljanje vseh kart v celotnem (ali vnaprej določenem) preseku. S tem algoritmom lahko seveda preverimo, kakšne so možnosti pojavljanja vsake izmed kart v talonu ali pri igralcih in sicer (tudi) skozi oceno distribucije kart
    • Algoritem je numerično stabilen, kar zagotavlja točen rezultat pri nizkih ali visokih številih
    • tu bi se jasno videlo, ali obstajajo zaporedja iteracij slabih kart pri določenih indeksih
      • lahko bi prešteli vrednost kart vsakega igralca in ta številka bi morala biti relativno podobna skozi vse iteracije - to bi šlo tudi z RegEx
    • Implementacija v IDE + baza ali izvorna datoteka s numeričnimi podatki razdelitve kart
    • To so pravi podatki za programerja, ki bi nato lahko naredil popravek v algoritmu razdeljevanja kart, čemur sledi 1000 iteracij in ponovno preverjanje "Variance" preko Welford-ovega algoritma.

Seveda je to zgolj osnova - osebno bi se zadeve lotil po zadnji metodi, ki seveda zahteva relativno zahtevno implementacijo. Vprašanje je, ali je sploh možno dobiti podatke o razdeljenih kartah iz baze. Ali baza sploh obstaja? Kakšen algoritem v ozadju razdeljuje karte? Je algoritem možno popraviti, ne da "polomimo" kaj drugega?

Morda en predlog. Zakaj enostavno ne uporabite Math.Random funkcije in ji določite vrednosti razpon izhodnih spremenljivk 1-54, nato pa seveda preverite, ali se je vrednost že pojavila in če se je, se funkcija kliče ponovno. Seveda se lahko motim, ker obstaja možnost, da ste točno tako implemetirali algoritem za randomiziranje kart. Če se mi bo dalo, bom to stvar preveril v c# in preko Welford-a videl, kako deluje. Seveda implementacija v c# verjetno ne pomaga kaj dosti, ker nevem v katerem jeziku je zadeva sprogramirana.

Razlog mojega pisanja ni teženje, ampak upanje, da bo malce bolj argumentiran tekst zmigal potrebne ljudi, ki imajo dostop do kode. Kar pomeni, da držijo ključe reševanja tega problema.

Še enkrat - nisem matematik. Če ima kdo kakšno boljšo idejo, na plan z njo. Vsekakor bom se posvetoval še s svojim kolegom, ki dela doktorat iz statistike.

A se vidi, da imam preveč časa v službi, da se ukvarjam s temi zadevami? smile




Mladen

Mladen

Admin Št. sporočil: 860
Regija: Ljubljana z okolico
Datum objave: 04.01.2014 15:33:59 Citiraj objavo Pošlji ZS

Nagy svaka čast za tole, pošljem našemu programerju in sporočim odziv.

mi je pa zanimiva ena zadeva - mi algoritma nismo niti najmanj spreminjali, ampak je popolnoma enak kot na beti. Zato je čudno, da je zdaj nekaj več pritožb kot prej.




snejbi

snejbi

Admin Št. sporočil: 7109
Regija: Ljubljana z okolico
Datum objave: 04.01.2014 16:04:53 Citiraj objavo Pošlji ZS

Mladen, se mi zdi da zato, ker je na novem to še bolj opazno. res je, da je tudi na beti to pogosto.

Ampak na novem boste pa delali dopolnitve in spremembe, kajne?




nagy

nagy

Elitni član Št. sporočil: 27
Regija: Ljubljana z okolico
Datum objave: 04.01.2014 16:08:41 Citiraj objavo Pošlji ZS

Sem še malce gruntal in gledal in bral in brskal in morda je problem drugje; v C# random funkcija po defaultu kot "seed" uporabi sistemski čas. Kar pomeni, da pri generiranju velikega števila naključnih števil lahko pride do ponavljanja.

Seveda to poraja dve vprašanji; ali je implementacija v vašem (=tistem, v katerem je napisan algoritem) prav tako osnovana na sistemskem času, ali uporablja kaj drugega (GUID?).

in drugo, bolj zanimivo vprašanje - ali metodo, ki vsebuje algoritem, instanciirate enkrat in zadeva ven bljuva števila, ali vsakič posebej - če je metoda statična in jo kličete enkrat za vse mize, bi morda lahko prišlo to zgoraj opisanega problema.

Če je sam klic metode drugačen v beti, kot na članskem, je to lahko razlog ponavljanja, neglede na to, da je algoritem identičen.

Ampak, spet, to je zgolj moje ugibanje, ker specifičnih informacij nimam.

lp, Mitja




1tan

1tan
Št. sporočil: 17172
Regija: Ljubljana z okolico
Datum objave: 04.01.2014 17:19:09 Citiraj objavo Pošlji ZS

vesela sem, da se je problem "zarufa" omenil na ta način....že od samega začetka iz novembra smo točno o tem v poplavi novic opozarjali in se je tam tudi porazgubilo in res je da smo pred časom "četverica znanih" tudi vlekli statistiko zaruf kralj in prišli večkrat do formule - 25 iger : 9-11 zaruf kraljev...tole sem že pred urami na ZS izpisala nagy-u pa bom tudi tule:

čudovit članek in prispevek, predvsem v razmišljanju in niansah ki si jih predočil....še jaz, ki sem popolnoma netehnični tip doumem zdaj čar vseh navedb, predlogov in programskih kod. Samo upam, da jim bo v pomoč, razmislek in rešitev.

Bravo, odlično spisano

 




nagy

nagy

Elitni član Št. sporočil: 27
Regija: Ljubljana z okolico
Datum objave: 04.01.2014 22:17:02 Citiraj objavo Pošlji ZS

Tan, hwala za prijazne besede. Včasih je problem lažje rešiti, ko se le-ta izpostavi empirično. Upam, da bo še kdo napisal svoje opažanje, ker bi iz tega lažje videli vzorec (ali pomanjkanje slednjega).

Mimogrede, kake pa so tvoje izkušnje pri nečlanski verziji taroka?

Zanimivo se mi zdi:

  • članov je cca 200
  • navadnih uporabnikov cca 4700

Problem zarufanja izpostavljamo tisti, ki igramo na članskem taroku, na katerem je težko najti mizo v primerjavi s brezplačno verzijo taroka ... nekje torej mora biti razlika.

Pri 20x manjši skupini uporabnikov je težava očitna - ima kdo morda podatek, koliko uporabnikov je igralo ter koliko iger so odigrali na članskem in koliko na nečlanskem taroku v zadnjem mesecu?

Everyone loves a good nut cracker ... right? enlightened




Razdelitev kart na članskem taroku ...