Sivu 1/1

Todennäköisyyksien laskeminen?

Lähetetty: La 01.08.2009 14:40
Kirjoittaja Runt
Olisiko jollain laittaa kaava jolla lasketaan taistelutuloksien todennäköisyyksiä? Tai vaihtoehtoisesti selostaa miten tuo todennäköisyys taistelussa lasketaan, niin että mukana on myös save heitot.

Re: Todennäköisyyksien laskeminen?

Lähetetty: La 01.08.2009 15:09
Kirjoittaja Samsson
Koska Warhammerit perustuu kuusisivuisten noppien heittelyyn, melkein aina lasketaan todennaköisyydet 1/6 kertaa jotain.
Eli jos osut 4+, todennäköisyys osua on 3/6 (kolme kertaa kuudesta se osuu siis).
Tätä tapaa jos seuraat, saat kolme "tulosta" mitä sitten kerrataan yhteen, eli osumat, haavoittaminen sekä savet.

Esimerkki tapaus:
4+ osuu, joten 3/6 osuu.
4+ haavoittaa, joten 3/6 tekee tuloksia.
5+ panssari, joten 4/6 menee läpi.

3/6 kertaa 3/6 kertaa 4/6 = 36/216 = ~16,7% todennäköisyys haavoittaa joka lyönnillä. Tarkoittaa myös että joka kuudes lyönti tekee haavan.

Re: Todennäköisyyksien laskeminen?

Lähetetty: La 01.08.2009 16:26
Kirjoittaja jullevi
Samssonin esittelemä menetelmä toimii tiettyyn pisteeseen asti. Sillä on matemaattisesti oikea ja vieläpä kohtuu yksinkertainen tapa laskea yksittäisen nopanheiton tai tapahtumasarjan todennäköisyys. Sillä voi myös "ennustaa" montako woundia isommasta läjästä hyökkäyksiä keskimäärin tulee, mutta se ei ilmoita miten todennäköisiä eri woundimäärät ovat.
Tarkoittaa myös että joka kuudes lyönti tekee haavan.
Tässä tuleekin esille odotusarvon harhaanjohtavuus. On kyllä totta, että kuuden heiton odotusarvo 1/6 haavoittamistodennäköisyydellä on 1. Odotusarvo ei kuitenkaan kerro, että on n. 33% todennäkoisyys olla tekemättä yhtään woundia ja toisaalta n. 27% todennäköisyys tehdä enemmän kuin yksi woundi.

Taistelutulosten todennäköisyyttä yllä esitetyllä menetelmällä ei voi laskea. Jos näin halutaan kuitenkin tehdä, niin silloin pitää ottaa huomioon kaikki mahdolliset lopputulokset ja niiden todennäköisyydet.

Re: Todennäköisyyksien laskeminen?

Lähetetty: La 01.08.2009 17:07
Kirjoittaja Samsson
jullevi kirjoitti:Taistelutulosten todennäköisyyttä yllä esitetyllä menetelmällä ei voi laskea. Jos näin halutaan kuitenkin tehdä, niin silloin pitää ottaa huomioon kaikki mahdolliset lopputulokset ja niiden todennäköisyydet.
Totta.
Silloin pitää ottaa huomioon attackien määrä, todennäköisyydet että menetät osa näistä hyökkäyksistä ennen kuin pääset lyömään, todennäköiset läpi menneet wuondit, boonuksia rankeistä, flankeistä, rearistä, lipuista, jne. Sotkuinen homma, mutta mahdollista tehdä kyllä.

Re: Todennäköisyyksien laskeminen?

Lähetetty: La 01.08.2009 17:26
Kirjoittaja Runt
Tuolla kaavalla päästään alkuun ainakin, saadaan siis tieto onko yksikkö A vai yksikkö B vahvempi keskenäisessä taistelussa. Tällöin pystytään jo laskemaan millä yksiköllä kannattaa mitäkin yksikköä lähteä metsästämään.
Toki muuttuvia tekijöitä pitää tätä laskiessa ottaa huomioon mutta ainakin apua tästä on alkuun. Eli pahasti ei ainakaan mennä pieleen.

Kiitoksia vastauksissa, toki keskustelua saa jalostaa pidemmälle sillä en usko että olen ainoa jota todennäköisyydet kiinnostavat. Peli itsestään perustuu kuitenkin todennäköisyyksiin ja pieneltä osalta tuuriin.

