Nekromanti Sannolikheter? Hjälp!

krank

Lättkränkt cancelkultur-kommunist
Joined
28 Dec 2002
Messages
36,268
Location
Rissne
Jag har för mig att någon redan skrivit till mig hur man skulle göra det här, men min sök-fu är kass idag.

Nå; jag har ett stridssystem. I det, är det generellt fråga om en-mot-flera. Spelarna, som oftast är de som är flera, slår xt6, där x är antal rundor striden är, och får lyckade utfall på 4-6. De har möjligheten att genom att nyttja diverse förmågor få upp till +5 extra automatiskt lyckade utfall. På en 3 rundor lång strid slår de alltså tre tärningar, och kan få upp till 8 "lyckade utfall".

Motståndaren rullar xt6 och har möjligheten att lägga till y extra lyckade utfall, där y är en variabel svårighetsgrad.

Om det blir oavgjort mellan två eller flera som får högst antal lyckade utfall, så slår dessa en till tärning - högst värde på den tärningen vinner.


Nu till grejen: Jag vill kunna räkna ut hur svåra jag ska göra fienderna (alltså, hur jag ska sätta y) beroende på hur många spelarna är och hur stor risk jag vill att det ska finnas att man förlorar.

Dvs, om det ska vara 3 spelare och jag vill att det ska vara 50% chans att vinna, hur hög ska y vara då?

Tanken är att jag ska kunna skapa en tabell över olika svårighetsgrader, där jag typ sätter 1-5 spelare på ena axeln och procenten att lyckas på den andra, och sedan svårighetsgraden i cellerna - så att man som SL lite snabbt kan se ungefär vad man kan höfta till vad gäller svårighetsgrader.
 

krank

Lättkränkt cancelkultur-kommunist
Joined
28 Dec 2002
Messages
36,268
Location
Rissne
Herr Nils said:
Vad brukar genomsnitts karaktären ha?
Alla har exakt fem, det är en fast bonus alla kan få tillgång till om man tänker till lite.
Förklaring: Man har fem "egenskaper", sammanlagt värda fem poäng, som man kan aktivera under striden helt gratis och då få bonus av. Det är grejer som "prickskytt", "kampsportstränad" etc. Så, räkna på +5 för alla, alltid.

Herr Nils said:
Hur lång är en genomsnitts strid. Många spelare vinner ju på om de kan förlänga striden.
Man bestämmer innan striden hur lång den ska vara, oftast hamnar den kring 2-3.

Såhär: Varje runda i striden lägger man fram en tärning, och beskriver en handling. När alla har beskrivit, slår man tärningarna, och adderar sin bonus till antalet lyckade resultat (typ). Den som får högst slutresultat får beskriva hur striden avslutas.
 

Logros

Veteran
Joined
28 May 2008
Messages
77
Låt
s = antal spelare
f = antal fiender
p = chans att lyckas
x = antal rundor
y = svårighetsgraden

Förväntat värde för spelarna är
s*((p*x)+5)

Förväntat värde för fienden är
f*((p*x)+y)

Det är en jämn fight om dessa två värden är samma, dvs

s*((p*x)+5)=f*((p*x)+y)

Målet är att få y ensamt på ena sidan.

Multiplicera in s och f

s*(p*x)+s*5=f*(p*x)+f*y

Subtrahera f*(p*x) från båda leden

s*(p*x)+s*5-f*(p*x)=f*y

För att förenkla skriver vi ihop alla termer som innehåller (p*x)

(s-f)*(p*x)+s*5=f*y

Dividera med f och vi får
<div class="ubbcode-block"><div class="ubbcode-header">Code:</div><div class="ubbcode-body ubbcode-pre" style="height: 64px;"><pre>
(s-f)*(p*x)+s*5
y = ---------------
f</pre></div></div>

För tre spelare som slåss mot en ensam fiende i tre rundor får vi alltså (om chansen att lyckas är 4-6 på T6 dvs 0,5):

<div class="ubbcode-block"><div class="ubbcode-header">Code:</div><div class="ubbcode-body ubbcode-pre" style="height: 64px;"><pre>
(3-1)*(0,5*3)+3*5
y = ----------------- = 21
1</pre></div></div>

