Ako môžem vytvoriť generátor; náhodný; ktorá je ovplyvnená predchádzajúcimi udalosťami
Snažím sa implementovať systém založený na šanciach, ktorý je skreslený z predchádzajúcej udalosti.
Pozadie: Pred niekoľkými rokmi si pamätám aktualizáciu pre World of Warcraft, ktorá oznamuje, že implementovali novú kalkulačku šancí na vyrovnanie reťazcov udalostí. (napríklad kritické zásahy alebo uhýbanie sa niekoľkokrát za sebou). Išlo o to, že ak sa vyhnete zásahu, šanca na únik z nasledujúceho zásahu by sa znížila, ale fungovalo by to obojsmerne. Nevyhýbanie sa strele by zvýšilo šance na vyhýbanie sa ďalšiemu zásahu. Hlavným trikom bolo, že pri niekoľkých pokusoch šanca na uhýbanie stále zodpovedala percentuálnemu podielu, ktorý dostal hráč v jeho spise.
Tento typ systému ma vtedy veľmi zaujal a teraz som v situácii, keď takéto riešenie potrebujem.
- Myslím, že by som bol schopný nájsť online zdroje na implementáciu takéhoto systému, ale slová relevantné pre jeho nájdenie by mohli chýbať.
- Tiež potrebujem, aby tento prístup zapadol do systému, ktorý nie je binomický (t. J. Dva výsledky), ale obsahuje 4 navzájom sa vylučujúce udalosti.
Môj súčasný prístup je podobný prístupu tombolového lístkového systému. Ak dôjde k udalosti, zmením váhu v prospech všetkých ostatných udalostí. To by mohlo fungovať, ak by tieto štyri udalosti mali byť rovnako pravdepodobné, ale v mojom prípade musia byť omnoho rozšírenejšie. Ale keďže sa prevažujúca udalosť stáva častejšie, mení sa váha toho druhého oveľa viac, ako bolo zamýšľané, a nezdá sa, že by sa našli čísla pre zmeny hmotnosti, ktoré sú potrebné na udržanie priemerného počtu vstupeniek okolo pôvodnej hodnoty, ktorú má udalosť. dal to.
Niekoľko smerov alebo jasný príklad by boli veľmi ocenené.
9 odpovedí
Nehádžte kockami, nerobte karty.
Vezmite všetky možné výsledky RNG, vložte ich do zoznamu, náhodne ich premiešajte a vráťte výsledky v náhodnom poradí. Až budete na konci zoznamu, opakujte postup.
Výsledky budú distribuované rovnomerne, ale jednotlivé výsledky sa nebudú opakovať, pokiaľ nebude posledný v zozname prvý v nasledujúcom.
Ak je to pre váš vkus príliš predvídateľné, môžete použiť zoznam, ktorý je n-násobkom počtu možných výsledkov, a každý možný výsledok dať n-krát pred zmiešaním. Alebo môžete zmeniť usporiadanie zoznamu skôr, ako sa úplne zopakuje.
V podstate to, čo požadujete, je „semi-distribútor“ generátora udalostí, ktorý generuje udalosti s nasledujúcimi vlastnosťami:
Priemerná rýchlosť, akou sa jednotlivé udalosti konajú, je stanovená vopred.
Je menej pravdepodobné, že sa rovnaká udalosť vyskytne dvakrát za sebou, ako by bola náhodná.
Udalosti sa nedajú úplne predvídať.
Jedným zo spôsobov, ako to urobiť, je najskôr implementovať generátor náhodných udalostí, ktorý spĺňa ciele 1 a 2, a potom pridať určitú náhodnosť, aby sa dosiahol cieľ 3.
Pre generátor náhodných udalostí môžeme použiť jednoduchý algoritmus rozkladu. Konkrétne povoľte p 1, p nižšie
Teraz môžete k tejto postupnosti náhodne pridať niekoľko možností (nie nevyhnutne exkluzívnych):
Môžete postupovať podľa Philippovej rady a udržiavať „balíček“ N nadchádzajúcich udalostí pre niektoré primerane veľké číslo N. Zakaždým, keď potrebujete generovať udalosť, vyberiete z balíčka náhodnú udalosť a potom ju nahradíte nasledujúcou udalosťou výstup pomocou algoritmu rozkladu vyššie.
Pri použití tohto príkladu vyššie s N = 3 vznikne napríklad:
zatiaľ čo N = 10 poskytuje náhodnejšie vyzerajúcich:
Všimnite si, ako bežné udalosti A a B v dôsledku premiešania skončia s oveľa väčším počtom behov, zatiaľ čo zriedkavé udalosti C sú stále pomerne dobre rozmiestnené.
Trochu náhodnosti môžete vložiť priamo do algoritmu rozkladu. Napríklad namiesto zvýšenia ei o pi v kroku 2 by ste ho mohli zvýšiť o pi × random (0, 2), kde random (a, b) je rovnomerne rozdelené náhodné číslo medzi a a b; takto by sa získal produkt, ako je tento:
Všimnite si, ako má aditívna schéma oveľa silnejší náhodný efekt pre zriedkavé udalosti C ako pre bežné udalosti A a B v porovnaní s multiplikatívnou; to môže alebo nemusí byť žiaduce. Môžete samozrejme použiť aj kombináciu týchto schém alebo inú úpravu prírastkov, pokiaľ zachováva vlastnosť, že priemerný prírastok ei sa rovná pi.
Alternatívne by ste mohli narušiť výstup algoritmu rozkladu farieb tým, že niekedy nahradíte vybranú udalosť k náhodnou (vybranou podľa surových váh pi). Pokiaľ rovnako použijete to isté k v kroku 3, aké ste vytvorili v kroku 2, proces rozkladu bude mať stále tendenciu vyrovnávať náhodné výkyvy.
Tu je napríklad niekoľko príkladov výstupu s 10% pravdepodobnosťou náhodného výberu každej udalosti:
a tu je príklad s 50% pravdepodobnosťou, že každý výstup bude náhodný:
Môžete tiež zvážiť vloženie zmesi čisto náhodných a rozložených udalostí do balíčka/mixovacieho bazéna, ako je popísané vyššie, alebo možno randomizáciu algoritmu rozkladu výberom náhodného výberu k, zváženého pomocou eis (negatívnych váh považovaných za nulové).
Ps. Tu uvádzame niekoľko úplne náhodných sekvencií udalostí s rovnakými priemernými mierami pre porovnanie:
dotyčnica: Pretože v komentároch prebehla debata o tom, či je pre riešenia založené na balíčkoch nevyhnutné nechať balíček vyprázdniť pred jeho opätovným naplnením, rozhodol som sa urobiť grafické porovnanie niekoľkých stratégií plnenia balíka:

Zápletka niekoľkých stratégií na generovanie semi-náhodných otočení mince (s priemerom hláv a chvostov v pomere 50:50). Horizontálna os je počet prevrátení, vertikálna os je kumulatívna vzdialenosť od očakávaného pomeru, meraná ako (hlavy - chvosty)/2 = hlavy - prevrátenia/2.
Červená a zelená čiara v grafe zobrazujú na porovnanie dva neprepojovacie algoritmy:
- Červená čiara, rozkladajúci sa determinista: výsledky s rovnakými číslami sú vždy konce, výsledky s nepárnymi číslami sú vždy fronty.
- Zelená čiara, nezávislé náhodné obrátenie: každý výsledok je vybraný náhodne nezávisle, s 50% pravdepodobnosťou pre hlavy a 50% pravdepodobnosťou pre chvosty.
Ďalšie tri riadky (modrá, fialová a azúrová) zobrazujú výsledky troch stratégií založených na balíčkoch, pričom každá z nich je implementovaná pomocou balíčka so 40 kartami, ktorý je na začiatku naplnený kartami s 20 hlavami a 20 kartami:
- Modrá čiara, vyplňte prázdne: karty sa losujú náhodne, kým nie je balíček prázdny, potom sa balíček doplní 20 “a 20“ kartami
- Fialová čiara, naplňte, keď je poloprázdna: karty sa losujú náhodne, kým v balíčku nezostane 20 kariet; potom je balíček doplnený 10 kartami „konca“ a 10 kartami „fronty“.
- Azúrová čiara, priebežne plniť: karty sa losujú náhodne; čísla s rovnými číslami sú okamžite nahradené kartou „končia“ a kresby nazývané nepárne s kartou „chvosty“.
Vyššie uvedená zápletka je samozrejme iba jednou realizáciou náhodného procesu, ale je primerane reprezentatívna. Konkrétne môžete vidieť, že všetky procesy založené na balíkoch majú obmedzené skreslenie a zostávajú pomerne blízko červenej (deterministickej) čiary, zatiaľ čo čisto náhodná zelená čiara sa nakoniec stratí.
(Odchýlka modrej, fialovej a azúrovej čiary od nuly je v skutočnosti prísne obmedzená veľkosťou mosta: modrá čiara sa nikdy nemôže posunúť viac ako 10 krokov od nuly, fialová čiara môže dosiahnuť iba 15 krokov od nuly a čiara azúrová sa nemôže posunúť viac ako 20 krokov od 0. Samozrejme, v praxi je ktorákoľvek z čiar, ktorá dosiahne limit, mimoriadne nepravdepodobná, pretože existuje silná tendencia k návratu bližšie k nule, ak sa posunie príliš ďaleko .)
Stručne povedané, medzi rôznymi stratégiami založenými na palube nie je zrejmý rozdiel (aj keď modrá čiara zostáva v priemere o niečo bližšie k červenej čiare a azúrová zasa o niečo ďalej), ale podrobnejšia kontrola modrej čiary odhalí vzor. výrazný determinista: na každých 40 snímok (označených sivými bodkovanými zvislými čiarami) sa modrá čiara stretne presne s červenou čiarou na nule. Fialová a azúrová čiara nie sú tak prísne obmedzené a môžu sa kedykoľvek držať ďalej od nuly.
Pre všetky stratégie založené na balíku je dôležitá vlastnosť, ktorá si zachováva svoje variácie, obmedzená skutočnosťou, že zatiaľ čo karty sú vyťahované z balíka, balíček je deterministicky doplňovaný. Ak by karty použité na opätovné načítanie balíčka boli náhodne vybrané, všetky stratégie založené na balíku by sa stali neoddeliteľnými od čistej náhodnej voľby (zelená čiara).