Re: Todennäköisyyksien laskeminen?

Lähetetty: Ke 05.08.2009 22:43
Kirjoittaja Hakkapeto
Pistetään nyt tähän samaan aikoinaan itseäni mietityttänyt lasku. Luvut olen kyllä jo netistä löytänyt, joten tämä nyt kiinnostaa lähinnä matemaattisesti.
Miten siis lasketaan Cold Blooded Ld testin onnistumis todennäköisyys. Eli heitetään kolme noppaa, joista huomioidaan kaksi pienintä tulosta.
Tän vois tietysti laskea klassisesti jakamalla suotuisten alkeistapausten määrä kaikkien alkeistapausten määrällä, mutta menee kovin työlääksi.

Re: Todennäköisyyksien laskeminen?

Lähetetty: Ke 05.08.2009 23:21
Kirjoittaja jullevi
Hakkapeto kirjoitti:Pistetään nyt tähän samaan aikoinaan itseäni mietityttänyt lasku. Luvut olen kyllä jo netistä löytänyt, joten tämä nyt kiinnostaa lähinnä matemaattisesti.
Miten siis lasketaan Cold Blooded Ld testin onnistumis todennäköisyys. Eli heitetään kolme noppaa, joista huomioidaan kaksi pienintä tulosta.
Tän vois tietysti laskea klassisesti jakamalla suotuisten alkeistapausten määrä kaikkien alkeistapausten määrällä, mutta menee kovin työlääksi.
En nyt muista mitään kikkaa tähän, mutta jos käsipelillä joutuisin laskemaan niin ottaisin lähtökohdaksi että ne kaksi ensimmäistä noppaa on jo heitetty ja katsoisin miten kolmas noppa vaikuttaa. Käytännössä menisi siis alkeistapausten laskemiseksi.

Esim. Ld6 cold-blooded onnistuu ensinnäkin kaikilla tuloksilla, joilla kaksi ensimmäistä noppaa on yhteensä korkeintaan 6. Tällaisia tuloksia on kahdella nopalla 15 erilaista. Jokaista näitä kohden on 6 eri kolmannen nopan tulosta, joilla testi onnistuu. Nyt on saatu ne helpoimmat 15x6=90 suotuisaa alkeistapausta.

Seiskan heitoista (1,6) antaa vielä 5 mahdollisuutta selvitä, (2,5) antaa 4 ja (3,4) 3 mahdollisuutta. Kun ottaa peilikuvaheitot huomioon, saadaan 24 uutta suotuisaa alkeistapausta.

Kasin heitoista (2,6) ja (6,2) antaa 4, (3,5) ja (5,3) antaa 3 ja (4,4) 2 tapausta selvitä. Yhteensä 16.

Ysin heitoista (3,6) ja (6,3) antaa 3, (4,5) ja (5,4) antaa 2 suotuisaa. Yhteensä 10.

Kympin heitoista (4,6) ja (6,4) antaa 2 ja (5,5) yhden suotuisan lisää eli 5.

Yhdentoista heitoista molemmista löytyy yksi pelastus (6,5,1) ja (5,6,1) eli yhteensä 2.

Jos kahdella ekalla on heitetty tuplakutoset, olet lirissä.

Suotuisia alkeistapauksia käsipelillä laskettuna yhteensä 90+24+16+10+5+2=147. Kaikkia mahdollisia 6x6x6=216. Todennäköisyys onnistua testissä 147/216 = 0,68.

Kun tämän on yhdelle luvulle laskenut, loput on paljon nopeampi laskea. Kaikista helpoin tapa on tietysti luetella kaikki alkeistapaukset vaikka exceliin ja poimia sieltä suotuisat. EDIT: Tajusin vasta nyt, että esimerkiksi olisi voinut ottaa jonkun helpomman, vaikka Ld9:n.

Re: Todennäköisyyksien laskeminen?

Lähetetty: Pe 07.08.2009 15:10
Kirjoittaja Arkku
"Vaikeissa" (ts. monimutkaisissa) todennäköisyyslaskuissa helppo tapa arvioida todennäköisyyden suuruusluokkaa tietokoneen avulla on ns. Monte Carlo -menetelmä. Menetelmässä tehdään ohjelma joka suorittaa haluttua testiä satunnaisesti (eli tässä tapauksessa simuloi nopanheittoja arpomalla lukuja). Testiä toistetaan useita kertoja ja lasketaan kuinka monta näistä toistoista johti suotuisaan tulokseen (ts. siihen tulokseen jonka todennäköisyyttä halutaan laskea).

