Hogyan készíthetek generátort; véletlen; amelyet a korábbi események befolyásolnak
Esélyeken alapuló rendszert próbálok megvalósítani, amely elfogult egy korábbi eseményhez képest.
Háttér: Néhány évvel ezelőtt emlékszem a World of Warcraft egyik frissítésére, amely bejelentette, hogy új esélyszámolót vezettek be az eseményláncok ellensúlyozására. (például kritikus találatok végrehajtása vagy egymás után többször kitérés). Az ötlet az volt, hogy ha elkerüli a találatot, akkor csökken a következő ütés elől való menekülés esélye, de ez mindkét irányban működik. Ha nem kerüli el a lövést, megnő a következő ütés elkerülésének esélye. A fő trükk az volt, hogy több kísérletben a kitérés esélye továbbra is megegyezik a játékosnak az aktájában megadott százalékkal.
Ez a típusú rendszer nagyon felkeltette az érdeklődésemet abban az időben, és most olyan helyzetben vagyok, hogy szükségem van ilyen megoldásra.
- Azt hiszem, online forrásokat találhatnék egy ilyen rendszer megvalósításához, de hiányozhatnak azok a szavak, amelyek relevánsak a rendszer megtalálásához.
- Szükségem van erre a megközelítésre is, hogy beilleszkedjek egy olyan rendszerbe, amely nem binomiális (vagyis két eredmény), hanem 4 egymást kizáró eseményt tartalmaz.
Jelenlegi megközelítésem hasonló a tombolajegy rendszeréhez. Amikor egy esemény bekövetkezik, a súlyt megváltoztatom az összes többi esemény javára. Ez akkor működhet, ha a négy eseményt ugyanolyan valószínűnek akarták tartani, de esetemben szélesebb körűnek kell lenniük. De mivel az uralkodó esemény gyakrabban fordul elő, a tervezettnél sokkal jobban megváltoztatja a másik súlyát, és úgy tűnik, hogy nem találja meg azokat a súlyváltozások számát, amelyek szükségesek ahhoz, hogy fenntartsák az esemény kezdeti értéke körüli átlagos jegyszámot. adta.
Néhány irányvonalat vagy világos példát nagyra értékelnénk.
9 válasz
Ne dobja a kockát, ne készítsen kártyákat.
Vegye ki az összes lehetséges RNG-eredményt, tegye őket egy listába, véletlenszerűen keverje össze, és adja vissza az eredményeket véletlenszerű sorrendben. Amikor a lista végén jár, ismételje meg.
Az eredményeket egyenletesen osztjuk el, de az egyes eredményeket csak akkor ismételjük meg, ha a listán az utolsó a következő.
Ha ez kissé túl kiszámítható az ízlésének, használhat egy listát, amely n-szerese a lehetséges eredmények számának, és minden lehetséges eredményt n-szeresre tehet a keverés előtt. Vagy átrendezheti a listát, mielőtt az teljesen megismétlődik.
Alapjában véve egy "félelosztó" eseménygenerátor, amely a következő tulajdonságokkal rendelkező eseményeket generál:
Az egyes események átlagos ütemét előre meghatározzuk.
Ugyanaz az esemény ritkábban fordul elő kétszer egymás után, mint véletlenszerű lenne.
Az események nem teljesen kiszámíthatók.
Ennek egyik módja, ha először nem véletlenszerű eseménygenerátort valósítunk meg, amely kielégíti az 1. és 2. célt, majd hozzáadunk egy bizonyos véletlenszerűséget a 3. cél eléréséhez.
A nem véletlenszerű eseménygenerátorhoz használhatunk egyszerű dithering algoritmust. Pontosabban hagyja, hogy p 1, p alatt legyen
Ha véletlenszerűen hozzá szeretné adni ezt a sorrendet, számos lehetősége van (nem feltétlenül kizárólagos):
Kövesse Philipp tanácsát, és fenntarthatja a következő N esemény "fedélzetét", néhány megfelelő méretű N számhoz. Minden alkalommal, amikor eseményt kell generálnia, kiválaszt egy véletlenszerű eseményt a fedélzetről, majd lecseréli a következő eseményre. kimenetet a fenti dithering algoritmus segítségével.
Ezt alkalmazva a fenti példára, N = 3 mellett, például:
mivel N = 10 a véletlenszerűbb megjelenést eredményezi:
Vegye figyelembe, hogy a gyakori A és B események sokkal több futással végződnek a keverés miatt, míg a ritka C események még mindig elég jól vannak elosztva.
Bizonyos véletlenszerűségeket injektálhat közvetlenül a dithering algoritmusba. Például ahelyett, hogy a 2. lépésben növelné az pi értékét, megnövelheti pi × véletlenszerű (0, 2) értékkel, ahol a véletlenszerű (a, b) egyenletesen elosztott véletlen szám a és b között; ez a következőképpen hozná ki a kimenetet:
Vegye figyelembe, hogy az additív séma sokkal erősebb randomizáló hatással bír a ritka C eseményekre, mint a közös A és B eseményekre, összehasonlítva a multiplikatív eseményekkel; ez lehet vagy nem kívánatos. Természetesen használhatja ezeknek a sémáknak a kombinációját, vagy bármilyen más beállítást is a lépésekhez, amennyiben megőrzi azt a tulajdonságot, hogy az ei átlagos növekedése megegyezik a pi-vel.
Alternatív megoldásként megzavarhatja a dithering algoritmus kimenetét úgy, hogy időnként a kiválasztott k eseményt véletlenszerűre cseréli (a pi nyers súlyok szerint választják). Mindaddig, amíg ugyanazt a k-t használja a 3. lépésben, mint a 2. lépésben, addig a dithering folyamat hajlamos lesz kiegyenlíteni a véletlenszerű ingadozásokat.
Például, itt van néhány példa a kimenetre, 10% az esélye annak, hogy minden esemény véletlenszerűen kerül kiválasztásra:
és itt van egy példa, ahol minden kimenet 50% -os esélye véletlenszerű:
Megfontolhatja azt is, hogy tisztán véletlenszerű és átvert események keverékét táplálja-e egy fedélzetbe/keverő medencébe, a fent leírtak szerint, vagy esetleg véletlenszerűen választja ki a dithering algoritmust úgy, hogy véletlenszerűen választja meg k-t, amint azt az eis súlyozza (negatív súlyokat nullának kezelve).
Ps. Íme néhány teljesen véletlenszerű eseménysorozat, azonos átlagos arányokkal, összehasonlítás céljából:
tangens: Mivel a megjegyzésekben vita alakult ki arról, hogy a fedélzeti alapú megoldásokhoz szükséges-e a fedélzet ürítése az újratöltés előtt, úgy döntöttem, hogy grafikusan összehasonlítom a fedélzet-feltöltési stratégiákat:

Számos stratégia vázlata félvéletlenszerű érmefordulások előállítására (a fej és a farok átlag 50:50 arányban). A vízszintes tengely a megfordulások száma, a függőleges tengely a várható aránytól kumulatív távolság, amelyet (fejek - farok)/2 = fejek - fejtető/2.
A diagram piros és zöld vonala az összehasonlításhoz két nem híd alapú algoritmust mutat:
- A piros vonal, dithering determinista: az egyenlő számú eredmények mindig végek, a páratlan számok mindig sorok.
- Zöld vonal, független véletlenszerű megfordítás: minden eredményt egymástól függetlenül, véletlenszerűen választanak, a fejeknek 50%, a faroknak 50% az esély.
A másik három sor (kék, lila és cián) három fedélzeti alapú stratégia eredményeit mutatja be, mindegyiket egy 40 lapos paklival hajtották végre, amelyet kezdetben 20 végű és 20 kártyás kártyákkal töltöttek meg:
- A kék vonal, töltse ki, ha üres: a kártyákat véletlenszerűen húzzák ki, amíg a pakli kiürül, majd a paklit 20 "és 20" kártyákkal töltik fel
- Lila vonal, töltse ki, ha félig üres: a kártyákat véletlenszerűen húzzák, amíg a csomagból 20 kártya nem marad; akkor a csomag 10 "végű" kártyával és 10 "várólista" kártyával egészül ki.
- Cián vonal, folyamatosan töltse: a kártyákat véletlenszerűen húzzák ki; az egyenes számokkal rendelkező számokat azonnal felcseréli a kártya "vége", és a furcsa nevű rajzokat a kártya "farka".
Természetesen a fenti cselekmény csak egy véletlenszerű folyamat egyik megvalósulása, de ésszerűen reprezentatív. Különösen azt láthatja, hogy minden pakli alapú folyamat korlátozott előítélettel rendelkezik, és meglehetősen közel marad a piros (determinisztikus) vonalhoz, míg a tisztán véletlenszerű zöld vonal végül elveszik.
(Valójában a kék, a lila és a cián vonal nullától való eltérését szigorúan korlátozza a híd mérete: a kék vonal soha nem mozoghat 10-nél többet a nullától, a lila vonal csak 15 lépést érhet el a nullától, és a vonal a cián legfeljebb 20 lépésnyire mozoghat a 0-tól. Természetesen a gyakorlatban a határértéket elérő bármely vonal rendkívül valószínűtlen, mivel erősen hajlamos a nullához közelebb visszatérni, ha túl messzire mozog .)
Röviden, nincs nyilvánvaló különbség a különböző fedélzeti alapú stratégiák között (bár átlagosan a kék vonal kissé közelebb marad a vörös vonalhoz, a cián vonal pedig kissé távolabb marad), de a kék vonal alaposabb vizsgálata mintát mutat. megkülönböztető determinista: minden 40 lövésnél (pontozott szürke függőleges vonalakkal jelölve) a kék vonal pontosan a piros vonallal találkozik nullánál. A lila és a cián vonalak nincsenek olyan szigorúan korlátozva, és bármikor távol maradhatnak a nullától.
Valamennyi pakli alapú stratégia esetében az a fontos tulajdonság, amely megtartja variációikat, korlátozza az a tény, hogy míg a kártyákat egy csomagból veszik ki, a paklit determinisztikusan újratöltik. Ha a pakli újratöltésére használt kártyákat maguk véletlenszerűen választanák meg, akkor minden pakli alapú stratégia elválaszthatatlan lenne a tiszta véletlenszerű választástól (zöld vonal).