Larppien laskennallinen vaativuus

Kuva: pubs.rsc.org

Isojen larppien järjestäminen on työläämpää kuin pienten. Mutta kuinka paljon työläämpää?

Olen ollut mukana järjestämässä larppeja, joiden pelaajamäärät ovat vaihdelleet neljästä neljäänkymmeneen. Pienten larppien pelimaailman ja hahmosuhteet hahmotan melko helposti, mutta kun hahmojen määrä kasvaa, tuntuu larpinjärjestäminen muuttuvan vaikeammaksi. Erityisesti panin merkille, että minulle 40 hahmon sisäistäminen pelinjärjestäjältä vaadittavalla tasolla on huomattavasti hankalampaa kuin 20 hahmon, vaikka voisi kuvitella, että hankaluus on suurin piirtein kaksinkertainen.

Käsitin, että ilmiötä selittää vanha tuttu keino: matematiikka. Pelinjohtajan tehtävät eivät kaikki riipukaan vaativuudeltaan suoraan lineaarisesti hahmojen määrästä, vaan eri tehtäviin hahmojen määrä vaikuttaa eri tavalla. Esittelen tässä kirjoituksessa, millaista on larpintekemisen vaikeuden matematiikka.

Vaativuudeltaan vakiomuotoisia tehtäviä

Jotkut pelinjärjestämisen tehtävät eivät riipu merkittävästi pelaajamäärästä. Esimerkiksi moniin larppeihin riittää yksi pelipaikka, jonka löytämiseen ja varaamiseen menee sama aika, oli pelaajia sitten 6 tai 60. Toki 60 pelaajalle voi olla vaikeampi löytää sopivaa pelipaikkaa, ja isommissa peleissä useamman pelipaikan käyttäminen voi olla yleisempää. Pelipaikkojen määrä riippuu kuitenkin enemmän pelidesignista kuin pelin koosta, ja pientäkin peliä voi pelata monipaikkaisesti.

Sama koskee larpin proppausta: pelin koko ei suoraan vaikuta siihen, kuinka työläät ja hienot propit pelissä on, vaikka isommissa peleissä vaativa proppaus voikin olla jonkin verran tavallisempaa. Vaikkapa pelin nettisivujen tekeminen, maailmamateriaalin kirjoittaminen, kaikille pelaajille suunnattujen sähköpostien lähettäminen ovat myös vakiomuotoisia.

Hassua kyllä, vakiomuotoiset tehtävät saattavat tuntua pienissä peleissä jopa raskaammilta kuin isoissa, ehkä siksi, että niihin menee sama vaiva, mutta vaivasta hyötyviä pelaajia on vain vähän.

Vaativuudeltaan lineaarisia tehtäviä

Jotkut pelinjärjestämisen tehtävät kasvavat lineaarisesti pelaajamäärän mukaan, eli samassa suhteessa kuin pelaajamäärä. Esimerkiksi hahmotekstien lähettäminen pelaajille pitää tehdä jokaiselle pelaajalle erikseen. Jos pelaajia on 40, pitää siis lähettää 2 kertaa enemmän yksilöityjä sähköposteja kuin 20 pelaajan pelissä. Yleensä hahmoja on yksi per pelaaja: jos jokaisella pelaajalla on monta hahmoa, oikeiden tekstien löytämisen ja lähettämisen vaativuus kasvaakin suhteessa hahmojen eikä pelaajien määrään.

Pelaajien ruokkiminen on myös tällainen lineaarinen tehtävä, johon tosin kuuluu vakiomuotoisia tehtäviä, kuten esim. ruokien ajaminen kaupasta pelipaikalle. Ruokaa pitää kuitenkin valmistaa jokaiselle pelaajalle.

Vaativuudeltaan neliöllisesti kasvavia tehtäviä