Vill du ha sannolikheten att spelarna vinner för en viss stridslängd, fiendeantal och svårighetsgrad så blir det lite knepigare.

Låt nT6 vara antalet framgångar på n sexsidiga tärningar

Sannolikheten att spelarna vinner är då P[S>F]
S = s*(xT6+5)
F = f*(xT6+y)
dvs
P[s*(xT6+5)>f*(xT6+y)]

Samma svarta magi som tidigare..

<div class="ubbcode-block"><div class="ubbcode-header">Code:</div><div class="ubbcode-body ubbcode-pre" style="height: 48px;"><pre> (s-f)*(xT6)+s*5
P[--------------->y]
f</pre></div></div>

Stoppar vi in tre spelare som slåss i tre rundor mot en ensam fiende så får vi

<div class="ubbcode-block"><div class="ubbcode-header">Code:</div><div class="ubbcode-body ubbcode-pre" style="height: 48px;"><pre> (3-1)*(3T6)+3*5
P[--------------->y]
1</pre></div></div>

Dvs

P[6T6+15>y]

Som är

P[6T6>y-15]

Kom ihåg att vi definerade nT6 till antalet framgångar på n T6.

Här ser vi genast att alla svårighetsgrader mindre än eller lika med 14 ger spelarna 100% chans att lyckas i denna strid.

För y>14 måste vi räkna.

Vi tar ett exempel med svårighetsgrad 17, dvs

P[6T6>17-15] = P[6T6>2]

Dvs spelarna vinner om de slår minst 3 framgångar.

"Minst" gör att sannolikheten att spelarna vinner är summan av sannolikheterna att slå 3, 4, 5 och 6 framgångar.