Esimerkiksi yllä mainittu Cold Onen Ld6-testi (heitetään kolme noppaa, huomioidaan kaksi pienintä, testi onnistuu jos summa on <= 6):

Koodi: Valitse kaikki

# Määritellään avuksi "nopanheitto":
def nopanheitto
  1 + rand(6)
end

LD = 6                       # Testin vaikeus (tässä Ld = 6)
onnistumisia, kokeita = 0, 0 # Alustetaan laskurit nollaan
while kokeita < 10000        # Toistetaan testi 10,000 kertaa
  kokeita += 1

  # Järjestetään kolmen nopanheiton tulokset:
  heitot = [ nopanheitto, nopanheitto, nopanheitto ].sort

  # Kunkin kokeen tuloksissa huomioidaan kaksi pienintä heittoa:
  summa = heitot[0] + heitot[1]

  # Lasketaan onnistumiset:
  onnistumisia += 1 if summa <= LD
end

# Lopuksi tulostetaan arvioitu todennäköisyys:
puts "Onnistumisia: #{onnistumisia}/#{kokeita}"
puts "Todennäköisyys noin: #{onnistumisia / kokeita.to_f}"
Tämä yksinkertainen Ruby-ohjelma suorittaa em. Ld6-testin 10,000 kertaa (kestää nykykoneilla luokkaa millisekunteja) ja tulostaa arvion todennäköisyydestä, esim.:

Koodi: Valitse kaikki

Onnistumisia: 6812/10000
Todennäköisyys noin: 0.6812
Koska tulos perustuu satunnaiseen testaukseen, jokainen ajo tuottaa hieman eri tuloksen, mutta näinkin pienellä määrällä toistoja (10,000) tulos pyöristyy käytännössä aina prosentin tarkkuudella tuohon 68%, joka aiemmin tässä ketjussa esitetyn eksaktin laskun perusteella onkin oikea vastaus. Tarkkuuden puolesta tämä menetelmä ei siis ole yhtä hyvä, sillä tulos on aina arvio ja teoriassa on mahdollista (joskin äärimmäisen epätodennäköistä) saada vastaukseksi vaikkapa 0% tai 100%. (Mitä enemmän testejä ajetaan, sitä todennäköisempää on päästä lähelle oikeaa vastausta.) Menetelmän merkittävä etu on kuitenkin siinä, että esimerkiksi Ld7- tai Ld9-testin todennäköisyyden arvioiminen vaatii ohjelmasta vain yhden numeron muuttamisen, mutta tarkan vastauksen saaminen alkeistapauksia laskemalla vaatisi vaihtoehtojen käymisen uudelleen läpi.

Tämä on siis eräänlainen laiskan miehen (tai naisen) ratkaisu, jonka toteuttamiseksi vaaditaan vain taito ohjelmoida yhden kokeen ajaminen, mikä nopanheittojen tapauksessa on erittäin suoraviivaista (eikä ohjelmointitehtävän monimutkaisuus olennaisesti muutu nopanheittojen määrän kasvaessa, toisin kuin alkeistapauksia laskettaessa). Peruskaava on siis:

Koodi: Valitse kaikki

muuttuja o saa arvon 0
muuttuja k saa arvon 0
niin kauan kuin k < haluttu määrä testejä, toistetaan:
    muuttuja k saa arvon (k + 1)
    suoritetaan yksi satunnainen testitapaus
    jos testitapaus "onnistui" (ts. saatiin suotuisa tulos), muuttuja o saa arvon (o + 1)

Arvioitu todennäköisyys on lopuksi: o / k

Re: Todennäköisyyksien laskeminen?

Lähetetty: La 15.08.2009 08:33
Kirjoittaja TomiTo
Jos itselleni tulee joskus tarve tarkistaa miten omat yksiköt pärjää taistelussa käytän ihan suosiolla tämän kaverin laskureita.

http://folk.ntnu.no/tarjeia/avian/subpa ... lculations

Näillä pitäisi jo päästä aika pitkälle.