Nyt päästään varsinaiseen syyhyn siitä, miksi minusta on niin paljon vaikeampaa hahmottaa 40 hahmon kuin 20 hahmon pelejä ainakaan pelisisällön osalta. Hahmojen määrä on kyllä kasvanut lineaarisesti, mutta “kaikki tuntevat kaikki” – tyyppisessä ei voimakkaasti kahteen eri hahmoryhmään eriytetyssä pelissä hahmojen väliset suhteet kasvavatkin hahmomäärän kasvaessa neliöllisesti. Tämän huomaa, jos tekee pelille Excel-taulukon, jossa on kuvattu jokaisen hahmon suhde jokaiseen toiseen pelin hahmoon. Kun peliin lisää uuden hahmon, taulukon kokoa pitää kasvattaa sekä rivien että sarakkeiden osalta.

HarryKalkarosVernon
Harryaluksi vihaa ja lopuksi arvostaaaluksi pelkää ja myöhemmin halveksii
Kalkarosvihaa ja suojeleeei suoraa suhdetta, elämän rakkauden siskon mies
Vernonhalveksii koska pelkääei suoraa suhdetta, vaimon siskon entinen kaveri

10 pelaajan pelissä hahmojenvälisiä suhteita on kokoluokkaa 10 * 10 = 100. Toki tavallisesti hahmon suhdetta itseensä ei kirjata tällaiseen taulukkoon, ja joskus riittää kirjata jokaisen hahmoparin ihmissuhde vain yhteen soluun, eli ei eritellä Luken suhdetta Leiaan ja Leian suhdetta Lukeen erikseen. Tällöin 10 hahmon pelissä suhteita olisi (10 * 10 – 10 ) / 2 = 45.

20 hahmon pelissä suhteita on laskutavasta riippuen siis 400 tai 190, mikä on jo huomattavasti enemmän kuin 100 tai 45. Kun päästään 40 hahmon peliin, suhteiden määrä onkin jo kasvanut huimasti: pelissä on jo 1600 tai 780 erillistä hahmosuhdetta. Ei ihme, että niitä on vaikeampi hahmottaa!

Kuva: thymindoman.com

Toki kaikkien hahmojen välillä ei ole auki kirjoitettuja suhteita, vaan tavallisesti hahmoilla on kontakteja johonkin tiettyyn rajaan asti. Hahmonkirjoittajalle mahdollisten suhteiden määrä lisää kuitenkin suhteidenluonnin vaativuutta, koska vaihtoehtoja on niin paljon, ja kaikille hahmoille pitää keksiä riittävästi mielekkäitä suhteita toisiin hahmoihin. Ainakin itselläni tämä vaikeus näkyy siinä, että 40 tai jopa 190 ihmissuhdetta on huomattavasti helpompi muistaa ulkoa kuin 780, vaikka näistä 780 suurin osa olisi “kaverin sisko”-tyylisiä melko merkityksettömiä suhteita. Riski siitä, että lisää vahingossa jokin aiempien suhteiden kanssa kummallisesti ristiriitaisen suhteen hahmolle, on pienessä pelissä paljon pienempi.

Toki hyvin suurissa peleissä kaikilla hahmoilla ei välttämättä ole mahdollisuutta suhteeseen kaikkien kanssa, vaan hahmoryhmät voivat olla niin erilliset, ettei yhdestä ryhmästä kukaan hahmo tunne toisesta ryhmästä ketään. 100 hahmon pelissä, jossa kaikki voivat tuntea kaikki, mahdollisia suhteita olisikin 10 000 tai 4950. Hahmoryhmien rajaaminen omiksi kokonaisuuksikseen säästää siis pelinjohdon hermoja merkittävästi.

Neliöllisesti kasvaa myös mahdollisten pelaajien välisten suhteiden määrä. Yleensä pelaajillakaan ei ole onneksi kaikkiin muihin pelaajiin sellaista suhdetta, joka pelinjohdon tulisi tietää: lista toivotuista ja ei-toivotuista kontakteista vaikuttaa pelin järjestelyihin, ja lisäksi pelaajan sukupuoli ja toiveet romanttisten kontaktien sukupuolista voivat vaikuttaa, jos pelinjohto haluaa huomioida nämä asiat hahmojaossa. Hahmojaon kautta päästäänkin nimittäin vielä vaativampaan tehtävään.

