Minulle paras ohjelmointikieli tapahtumien simuloimiseen? (Todennäköisyydet)

Anonyymi

Tykkään simuloida lukuina tapahtumia (esim. lottoamista) selvittääkseni erilaisten lopputulosten todennäköisyyksiä.

Tällä hetkellä osaan vain PHP:tä, jota alun perin opettelin nettiohjelmointia varten. Se toimii yllä mainitussa tarkoituksessakin jotenkuten, suuntaa antavasti, mutta se on niin hidas, että yksi ohjelma ei aina jaksa arpoa niin monta tapahtumaa kuin haluaisin.

Mikä olisi vielä helppo ohjelmointikieli (mahdollisimman vähän "ylimääräistä" opeteltavaa verrattuna PHP:hen), joka olisi myös kohtuullisen nopea simuloimaan miljoonia tapahtumia?

Jos merkitystä: käytössä perus läppäri Windowsilla.

32

168

    Vastaukset 32

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      Minusta PHP on kohtalaisen nopea. Itse teen useimmiten simulaatioita Pythonilla ja R:llä, mutta ne taitavat olla hitaampia kuin PHP. Nopeutta vaativiin ongelmiin käytän C :aa. En tiedä. mitä kaikkea simuloit lotossa, mutta aika montaa asiaa voi laskea kombinatoriikan avulla ja joitain laskuja voi arvioida Monte Carlon simulaatiolla.

    • Anonyymi

      Kokeile D-kieltä, loppujen lopuksi ei kauas heitä PHP:stä, mutta on periaatteeltaan kumminkin lähemänä C-kieltä, eli käännettävä.

      https://dlang.org/

    • Anonyymi

      "Tykkään simuloida lukuina tapahtumia (esim. lottoamista) selvittääkseni erilaisten lopputulosten todennäköisyyksiä."

      Tarpeetonta, sillä lotossa kaikki täysosumarivit on täsmälleen yhtä todenäköisiä.

      • Anonyymi

        Rohkenen olla eri mieltä tuosta, en koskaan esim. lottoaisi riviä 1, 2, 3, 4, 5, 6, 7. Onhan se toki mahdollista että tuommoinen rivikin tulee, mutta luonnoton, vähän kuin avaruudesta löytäisit täysin kuution muotoisen kiven, joka olisi luonnon muodostama.


      • Anonyymi

        Toisekseen kahta täysin samaa 7-oikein tulosta ei ole koskaan tullut, eli heti kättelyssä kannattaa karsia pois tulos joka on jo kerran luotu.

        Tein itse lotto-ohjelmaa joskus 1998. Voitin sillä aika usein 4 oikein. Paras oli 4 oikein ja loput 3 meni ihan ruudun viereltä, tuolloin meinasi alkaa huimaamaan koska tuli niin tutun näköinen rivi eteen :)

        Nykyisin en tosin enää lottoile, on hyvä työ ja palkka, lottoaminen ei tunnu tarpeelliselt.a


      • Anonyymi
        Anonyymi kirjoitti:

        Rohkenen olla eri mieltä tuosta, en koskaan esim. lottoaisi riviä 1, 2, 3, 4, 5, 6, 7. Onhan se toki mahdollista että tuommoinen rivikin tulee, mutta luonnoton, vähän kuin avaruudesta löytäisit täysin kuution muotoisen kiven, joka olisi luonnon muodostama.

        Väärin. 1 2 3 4 5 6 7 rivi on täsmälleen yhtä todennäköinen kuin mikä muu vaihtoehto lotossa hyvänsä.

        Kuuluu jo todennäköisyyslaskennan alkeisiin ymmärtää tuo asia.


      • Anonyymi
        Anonyymi kirjoitti:

        Toisekseen kahta täysin samaa 7-oikein tulosta ei ole koskaan tullut, eli heti kättelyssä kannattaa karsia pois tulos joka on jo kerran luotu.

        Tein itse lotto-ohjelmaa joskus 1998. Voitin sillä aika usein 4 oikein. Paras oli 4 oikein ja loput 3 meni ihan ruudun viereltä, tuolloin meinasi alkaa huimaamaan koska tuli niin tutun näköinen rivi eteen :)

        Nykyisin en tosin enää lottoile, on hyvä työ ja palkka, lottoaminen ei tunnu tarpeelliselt.a

        Bulgarian lotossa v. 2009 sama rivi (6 numeroa 1-49) oli tullut muutaman viikon sisällä 2 krt.

        https://io9.gizmodo.com/why-the-exact-same-lottery-numbers-came-up-twice-in-one-1515565938

        Ei pidä elää siinä harhassa että joku tietty rivi tulee vain kerran.

        Tämäkin kuuluu tdennäköisyyslaskennan alkeisiin. Jokainen lottoarvonta on erillinen tapahtuma. Jokaisen lottorivin todennäköisyys on täsmälleen sama, viikosta toiseen.


      • Anonyymi
        Anonyymi kirjoitti:

        Toisekseen kahta täysin samaa 7-oikein tulosta ei ole koskaan tullut, eli heti kättelyssä kannattaa karsia pois tulos joka on jo kerran luotu.

        Tein itse lotto-ohjelmaa joskus 1998. Voitin sillä aika usein 4 oikein. Paras oli 4 oikein ja loput 3 meni ihan ruudun viereltä, tuolloin meinasi alkaa huimaamaan koska tuli niin tutun näköinen rivi eteen :)

        Nykyisin en tosin enää lottoile, on hyvä työ ja palkka, lottoaminen ei tunnu tarpeelliselt.a

        Kyllä kaikki rivit ovat yhtä todennäköisiä.


      • Anonyymi
        Anonyymi kirjoitti:

        Toisekseen kahta täysin samaa 7-oikein tulosta ei ole koskaan tullut, eli heti kättelyssä kannattaa karsia pois tulos joka on jo kerran luotu.

        Tein itse lotto-ohjelmaa joskus 1998. Voitin sillä aika usein 4 oikein. Paras oli 4 oikein ja loput 3 meni ihan ruudun viereltä, tuolloin meinasi alkaa huimaamaan koska tuli niin tutun näköinen rivi eteen :)

        Nykyisin en tosin enää lottoile, on hyvä työ ja palkka, lottoaminen ei tunnu tarpeelliselt.a

        Jos tavallisesta 52 pelikortin pakasta otetaan 1 kortti, todennäköisyys arvata se on 1/52.

        Pannaan kortti takaisin pakaan ja sekoitetaan, ja otetaan taas yksi kortti. Todennäköisyys arvata se on jälleen sama 1/52.

        Arvaajan valitsemalla kortilla ja sillä mikä kortti pakasta nostetaan ei tässä ole mitään merkitystä, eikä se ensimmäisen noston tulos vaikuta mitään toisen noston tulokseen. Lotossakaan tämän viikon oikea rivi ei vaikuta mitään ensi viikon oikeaan riviin.


      • Anonyymi
        Anonyymi kirjoitti:

        Väärin. 1 2 3 4 5 6 7 rivi on täsmälleen yhtä todennäköinen kuin mikä muu vaihtoehto lotossa hyvänsä.

        Kuuluu jo todennäköisyyslaskennan alkeisiin ymmärtää tuo asia.

        Ei ole, semmoista riviä ei tule koskaan arvonnassa kuin 1, 2, 3, 4, 5, 6, 7. Koko lotto ja ihmiskunta tulee päättymään ennen kuin tuo rivi tulee vastaan.


      • Anonyymi

        Vähän monimutkaisemmasta oli tietenkin kyse kuin yhden päävoiton todennäköisyydestä.

        Simuloimalla haen yleensä vastauksia monimutkaisempiin kysymyksiin kuin että miten todennäköinen on jokin yksi tapahtuma, jonka todennäköisyys on helppoa laskea matemaattisestikin. Kysymys voi olla esimerkiksi, että miten todennäköisiä ovat erilaiset lopputulokset (eri summien voitolle ja häviölle jäämiset), kun pelaa Lottoa säännöllisesti tietyn ajanjakson.

        PHP:n hitaus vaan joskus aiheuttaa sen, että ohjelmaan ei saa tapahtumien toistoja tarpeeksi isoa määrää, että myös harvinaisempien häntäpäässä olevien lopputulosten todennäköisyydet selviäisivät.

        Lottoaminen oli vain yksi esimerkkiteema. Lisäksi joskus simuloin esim. nopanheittoja, saadakseni vastauksen johonkin kysymykseen. Tyyliin montako kertaa noppaa on vähintään heitettävä, jotta saa 99-prosenttisella varmuudella jokaista silmälukua 100 kappaletta. (Tätä en ole selvittänyt, vaan tuli esimerkkinä mieleen. Tähän kuitenkin luulisin PHP:n olevan tarpeeksi nopea!)

        Aion kyllä luultavasti myös opetella lisää todennäköisyyksien laskemisesta matemaattisesti, mutta ennen kuin tulen neroksi aiheessa (en ehkä koskaan), on paljon kätevämpää selvittää monimutkaisempia todennäköisyyksiä simulaatioiden avulla. Lukion todennäköisyyskurssilla en oppinut kaikkea mahdollista.

        ap.


      • Anonyymi
        Anonyymi kirjoitti:

        Vähän monimutkaisemmasta oli tietenkin kyse kuin yhden päävoiton todennäköisyydestä.

        Simuloimalla haen yleensä vastauksia monimutkaisempiin kysymyksiin kuin että miten todennäköinen on jokin yksi tapahtuma, jonka todennäköisyys on helppoa laskea matemaattisestikin. Kysymys voi olla esimerkiksi, että miten todennäköisiä ovat erilaiset lopputulokset (eri summien voitolle ja häviölle jäämiset), kun pelaa Lottoa säännöllisesti tietyn ajanjakson.

        PHP:n hitaus vaan joskus aiheuttaa sen, että ohjelmaan ei saa tapahtumien toistoja tarpeeksi isoa määrää, että myös harvinaisempien häntäpäässä olevien lopputulosten todennäköisyydet selviäisivät.

        Lottoaminen oli vain yksi esimerkkiteema. Lisäksi joskus simuloin esim. nopanheittoja, saadakseni vastauksen johonkin kysymykseen. Tyyliin montako kertaa noppaa on vähintään heitettävä, jotta saa 99-prosenttisella varmuudella jokaista silmälukua 100 kappaletta. (Tätä en ole selvittänyt, vaan tuli esimerkkinä mieleen. Tähän kuitenkin luulisin PHP:n olevan tarpeeksi nopea!)

        Aion kyllä luultavasti myös opetella lisää todennäköisyyksien laskemisesta matemaattisesti, mutta ennen kuin tulen neroksi aiheessa (en ehkä koskaan), on paljon kätevämpää selvittää monimutkaisempia todennäköisyyksiä simulaatioiden avulla. Lukion todennäköisyyskurssilla en oppinut kaikkea mahdollista.

        ap.

        Eikö se nyt ole itsestäänselvää simuloimattakin että lotossa todennäköisesti vain häviää, sitä enemmän mitä enemmän pelaa?


      • Anonyymi
        Anonyymi kirjoitti:

        Eikö se nyt ole itsestäänselvää simuloimattakin että lotossa todennäköisesti vain häviää, sitä enemmän mitä enemmän pelaa?

        Onhan se, ja itse en arvattavista syistä lottoakaan.

        Mutta se ei tarkoita, etteikö olisi hauska tutkailla tarkemmin, että miten todennäköisiä erilaiset lopputulemat ovat. Näitä tarkkoja lukuja voi sitten kertoa fan factoina muillekin. Pelkät sanalliset ilmaukset tyyliin "tosi harvinaista" on tylsiä!

        En nyt oikein ymmärrä, mikä tarve joillakin on kyseenalaistaa kaiken tekemisen järkevyyttä. Eikö ole tarpeeksi hyvä syy, että tekeminen on omasta mielestä hauskaa ja mielenkiintoista?

        Kovasti on tässä keskustelussa takerruttu tuohon lottoamiseen, kun on paljon muutakin mitä voi simuloida ja mihin tarvitsisi PHP:tä nopeampaa kieltä. Ehkä perehdyn C :aan.

        ap.


      • Anonyymi

        Tee sitä mikä kiinnostaa. Siinähän oppii paremmin ohjelmointia kun kiinnostaa. Itsekin tehnyt näitä lottosimulointeja Amiga 500:lla aikoinaan. Voisi kaivaa sen koodin esille ja kääntää nykyisille prosessoreille toimisi ehkä hieman nopeammin :)

        Tosiaan kaikki rivit ovat yhtä todennäköisiä mutta kannattaa välttää rivejä jotka näyttävät epätodennäköisiltä koska mahdollisen voiton jakajia on vähemmän.


    • Anonyymi

      Muutkin loton voittomahdollisuudet voi laskea kynällä ja paperilla. Jos siihen ei kykene, tuskin pystyy ohjelmoimaankaan ohjelmaa, joka niitä laskisi.

    • Anonyymi

      Fyysisiä palloja ja niiden päätymistä tuubiin yrität laskelmoida? Onnea vaan, oli kieli mikä tahansa.

      • Anonyymi

        Ei liittynyt mitenkään palloihin. Veikkauksen sivuilla kerrotaan eri voittosummien todennäköisyydet valmiiksi, joten olisi aika turhaa...

        ap.


    • Anonyymi

      Onkohan lottoarvontoja tehty Suomen lotossa jo niin paljon että aineistosta pystyisi laskemaan noudattaako numeroiden esiintymisfrekvenssit satunnaisjakaumaa oikeasti?

      • Anonyymi

        "Suomessa Veikkaus aloitti loton myynnin joulukuussa 1970,"
        47*52=muutama tuhat arvontaa ei ole paljoakaan viidestätoista miljoonasta. Lisäksi säännöt muuttuneet monta kertaa.


    • Anonyymi

      Täydellistä satunnaisuutta ei ole kuin matematiikassa ja kavanntifysiikassa (ainakin kvanttifysiikan teoriassa).

    • Anonyymi

      Tuli mieleen CSS, simppeli, toiminta varma ja soveltuu numeroiden pyöritykseen ja alkioiden säilytykseen. Ei toki mikään grafiikan graalin malja, mutta sitä tuskin halusitkaan.

      • Anonyymi

        Anteeksi sekoitin tarkoitin toki SQL eikä css.. liittyvät toisiinsa mutta ei ihan :D onjo aikaa kun ohjelmoin SQL data baceihin niin meni termit sekaisin ja joutu vähän hakemaan.


      • Anonyymi

        Kannattaa sitten käyttää uutta html5 kieltä niin ohjelmasi soveltuu myös uusimpien selainten käytettäväksi :)


    • Anonyymi

      PyPy on vaihtoehtoinen nopeampi Python-toteutus. PyPy pyrkii nopeuteen ja pienempään muistin käyttöön verrattuna alkuperäisen Python-tulkkiin. Alla esimerkki joka osoittaa että PyPy on yli kaksi kertaa nopeampi kuin C .

      PyPy ja While silmukkan ajoaika 0,852s
      l=1000000000
      a=0
      while (a < l):
      a = a 1

      C ja While silmukkan ajoaika 1,933s
      #include <iostream>
      using namespace std;
      int main () {
      int l = 1000000000;
      int a = 0;
      while( a < l ) {
      a ;
      }
      return 0;
      }

      Kummatkin ajetaan näin kun käytämme t1 nimeä ohjelmalle.
      C
      time ./t1

      PyPy
      time pypy t1.py

      Niin uskomattomalta kun se tuntuukin tämä on totta.

      • Anonyymi

        Tein vielä mielenkiinnon vuoksi saman testin javascript -koodina,
        ja tulos oli 1.929 sekuntia. Joten se meni samoille lukemille kuin C

        Tässä alla koodi, aja se selaimen kehitystyökalujen konsolissa, F12 jos Chromium selainta käytät.

        var start = new Date().getTime();
        for (i = 0; i < 1000000000; i) {
        }
        var end = new Date().getTime();
        var time = (end - start) / 1000;
        alert('Aikaa kului: ' time);


      • Anonyymi

        Koska tuota PHP:ta nosteltiin turhaan suorituskykyisenä jalustalle tein vielä siihenkin saman pätkän, mutta aikaa menikin jo 7.693 sekuntia, eli ollaan kokonaan eri luokassa.

        <?php
        $Aloitus = microtime(true);
        $x = 0;
        while($x <= 1000000000) {
        $x ;
        }
        $Lopetus = microtime(true);
        $aika = ($Lopetus - $Aloitus);
        echo "Aikaa meni: ", round($aika,3), " sekuntia.";


      • Anonyymi
        Anonyymi kirjoitti:

        Koska tuota PHP:ta nosteltiin turhaan suorituskykyisenä jalustalle tein vielä siihenkin saman pätkän, mutta aikaa menikin jo 7.693 sekuntia, eli ollaan kokonaan eri luokassa.

        <?php
        $Aloitus = microtime(true);
        $x = 0;
        while($x <= 1000000000) {
        $x ;
        }
        $Lopetus = microtime(true);
        $aika = ($Lopetus - $Aloitus);
        echo "Aikaa meni: ", round($aika,3), " sekuntia.";

        Tuosta jäi lopusta PHP -lohkon sulkeva tagi pois, joten lisää siihen vielä tämä:

        ?>

        No se oli siinä.


      • Anonyymi kirjoitti:

        Koska tuota PHP:ta nosteltiin turhaan suorituskykyisenä jalustalle tein vielä siihenkin saman pätkän, mutta aikaa menikin jo 7.693 sekuntia, eli ollaan kokonaan eri luokassa.

        <?php
        $Aloitus = microtime(true);
        $x = 0;
        while($x <= 1000000000) {
        $x ;
        }
        $Lopetus = microtime(true);
        $aika = ($Lopetus - $Aloitus);
        echo "Aikaa meni: ", round($aika,3), " sekuntia.";

        Suorituskyky asiat ei mene lineaarisesti. On ennemminkin näin:

        <100ms
        <1s
        <10s
        <30s
        <5min
        <30min
        <16h
        <30h
        <1vko
        <2vko
        ... ja siitä eteenpäin, kuinka monta kuukautta

        1.929s ja 7.693s ovat molemmat <10s, että ei käytännössä mitään eroa.


      • Anonyymi

        On eroa
        sf::sleep(sf::milliseconds(50));


      • Anonyymi

        Eli linukseissa tuokin seilaa sekunnin ja puolen sekunnin välillä. En tiedä sitten johtuuko latenssista.


      • Anonyymi
        Anonyymi kirjoitti:

        Eli linukseissa tuokin seilaa sekunnin ja puolen sekunnin välillä. En tiedä sitten johtuuko latenssista.

        Kyllä tuon viiveen pitäisi kulua umpeen 20 kertaa sekunnissa.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Venäjä alkaa iskemään Suomen politiikkaan.

      Tässä on valtion ja koko länsiliiton päämiehet varoitelleet, että Venäjä alkaa talven aikana taas iskemään hybridisesti.
      Sinkut
      237
      1491
    2. Hallituksen järjestämä spektaakkeli tuo vessanpyttykeissi

      Että olisi kymmenien kansanedustajien kodeissa käyty ihan tuosta vaan, eikä kukaan kansanedustaja kerro niin käyneen, va
      Maailman menoa
      284
      1065
    3. Miltä tuntuu vanhempi nainen olla

      Pihkassa huomattavasti nuorempaan kolliin joka on uskollinen ja kiltti ja tottelee joka asiaa ja tykkää pussailla ja pan
      Ikävä
      94
      824
    4. Sysmän "ilon päivä"

      Ja taas palaa hirveä määrä verorahoja, ihan turhaan soopaan. Eikö nämä jotka kuntapolitiikassa valittavat ja tuhoaa vaan
      Sysmä
      68
      782
    5. Uskon, että saataisiin kaikki selvitettyä

      Mutta yhteys on jäissä, minä olen jäässä, enkä osaa tai uskalla enää lähestyä. Se vaan on niin. Naiselta Jos ei ole hyvä
      Ikävä
      48
      733
    6. Pakko myöntää mies

      En mä aina ihan rehellinen sulle ollut
      Ikävä
      110
      629
    7. Joka ilta mietin

      sua❤️Mitä teet, missä meet? Kaipaatko yhtään? Yön tullen toivotan mielessäni sulle hyvää yötä ja aamuisin huomenet. Joka
      Ikävä
      27
      595
    8. Riitastako pelastaja

      Riitta jätti hakemuksen. Hyvä niin. On ainakin yksi mistä ottaa. Pertsa ei taida aikuistua koskaan ja Pekka hoiteli silt
      Kemijärvi
      34
      574
    9. Timo Vornanen.

      On siinäkin yksi täystampio. Eipä ihme, että persukannattajat sen eduskuntaan äänestikin.
      Maailman menoa
      49
      555
    10. Luottamus

      Luotan vain siihen mitä tapahtuu IRL. Anonyymipalstan vihjailut eivät merkitse minulle mitään.
      Ikävä
      94
      525
    11. mielikuva

      Mitä luulet hänen ajattelevan sinusta?
      Ikävä
      41
      501
    12. 32
      491
    13. Kadutko mies sitä miten reagoit?

      ..siihen sotkuun, jonka jälkeen mikään ei ole ollut kuin ennen. 🥺
      Ikävä
      48
      475
    14. Millaisen talvitakin haluaisit?

      Talveen vielä aikaa, mutta talvitakit tulleet kauppoihin. Millainen olisi unelmiesi talvitakki? Itse tykkäisin jostain
      Sinkut
      77
      451
    15. Mikä kaivatullesi

      On tärkeintä elämässään?
      Ikävä
      32
      444
    16. 32
      439
    17. Olisitko nainen ihan nolona

      Jos et saisikaan sitä nousemaan...
      Sinkut
      77
      422
    18. Onko kahvila Retro samalla pub???

      Netin mukaan anniskeluoikeudet. Käykö tuolla kaljoitteluporukkaa? Onko iltaviihdettä? Olen muuttamassa marraskuussa Kuhm
      Kuhmo
      8
      407
    19. Oletteko täyttä sataa?

      Muuta etunimienne kirjaimet numeroiksi. Esim. Mia ja Risto siitä tulee 8 numeroa. Laske ne yhteen . Paljonko tulee?
      Ikävä
      33
      400
    20. Iivari esittää poliisin tutkintaa

      Siikalatvan kunnanjohtaja Pekka Iivari on pannu ison pyörän liikkeelle. Entinen Kemijärven historian lyhimmän kaupunginj
      Kemijärvi
      21
      381
    Aihe