Dessa fås med hjälp av binominalfördelningen (http://sv.wikipedia.org/wiki/Binomialfördelning).

P = (6 över 3)0,5^6 + (6 över 4)*0,5^6 + (6 över 5)*0,5^6 + (6 över 6)*0,5^6 = 0.65625 = ca 66%

...med reservationer för att det var några år sen man satt i föreläsningssalen :gremlaugh:
 

krank

Lättkränkt cancelkultur-kommunist
Joined
28 Dec 2002
Messages
36,268
Location
Rissne
Alltså... Svårighetsgraden adderas på samma sätt som spelarnas femma, fast för motståndet. Det är jättesmarta formler, men om jag ska ge ett exempel:

Spelarna Albert, Herbert och Maria möter en ond cyborg i en strid som är 4 "rundor". Albert, Herbert och Maria slår, separat, fyra t6:or. 4-6 räknas som lyckat, de kunde alltså lika gärna ha singlat slant. var och en räknar samman sina lyckade resultat - Albert får 3, Herbert får 2 och Maria får 4 lyckade resultat. Var och en adderar 5 till sina lyckade resultat, så att Alberts värde blir 8, Herberts 7 och Marias 9.

Fienden har svårighetsgrad 6. Den slår också fyra t6:or. Den får två lyckade resultat och får alltså 2+6=8.

8 är högre än Alberts och lika med Herberts resultat, men Marias nia räcker för att spöa fienden.

Maria vinner striden.

Med andra ord: Man räknar inte samman spelarnas resultat, och det räcker om en av dem kommer högre än fienden.


Har jag feltolkat dina formler? Svårighetsgrad 17 låter väldigt högt, hur slår man över det med 5+[1-3] (alltså 5 plus 1-3 lyckade slag från antalet rundor)? Är jag för dålig för att få hålla på med det här?
 

Grog

Swordsman
Joined
7 Dec 2003
Messages
505
Location
Munchen
OK, jag ska försöka vara pedagogisk men utan formler blir det toksvårt.

Först och främst, vad du har är ett system som kallas dragning utan återläggning. Ett sådant har en sannolikhetsfördelning som följer en binomialfördelning. Egentligen har du en multinomialfördelning eftersom du också har med oavgjort, men det struntar jag i för tillfället. För att få en snabb uppskattning av vilket resultat som är rimligt gäller att väntevärdet av en binomialfördelning är lika med antal tärningar gånger chansen att lyckas. I ditt fall gäller att alltså att väntevärdet för en spelare är 6.5 om det är tre ronder och spelaren lägger till fem till resultatet.

Vad gäller spridningen på resultatet ges givetvis min och max av hur många ronder, dvs tärningar, som används. Variansen för en binomial är antal ronder gånger sannolikheten att lyckas gånger sannolikheten att misslyckas. Du har gjort det lätt för dig eftersom båda dessa sannolikheter är 0.5, vilket förenklar variansen till x/4, där x är antal ronder. Om du hellre vill använda standardavvikelsen är den kvadratroten av x, delat med 2. Dvs, ju fler tärningar du använder desto större spridning på resultatet. Om du använder x=2 är väntevärdet 1+bonusar, med en varians av 0.5. Chansen att få exakt väntevärdet i resultat är 50%, vilket bara är 37.5% om x=4 (väntevärde = 2+bonusar).

Vad är sannolikheten att få exakt k lyckade utfall (dvs tärningen visar 4-6)? Den sannolikheten är
P(k)=(x choose k)(1-p)^(n-k)p^k
där (n choose k) är

. Eftersom du har p=0.5 kan det förenklas till
P(k) = 1/2^x (x choose k) .
Vi går vidare; chansen att en spelare slår minst a gynnsamma utfall är
P(k>=a) = 1/2^x sum_{k=a}^{x}(x choose k)
dvs summan av alla sannolikheter för resultat lika med a eller högre.

Låt oss anta att du har N spelare. Sannolikheten att någon slår a eller bättre är då lika med 1-sannolikheten att ingen slår k>=a, dvs
1-(1-P(k>=a))^N = 1-(1-1/2^x sum_{k=a}^{x}(x choose k) )^N

Vi översätter till praktiken; Låt oss anta att det är två spelare (N=2) som slåss mot en motståndare med svårighetsgrad 6. Motståndaren har ett väntevärde på 7.5, dvs det är fifty-fifty att han får 8+, eller 7-. Det lägsta spelarna kan få är 5, dvs de har 100% chans att få 5 eller bättre, men 5 innebär garanterad förlust. De har 63/64 chans att få åtminstone 6, men det räcker som bäst till ett oavgjort resultat (om motståndaren inte rullar en enda success, 1/8=12.5% chans) Sannolikheten att det blir ett oavgjort med värdet 6 är 63/64*1/8=12.3%. Spelarna har 75% chans att få in minst två framgångar vilket ger ett resultat av 7 eller 8. Sannolikheten att en av spelarna får tre tärningar över 4 är 15/64=23.4%, vilket ger ett resultat av 8. Med tanke på att motståndaren har 50% chans att få 8 eller 9 ser det ganska mörkt ut för spelarna. Med andra ord det är bara 15/64*0.5=11.7% chans att spelarna vinner med resultatet 8 utan att först gå till sudden death. Det är 1/8=12.5% chans att motståndaren får ett resultat av 9, i vilket fall spelarna är chanslösa.

Äh nu orkar jag inte mer. Jag skulle gjort en tabell som listar chansen att spelarna får högre värde än motståndarens väntevärde om jag vore du, men du vet nog bäst själv vad du vill ha.

Jag hoppas det ger dig någonting iaf :gremsmile:
/Grog
 

Björn den gode

Swashbuckler
Joined
5 Jun 2001
Messages
3,437
Location
Göteborg
Det verkar jobbigt att skriva flera inlägg så jag ger hela mitt svar här även om det kanske egentligen är lite svar på deltrådar.

Logros svarade som du misstänkte på en helt annan fråga då han trodde att spelarna kunde lägga ihop sina succéer.

Det Grog försöker säga (vilket väl går sådär för honom, notera i exemplet att det gäller just det specifika exemplet med fyra rundor) är att ja, det här går att beräkna men det är inte elementärt och inte vackert. Du kommer inte hitta en formel som du bara kan köra dragndrop med i excel utan det blir till att i princip pilla med varje enskilt fall.

Det som gör att det blir så "fult" är just det här att vi inte är intresserad av summor utan vilket av ett antal olika resultat som är högst, sånt blir i princip alltid kombinatoriskt krångligt.

Men nu är det ju inga rymdfarkoster vi ska bygga, och i resultatet är vi antagligen inte ens intresserade av decimaler utan bara hela procenttal, så jag rekommenderar att du helt enkelt simulerar det hela istället. De värden du får av säg 1 miljon försök kommer när vi har så här liten slump (krona/klave) komma extremt nära det korrekta värdet, upp mot 10 miljoner försök så skulle jag nog kunna satsa pengar på att inget av värdena kommer avvika med en hel procent ifall bara slumptalsgeneratorn är ok.

Nu torde du vara mycket bättre på att skriva program än mig, och det smärtar mig lite som matematiker att rekommendera den här metoden men för att inte bara komma med ett gör det själv inlägg så får du lite pseudokod också, kan säkert finnas nån mer som tycker det är intressant.

(Hm, ok, forumet tar ju inte emot tabulatortecken, för att det inte ska bli helt oläsligt bifogar jag en textfil istället)
 

Attachments

Grog

Swordsman
Joined
7 Dec 2003
Messages
505
Location
Munchen
yikes! vad skriver jag egentligen? det är givetvis dragning MED aterläggning...
 

Grog

Swordsman
Joined
7 Dec 2003
Messages
505
Location
Munchen
Björn den gode said:
Det Grog försöker säga (vilket väl går sådär för honom, notera i exemplet att det gäller just det specifika exemplet med fyra rundor) är att ja, det här går att beräkna men det är inte elementärt och inte vackert. Du kommer inte hitta en formel som du bara kan köra dragndrop med i excel utan det blir till att i princip pilla med varje enskilt fall.
Det gar alldeles utmärkt att klura ut en formel och stoppa in den i Excel, men jag är bara för lat för att göra hela jobbet själv. Däremot är det overkill. Allt krank behöver är egentligen väntevärdena samt veta att ju fler ronder, dvs tärningar, som används desto mindre spelar svarighetsgraden in till förman för slump.

Det specifika exemplet jag gav är för tre ronder, varför tror du att det skulle vara för fyra?

Att det gar sadar för mig var snällt sagt, själv tycker jag att jag är obegriplig när jag läser mitt inlägg...
 

krank

Lättkränkt cancelkultur-kommunist
Joined
28 Dec 2002
Messages
36,268
Location
Rissne
Grog said:
Att det gar sadar för mig var snällt sagt, själv tycker jag att jag är obegriplig när jag läser mitt inlägg...
Själv kände jag bara att jag var korkad och har läst för lite matte... Jag kände att jag nästan förstod hur det funkade, men jag är trots allt bara en stackars estetjävel som läst matte A och B - och då ska vi komma ihåg att det är estetmatte, inte riktig matte (det ska inte vara skillnad egentligen men det var det). Just nu håller jag på och bankar in det jag missat av MaB och sedan ska jag få in MaC...

Nå; jag tackar jättemycket för din hjälp och jag kommer säkert att begripa mer när jag läst mer matte. Tills vidare ska jag försöka använda mig av Björns pseudokod för att skriva ett Pythonprogram...




Det finns just nu två vägar för det här systemet att gå: En där systemet ser ut som i den här tråden, och en där den bonus rollpersonerna får (5) och den svårighetsgrad fienderna har istället adderar tärningar, så att om man har en fyra rundor lång strid och ska slåss mot en fiende med svårighetsgrad sju, så rullar varje spelare nio tärningar och spelledaren rullar elva... Fördelen med det som presenterats här är ju att det blir färre tärningar att rulla, men jag får känslan av att det finns andra, betydande, problem. Att man till exempel måste ha ganska långa strider för att det ska vara meningsfullt att ha skillnad mellan spelarnas bonus och motståndets svårighetsgrad (till exempel lär man ju i 2 rundor långa strider kunna ha en skillnad på max 1 om inte striden ska vara avgjord på förhand)...

//Krank, funderar
 

Grog

Swordsman
Joined
7 Dec 2003
Messages
505
Location
Munchen
krank said:
Själv kände jag bara att jag var korkad och har läst för lite matte... Jag kände att jag nästan förstod hur det funkade, men jag är trots allt bara en stackars estetjävel som läst matte A och B - och då ska vi komma ihåg att det är estetmatte, inte riktig matte (det ska inte vara skillnad egentligen men det var det). Just nu håller jag på och bankar in det jag missat av MaB och sedan ska jag få in MaC...

Nå; jag tackar jättemycket för din hjälp och jag kommer säkert att begripa mer när jag läst mer matte. Tills vidare ska jag försöka använda mig av Björns pseudokod för att skriva ett Pythonprogram...
Det var sa lite sa, jag tycker ju sant här är kul... För ett ar sedan började jag skriva en artikelserie för sannolikhetslära för spelskapare om sadär 7-8 delar, som började med super basic för att fortsätta med brant stigning pa svarighetsgraden. Det här skulle isafall inga i näst sista delen, sa du behöver knappast skämmas. (Det försvann i en harddiskkrash. Kanske dags att ateruppliva det lilla projektet?)

Du kan som Björn föreslar beräkna sannolikheterna numeriskt, men egentligen tror jag att allt du vill är att veta är när en fajt är jämn, och till det duger väntevärdet gott. För en spelare gäller att han i snitt slar antal tärningar delat med tva lyckade resultat, och ju fler spelare du har desto mer mot max antal möjliga successes kryper snittet. Om spelarnas snitt är ungefär samma som motstandarens har du en jämn konflikt.

krank said:
Det finns just nu två vägar för det här systemet att gå: En där systemet ser ut som i den här tråden, och en där den bonus rollpersonerna får (5) och den svårighetsgrad fienderna har istället adderar tärningar, så att om man har en fyra rundor lång strid och ska slåss mot en fiende med svårighetsgrad sju, så rullar varje spelare nio tärningar och spelledaren rullar elva... Fördelen med det som presenterats här är ju att det blir färre tärningar att rulla, men jag får känslan av att det finns andra, betydande, problem. Att man till exempel måste ha ganska långa strider för att det ska vara meningsfullt att ha skillnad mellan spelarnas bonus och motståndets svårighetsgrad (till exempel lär man ju i 2 rundor långa strider kunna ha en skillnad på max 1 om inte striden ska vara avgjord på förhand)...
Här bör du tänka pa vad min och max möjligt result är. Oavsett om det är en eller hundra spelare är minsta möjliga lyckade tärningar alltid noll, och högsta lyckade alltid lika med antal tärningar du har att rulla. För att det överhuvudtaget ska vara fragan om nagon kamp maste spännvidden av spelarnas resultat atminstone delvis överlappa motstandarens spännvidd. Som du säger, varför inte bara ge spelarna bonustärningar, sa att ingen summering görs? Pa sa vis är minsta värdet alltid noll för bada parter, medan om man har fler tärningar har man bade högre snitt och högre maxvärde än motstandaren. Som du är inne pa, ju färre ronder som körs, desto mer spelar aktörernas skicklighet in. Det är en potentiell pitfall, men om du är medveten om den kan du använda det till att balansera hur mycket inverkan slumpen ska ha pa resultatet.

/Grog - tokvarmt pa balkongen, tillbaka till python-c++ configuration, suck
 

Logros

Veteran
Joined
28 May 2008
Messages
77
Jag missförstod dig, och har räknat som att alla spelares framgångar och +5 läggs samman.

Du har helt rätt, svårighetsgraderna blir väldigt höga om man lägger ihop alla spelares resultat (inklusive +5).

Det blir lite mer invecklat om man ska räkna på att det räcker med att en spelare lyckas.

Det du kan göra är att sätta antalet spelare till 1 i mina formler, för att se vilken sannolikhet varje individuell spelare har att lyckas mot en given svårighetsgrad och längd på strid.

Chansen att gruppen lyckas är då (1 - [sannolikheten att ingen spelare lyckas]).

Om sannolikheten att en spelare lyckas är p så är sannolikheten att han/hon misslyckas 1-p.

Chansen att samtliga n stycken spelare misslyckas är (1-p)^n.

Chansen att minst en av n stycken spelare lyckas blir då 1-(1-p)^n.

Dvs om en spelare har sannolikhet 0,47 att vinna, så har en grupp med tre spelare 1-(1-0,47)^3 = 1-0,53^3 = 1-0,15 = 0,85 = 85% chans att vinna (avrundat till två decimaler).

Det blir lite knepigt att räkna fram lämplig svårighetsgrad för 50-50. Ska klura lite.

Edit: 85% ska det vara, avrundningsfel ftl.
 
Top