Haastavampaa neliöllisyyttä: hahmojako

Laskennallisesti varsin vaativa pelinjohdon tehtävä on löytää sopiva pelaaja jokaiselle hahmolle. Yleensä hahmojakoa ei haluta vaikkapa arpoa, vaan valita hahmoihin sellaiset pelaajat, että kaikki saavat mahdollisimman paljon toiveitaan vastaavan hahmon.

Yksinkertainen mieleen tuleva tapa hoitaa hahmojako olisi vain kokeilla kaikki mahdolliset jaot läpi ja katsoa, mikä niistä on paras. Jos 3 hengen peliin ilmoittautuu 3 pelaajaa, nämä pelaajat voidaan jakaa hahmoihin 3! eli kolmen kertoma eli 1 * 2 * 3 eli 6 eri tavalla:

GandalfAnjaAnjaPinjaPinjaSenjaSenja
FrodoPinjaSenjaAnjaSenjaAnjaPinja
SamSenjaPinjaSenjaAnjaPinjaAnja

10 hengen pelissä mahdollisia hahmojakoja on 10! eli 3628800 ja 40 hengen pelissä vaatimattomat 815 915 283 247 897 734 345 611 269 596 115 894 272 000 000 000. Universumin ikä sekunneissa on noin 436 117 076 900 000 000, eli jos kokeilee 1 870 862 955 075 212 589 882 446 929 690 hahmoyhdistelmää sekunnissa, universumin ikä riittää sopivasti testaamaan kaikki mahdolliset hahmojaot 40 hahmon pelille, jos pelaajia on ilmoittautunut pelaamaan juuri 40.

Kukaan ei kuitenkaan tietääkseni ole yrittänyt tehdä pelien kastausta kokeilemalla kaikki mahdolliset hahmojaot läpi ja valitsemalla niiden joukosta paras. Laskemattakin voi huomata, että pelinjohtajalla on muutakin tekemistä kuin testata Roope Ankan omaisuuden verran kombinaatioita sekunnissa koko universumin olemassaolon ajan.

Kuva: futurism.com

Suurin piirtein neliöllisessä ajassa hahmojaon voisi toteuttaa niin, että valitsee yhden hahmon, käy kaikki pelaajat läpi, valitsee parhaiten hahmoon sopivan pelaajan, poistaa pelaajan vapaiden pelaajien listalta ja toistaa tätä prosessia jokaiselle hahmolle.

Ongelmana on, että pelkästään tuollaista algoritmia käyttäen viimeisen hahmon pelaajalista näyttää varsin lyhyeltä: jos pelaajia on tasan saman verran kuin hahmoja, viimeiselle hahmolle jää se pelaaja, joka ei ollut paras mahdollinen mihinkään muuhun hahmoon. Tämä ei tarkoita, että pelaaja sopisi erityisen hyvin tähän hahmoon, vaan ehkä jollekin muulle mennyt hahmo olisikin tälle pelaajalle paras, ja sille hahmolle päätynyt pelaaja sopisi ihan hyvin viimeiseksi roolitettuun hahmoon.

Yksi tapa ratkaista ongelma ottaa neliöllisen algoritmin tuloksena saatu hahmojako pohjaksi ja sitten vaihdella liian kaukana pelaajan toiveista olevia hahmovalintoja toisiin, kunnes kellään pelaajalla ei ole kauhean huonosti toiveisiin sopivaa hahmoa. Tämäkin on melko työlästä, koska yhden hahmon vaihtaminen toiseen vaikuttaa usein muihinkin hahmoihin: pelaajilla voi nimittäin olla vaikkapa toiveita siitä, kenen kanssa pelaa samassa hahmoryhmässä tai minkäsukupuolisen pelaajan kanssa pelaa romanttista kontaktia. Käytännössä olen kuitenkin itse aina toteuttanut hahmojaot näin ja toivonut, että hahmokomboihin ei jäisi suuria virheitä. Optimaalista hahmojakoa tällä menetelmällä ei saavuteta, sikäli kun sellaista yksikäsitteisesti on olemassa.

Pelaajan sopivuutta tiettyyn hahmoon ei tavallisesti voi laskea mitenkään helposti pisteyttämällä, vaan pelinjohto arvioi sopivuuden pelaajan sanallisten toiveiden ja hahmon teemojen perusteella. Jos tällainen pisteytys kuitenkin olisi olemassa, optimaalinen tapa tehdä hahmojako onnistuisi neliöllisessä ajassa verkonparitusalgoritmin kautta (https://en.wikipedia.org/wiki/Minimum-cost_flow_problem), tai hyödyntämällä parinlöytöalgoritmia (https://en.wikipedia.org/wiki/Stable_marriage_with_indifference).

Kukaan tuskin jaksaa simuloida noin monimutkaisia algoritmeja käsin, joten niin kauan kuin pelaajien ja hahmojen yhdistäminen vaatii ihmisymmärrystä hahmojen piirteistä ja ilmoittautumislomakkeen vastauksista, on turha odottaakaan, että minkään pelin hahmojako olisi aivan optimaalinen. Päinvastoin pelinjohto voi onnitella itseään aina, kun on onnistunut tekemään jonkin sellaisen hahmojaon, että pelaajat ovat suurimmaksi osaksi tyytyväisiä: niin kuin nähtiin, se on jo ihan matematiikan puolesta haastava tehtävä.

Kasvaako mikään eksponentiaalisesti?

Vielä nopeampaa kuin neliöllinen tai muu polynominen kasvu on eksponentiaalinen kasvu. Kaikeksi onneksi mikään pelinjohdon tehtävä ei kasva eksponentiaalisesti pelaajamäärän suhteen, sillä silloin suuria pelejä ei varmaan voisi lainkaan järjestää.

Sen sijaan voidaan ajatella, että erilaisten mahdollisten pelin “tilojen” tai lopputulosten määrä kasvaa eksponentiaalisesti pelin pituuden suhteen. Joka hetki pelin aikana pelaajilla on mahdollisuus tehdä valintoja siitä, miten hahmo toimii ja reagoi erilaisiin pelin tapahtumiin. Siinä missä vaikkapa visual noveleita pelatessa tarinan kulkuun pääsee vaikuttamaan vain tietyissä etukäteen ohjatuissa kohdissa, larpissa tarinan kulkuun voi vaikuttaa oikeastaan missä kohdassa peliä tahansa. Vaikka hahmot toimisivat vain kahdella vaihtoehtoisella tavalla (esimerkiksi negatiivisesti tai positiivisesti) mahdollisten lopputulosten määrä laskettaisiin kaavalla 2 potenssiin n, missä n on ajanhetkiä pelissä. Ja hyvin on tiedossa, että pelaajat ovat taitavia keksimään luovasti erilaisia toimintatapoja hahmoilleen.

Ei siis ole ihme, että usein pelinjohtajat yllättyvät siitä, miten pelaajat lopulta päätyvät pelaamaan ja miten mielikuvituksellisilla tavoilla konfliktit ratkeavat. Ja se onkin pelinjohtamisen suola, joka antaa motivaatiota hoitaa kaikki pelinjohtamisen tehtävät, olivat ne laskennallisesti kuinka vaativia tahansa. 


Artikkelin kirjoitti Ada-Maaria Hyvärinen ja toimitti Mixu Lauronen


Roolipeliblogi LOKI on suomalaisen roolipelaamisen oma kanava.
Julkaisemme suomalaisten roolipelaajien ja liveroolipelaajien peliesittelyjä, kolumneja, pakinoita, arvosteluja ja tapahtumakuvauksia tiistaisin.
Tue LOKIa Patreonin kautta: https://www.patreon.com/roolipeliloki

Yksi kommentti artikkeliin ”Larppien laskennallinen vaativuus

  1. Gale–Shapleyn parinlöytöalgoritmi on oikeastaan aika hyvin sovitettavissa käsipelillä tehtäväksi, vaikkapa näin:

    1. Käy pelaajahakijat läpi, ja valitse jokaiselle mieluisin / mielestäsi parhaiten sopiva hahmo. Älä tässä kohtaa vielä välitä päällekkäisyyksistä tai siitä, saavatko kaikki hahmot pelaajan.
    2. Käy hahmot läpi; jos sama hahmo on merkitty useammalle hakijalle, valitse hahmolle näistä mielestäsi sopivin pelaaja. Vaihda kunkin muun hakijan uudeksi hahmoksi mieluisin / parhaiten sopiva niistä hahmoista, joita tälle ei ole vielä ehdotettu, oli tällä hahmolla jo pelaaja tai ei. (Jos hakijalle on jo ehdotettu kaikkia hahmoja, siirrä hakija pois hylkäyslistalle.)
    3. Toista kohtaa 2, kunnes kaikki päällekkäisyydet on ratkottu ja jokaisella hahmolla on yksi pelaaja.

    Saman hahmon pelaaja saattaa periaatteessa vaihtua montakin kertaa tämän prosessin aikana — mutta käytännössä yleensä ei, elleivät pelaajien ja pelijohdon käsitykset hahmojen ja pelaajien sopivuudesta mene tosi pahasti ristiin. Kohdassa 2 kannattaa toki joskus säästää vaivaa eikä mennä liian mekaanisesti: jos Aatoksen seuraavaksi mieluisimmat hahmotoiveet kaikkien suosikkihahmo Gandalfin jälkeen olisivat Aragorn ja Boromir, mutta kummallekin jo alustavasti valittu Aatosta selvästi sopivammat pelaajat Bertta ja Cecilia, niin näiden hahmojen yli voi Aatoksen osalta suoraan hypätä ja miettiä, sopisiko Aatos sittenkin pelaamaan vaikka Klonkkua, jolla ei ole vielä pelaajaehdokasta. Algoritmin lopputulosta tämmöinen mutkien oikaisu ei muuta.

    Sopivilla oikaisuilla tämä ei oikeastaan hirveän paljoa poikkea siitä, miten ainakin itse olen ad hoc -pohjalta ratkonut vastaavia sovitusongelmia. Algoritminen lähestymistapa on ehkä hieman formaalimpi ja antaa (yllä kuvatussa muodossa) jonkinlaisen takuun siitä, että kukin pelaaja saa varmasti jossain mielessä itselleen sopivimman mahdollisen hahmon, eikä jokin tosi hyvä hahmo/pelaajapari ainakaan jää ihan vaan vahingossa huomiotta.

    Yhteensopivuusongelmia romanttisten kontaktien, kaverihahmotoiveiden yms. kanssa tämä algoritmi ei tietenkään ratko, vaan ne pitää käsitellä jotenkin muuten erikseen. Oma mutu-epäilykseni on, että riittävän kiemuraisilla ja monimutkaisilla pelaajatoiveilla siitä, kenen kanssa kukin voi pelata mitä hahmoa ja juonta, jo yhdenkin hyväksyttävän hahmojaon löytämisestä voi tulla NP-vaikea ongelma. Onneksi käytännössä tilanne ei sentään yleensä ole oikeasti näin hankala. 😀

    Tykkää

Vastaa käyttäjälle vyznev Peruuta vastaus

Please log in using one of these methods to post your comment:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out /  Muuta )

Google photo

Olet kommentoimassa Google -tilin nimissä. Log Out /  Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out /  Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out /  Muuta )

Muodostetaan yhteyttä palveluun %s