A Wesnoth matematikája

Legyen ez egy hiánypótló téma. Smile

yanosz
Szerkesztő
bajnokság szervező
Csatl.: 2009. 02. 17.
Hely: itt

Akkor próbáljuk meg tisztába tenni a randomot.
Szerencsére van egy statisztika menüpont és támadásnál van egy "sebzés előszámítás" segédablak, amiből kiderül néhány dolog a játék randomgeneráló algoritmusáról. (A teljes megismerés csak a programkód ismeretében lenne lehetséges, de azt ugye nem ismerjük Smile)
A játékban amúgy elég használhatatlan a sebzés előszámítás ablak, pont a lényeges dolgokat nem mutatja.

Lássuk a tényeket!
A találat függ a megtámadott egység védelmi %-ától, és a randomgenerálás mikéntjétől.
A védelmi % ismert.
A random részben megmondható. A programozási nyelvekbe épített randomgenerátorok a [0,1) tartományba eső "látszat" valós számokat állítanak elő. (Igazából sok tizedesjegyű racionálisakat.)
Ha egy egység pl. 40%-on áll, akkor ha a generált véletlenszám 0,4-nél kisebb, akkor kivédte a támadást, ha nem kisebb, akkor eltalálták. A legtöbb egység többször támad, sőt közben az ellen visszatámadhat, tehát kérdés az is, hogy milyen a véletlenszám generálás eloszlása. A statisztika és a sebzés előszámítás ablakok infoja alapján nagy valószínűséggel binomiális eloszlású. Pl., ha 40% védelemre 4 ütés jön, akkor a találatok várható értéke 0,6*4=2,4. Vagyis a 2 és a 3 találatnak kb. egyforma az esélye, az ennél röbb, illetve kevesebb találatnak kisebb. Itt a szórás is közel 1 egész, ami elég nagy ebben az esetben, tehát a 0 és a 4 találatnak sem elhanyagolható az esélye.
Érdekes még, hogy ütésenként külön, vagy egységenként számolódik-e? Ez akkor számít, ha pl. a támadót egy ütéssel meg lehet ölni, mert akkor ugye nagy eséllyel nem 4-szer fog ütni és a statisztika ablak félrevezető lehet.
Leteszteltem ezt az esetet. Egységenként számol, nem ütésenként, viszont jól! Figyelembe veszi, ha egy egység meghalhat harc közben és ennek megfelelően számolja a sebzések várható értékét!
Gépi ellenfél esetén csal-e a random? Nem próbáltam, de nem hiszem. A statisztika ablak szerint nem. Aki biztosra akar menni, az játsszon le rengeteg meccset gép ellen és figyelje a sebzések várható és tényleges értékét. Ha nagyon sok meccs után a gép számára kedvező, akkor igen, különben nem. Mennyi a sok meccs? Legalább százas, de inkább ezres nagyságrendű legyen. Sőt, ha ügyesen csal a gép, akkor ez sem elég, külön kell figyelni a "fontos" ütéseket. Pl. 4-ből 3-szor kell találni az öléshez 70%-os védelemre, akkor csal a gép, később esetleg "visszacsalja", pl. érdektelen esetben mágikusan 3-ból 0-t talál. Na ezért nem fogom kipróbálni.

Hogyan lehet csalni multiban?
Nehezen, bár elvileg sok módja van.
A játék logikája természetesen a szerveren fut, a randomgenerálás nem a kliens dolga (na, szép is lenne, csupa biztos találat Laughing out loud)
Módjai:
1. A fejlesztők csalnak, ezt kizárhatjuk.
2. A csalók feltörik a szervert. Ez lehetséges, de hamar kiderül, folyamatosan így sem lehet csalni. Kizárható.
3. A Wesnoth publikus fejlesztői nyelve tartalmazhat nem ismert bugokat, ami lehetővé teszi. Ennek már nagyobb esélye van, de nyilván az alaptérképek és alapérák használata esetén az esély jóval kisebb.
4. Sok program tartalmaz kiskapukat, "cheat"-eket a fejlesztők számára. Ha van ilyen a Wesnothban, akkor így lehet csalni. Viszont ha sokan használják, akkor hamar ismertté válik és a fejlesztők becsukják a kiskaput.

TÁLTOS írta: ilyen hogy találati arány mutató nincs is ?
De van, csak nem direkt módon. A sebzés előszámítás ablakban kimazsolázható.
Az ott látható "Az összecsapás várható kimenetele" táblázatot kell figyelni. Abban az 1. sor a 0 találat esélyét jelenti, a 2. sor az 1 találatét és így tovább.
Pl. ha négyszer ütök, akkor 5 sor van. Ha legalább háromszor kell találnom, akkor a két utolsó sor (3 találat esélye és 4 találat esélye) %-át összeadva kapom meg a kérdésre a választ.

Egyébként sokan felülértékelik a védelmi esélyeket.
Pl. erdőben védekező tünde íjászt(70% védelem) ork közkatonával (2 ütés) támadom. Ekkor 51% az esélye, hogy el fogom találni! Ugyanez védekező tünde harcos (60% védelem) esetén 64%!

yanosz
Szerkesztő
bajnokság szervező
Csatl.: 2009. 02. 17.
Hely: itt

yanosz wrote:
Akkor próbáljuk meg tisztába tenni a randomot.
Szerencsére van egy statisztika menüpont és támadásnál van egy "sebzés előszámítás" segédablak, amiből kiderül néhány dolog a játék randomgeneráló algoritmusáról. (A teljes megismerés csak a programkód ismeretében lenne lehetséges, de azt ugye nem ismerjük Smile)...

A sebzés előszámítás illetve a statisztika valóban a binomiális eloszlás alapján készül, mivel két esemény van, vagy megüti, vagy nem, ezek együttes valószínűsége pedig 1. Klasszikus binomiális eloszlás. Ez viszont semmit nem mond a randomgenerálásról! Arról halvány fogalmat alkothat az ember, ha belenéz a visszajátszásokba, mert ott a támadás előtt feltüntet egy számot 0-32767 között, amit vizsgálva a százalékot figyelve nagyjából bejön, hogy ha 40% a védelkezés, akkor 13107 alatt nem talál, fölötte igen, de csak nagyjából. Az ördög a részletekben van, illetve a direkt számokat módosító algoritmuson, ami viszont a program belügye. Mivel a gép által generált véletlen, nem tiszta, így az előállított véletlenszámot még valamilyen algoritmus szerint tesztelik, s vagy érvényes az ütés, vagy nem. Ebben valószínűleg közrejátszik a statisztika is, mivel a szélsőségek egy idő után csökkennek. Viszont kevés egység esetén egy rossz széria is katasztrofális eredménnyel járhat, s utána hiába a kiegyenlítés. Ha egy támadássort -20, +15 körüli stattal és 4 félholt egységgel zárok, majd az ellentámadás eredményeképp elvesztek három egységet, hiába ad vissza nekem ütéseket, a -3 egység nehezen kiheverhető veszteség, amikor mondjuk 10 egységem van.

kele

kele képe
kele
Csatl.: 2008. 08. 28.

kele wrote:
Az ördög a részletekben van, illetve a direkt számokat módosító algoritmuson, ami viszont a program belügye.

Szerintem nem módosít. A [0,1) tartományból valószínűleg kétbájtos egészre módosítja a számot, ezzel az egész típussal a leggyorsabb a műveletvégzés. Tapasztalat, hogy a 15 évvel ezelőtti randomgenerátorok is kiválóan működtek a várható érték tekintetében, a szórás volt kisebb a kelleténél. Azóta nyilván fejlődtek a generáló algoritmusok. Lásd a játékban a sokszor előforduló hatalmas szórásokat.
A szélsőségek szerintem egyszerűen a nagy számok törvénye miatt csökkennek, ahogy szaporodnak az ütések, az értékek szépen közelednek a várhatóhoz.
Hogy nincs direkt kiegyenlítés, arra három dolog miatt következtetek.
1. A nagy randomkülönbség sokszor megmarad a játék végéig
2. A mesterséges beavatkozás pont a játék elején lenne fontos, ott pedig tapasztalhattuk, hogy nincs ilyen.
3. Az igazságos esélyek okán az AI-nek el kell döntenie, hogy mik a "fontos" ütések és ezekben egyenlően kéne elosztania a találatokat, pont az miatt, amit kele írt. Ha ilyen értelmes AI-vel lenne a játék felvértezve, akkor igencsak jól játszana, és ugye tudjuk, hogyan játszik Sad

A statisztika valóban sokszor félrevezető. Pl. volt olyan esetem, hogy az erdőben védekező útonállómat 5-ből 4-szer nem mágikus támadással eltalálták. Ez ugye igencsak rossz %-ot jelentett nekem, viszont túlélte és vissza tudtam vonni felgyógyulni. Az ellen semmire nem ment a szerencséjével, hiába +-os a randomja. Nem veszi figyelembe a gyógyítók áldásos tevékenységét sem, ami megintcsak torzít a valósághoz képest. A mérgezést nem is tudom, beleszámolja-e?

yanosz
Szerkesztő
bajnokság szervező
Csatl.: 2009. 02. 17.
Hely: itt

Azért én még mindig azt mondom ha vki nagy %-különbséggel van mákja az 95%-os eséllyel megnyerni a meccset, mer ugye ezek az egy-egy példák csak egy-egy esetet mutatnak be és ennél sokkal több van.

DigiHero voltam.

DigiHero képe
DigiHero
Csatl.: 2009. 01. 18.
Hely: Szombathely

DigiHero wrote:
Azért én még mindig azt mondom ha vki nagy %-különbséggel van mákja az 95%-os eséllyel megnyerni a meccset, mer ugye ezek az egy-egy példák csak egy-egy esetet mutatnak be és ennél sokkal több van.

(Várom jelentkezését annak, aki érti h mire gondoltam Laughing out loud Laughing out loud Laughing out loud )

DigiHero voltam.

DigiHero képe
DigiHero
Csatl.: 2009. 01. 18.
Hely: Szombathely

yanosz wrote:
kele wrote:
Az ördög a részletekben van, illetve a direkt számokat módosító algoritmuson, ami viszont a program belügye.

Szerintem nem módosít. A [0,1) tartományból valószínűleg kétbájtos egészre módosítja a számot, ezzel az egész típussal a leggyorsabb a műveletvégzés. Tapasztalat, hogy a 15 évvel ezelőtti randomgenerátorok is kiválóan működtek a várható érték tekintetében, a szórás volt kisebb a kelleténél. Azóta nyilván fejlődtek a generáló algoritmusok. Lásd a játékban a sokszor előforduló hatalmas szórásokat.
A szélsőségek szerintem egyszerűen a nagy számok törvénye miatt csökkennek, ahogy szaporodnak az ütések, az értékek szépen közelednek a várhatóhoz.
Hogy nincs direkt kiegyenlítés, arra három dolog miatt következtetek.
1. A nagy randomkülönbség sokszor megmarad a játék végéig
2. A mesterséges beavatkozás pont a játék elején lenne fontos, ott pedig tapasztalhattuk, hogy nincs ilyen.
3. Az igazságos esélyek okán az AI-nek el kell döntenie, hogy mik a "fontos" ütések és ezekben egyenlően kéne elosztania a találatokat, pont az miatt, amit kele írt. Ha ilyen értelmes AI-vel lenne a játék felvértezve, akkor igencsak jól játszana, és ugye tudjuk, hogyan játszik Sad

A statisztika valóban sokszor félrevezető... Pl. volt olyan esetem, hogy az erdőben védekező útonállómat 5-ből 4-szer nem mágikus támadással eltalálták. Ez ugye igencsak rossz %-ot jelentett nekem, viszont túlélte és vissza tudtam vonni felgyógyulni. Az ellen semmire nem ment a szerencséjével, hiába +-os a randomja. Nem veszi figyelembe a gyógyítók áldásos tevékenységét sem, ami megintcsak torzít a valósághoz képest. A mérgezést nem is tudom, beleszámolja-e?

Amikor azt írtam, hogy módosít, azt konkrét példa alapján gondoltam. Az Enin-yanosz meccs javítása során egy kicsit belemélyedtem a visszajátszás fájljának felépítésébe. Elég egyszerű és követhető szöveges fájl. A támadást bevezeti egy randomszám, aztán jelzi a találat valószínűségét, az eseményt (talált/nem talált), értékét és hogy túlélte-e az aktuális egység. Ebből a fájlból ollóztam ki az alábbi példákat:
rögtön az első támadás(csak a téma szempontjából fontos részek - tünde harcos útról megtámadja a faluban álló tolvajt):

value="10393" chance="30" hits="no"
value="17119" chance="60" hits="yes"
value="25397" chance="30" hits="no"
value="2129" chance="60" hits="yes"
value="24089" chance="30" hits="no"
value="8620" chance="60" hits="yes"
value="21684" chance="30" hits="no"

A 30% határa 9830-nál van, ennél kisebb érték esetén van találat. A négy támadás egyikének randomja sem kisebb, nincs is találat. A védekező esélye a találatra 60%, ez 19660-nál van. Mindhárom ütésének randomja ez alatt van, talál is háromszor. Eddig ez a klasszikus elképzelés szerint megy.

A következő példa a második támadás (gyík rajtaütő faluból megtámadja az előbbi tünde harcost):

value="26719" chance="60" hits="yes"
value="26699" chance="40" hits="no"
value="12912" chance="60" hits="yes"
value="2389" chance="40" hits="no"
value="27221" chance="60" hits="yes"
value="19897" chance="40" hits="no"
value="14052" chance="60" hits="yes"
value="23654" chance="40" hits="no"

A támadó esélye 60% a határ 19660. Ha a klasszikus kiértékelés lenne, akkor kettő talál, kettő nem, ehelyett mind a négy ütése bemegy. A védekező találati valószínűsége 40% a határ 13107. A klasszikus értékelés szerint 1 találatot vinne be, de egyszer se talál.
A következő támadás, tolvaj üti tünde harcost ismét a klasszikus értékelés alapján megy, ezt nem ollózom ki, de az érdeklődők megtalálhatják az említett fájlban.

Megkockáztatom, hogy a kompenzálást esetleg ilyen "tiszta sorozatok" beiktatásával végzi, mert ezzel sokat lehet módosítani rövid idő alatt. Az, hogy mikor kerül sorra, az meg függ a statisztikától. Például, ha az egyik félnek nagyon kedvezőtlen ( pl. -20% körüli ) a sebzési aránya, egy-két ilyen ütéssel sokat javulhat - legalábbis a statisztika... Ez magyarázná a mágusok betlizését, vagy a "stabilan álló" egységek túlzott sebezhetőségét is, ami egyébként a randomgenerátorok kis szórása miatt ritkán kerülne sorra.
A statra egyébként nincs hatással a mérgezés/gyógyítás, mert ahogy én értelmezem, az csak a sebzést figyeli, s az egyenlőtlenségek kiküszöbölése lenne a célja a fent említett módon.

Én ebből következtetek arra, hogy van valamilyen módosító algoritmus, ami a generált véletlenszám által jelzett ütést még egyszer értékeli és módosítja is. Jelen esetben ez a kiegyenlítés már rögtön a második támadás során megjelenik, de mivel yanosz nem folytatta a támadást, paradox módon Enin kapta a "kiegyenlítést". Nyilván lehet más magyarázatot is találni a jelenségre, várom az ötleteket

kele

kele képe
kele
Csatl.: 2008. 08. 28.

yanosz wrote:
(A teljes megismerés csak a programkód ismeretében lenne lehetséges, de azt ugye nem ismerjük Smile)

A Wesnoth nyílt forráskódú játék, ezért ismerjük a programkódot. Minden megtalálható az SVN tárolóban, persze az értelmezéséhez kell C++ tudás. A nemzetközi fórumon van egy hasonló téma, elég hosszú, de akit érdekel végigbogarászhatja.

"If you don't want to be replaced by a computer, don't act like one." - Arno Penzias

Udi képe
Udi
Adminisztrátor
Csatl.: 2008. 03. 01.
Hely: Székesfehérvár

heyhey matematikusok,mi ujdonsag van...?

Undertaker123
Csatl.: 2009. 12. 26.

yanosz wrote:
A játékban amúgy elég használhatatlan a sebzés előszámítás ablak, pont a lényeges dolgokat nem mutatja.

Az már bennem is felmerült, hogy a ennek a résznek a kivitelezése meglehetősen egyszerű, talán azért, hogy nem terheljék az játékosokat "felesleges" információkkal.

Ti mit hiányoltok a sebzési előszámításból ?

Es ist zu schön, um wahr zu sein.
TÁLTOS képe
TÁLTOS
Csatl.: 2007. 04. 23.
Hely: Győr

Udi wrote:
A Wesnoth nyílt forráskódú játék, ezért ismerjük a programkódot.

Köszönöm a linkeket, bár a fórumlinket elszúrtad. Smile

kele wrote:
Én ebből következtetek arra, hogy van valamilyen módosító algoritmus, ami a generált véletlenszám által jelzett ütést még egyszer értékeli és módosítja is. Jelen esetben ez a kiegyenlítés már rögtön a második támadás során megjelenik, de mivel yanosz nem folytatta a támadást, paradox módon Enin kapta a "kiegyenlítést". Nyilván lehet más magyarázatot is találni a jelenségre, várom az ötleteket

Azért lássuk be, ez ha így működne, az komoly égés lenne a fejlesztőknek. Szinte biztos, hogy nincs módosító algoritmus, sima, egyszerű véletlenszám-generálás van, mégpedig ütésenként.
Ezt a köv. programkódra alapozom:
(ezek az Udi által adott linken, az src/actions.cpp fájlban vannak)

bool attack::perform_hit(bool attacker_turn, statistics::attack_context &stats)
{
...
...
int ran_num = get_random();
bool hits = (ran_num % 100) < attacker.cth_;

int damage = 0;
if (hits) {
damage = attacker.damage_;
resources::state_of_game->set_variable("damage_inflicted", str_cast<int>(damage));
}
...
...
}

ezt a függvényt hívja ebben:
void attack::perform()
{
...
...
while(a_.n_attacks_ > 0 || d_.n_attacks_ > Innocent {
DBG_NG << "start of attack loop...\n";
++abs_n_attack_;

if (a_.n_attacks_ > 0 && !defender_strikes_first) {
if (!perform_hit(true, attack_stats)) break;
}

// If the defender got to strike first, they use it up here.
defender_strikes_first = false;
++abs_n_defend_;

if (d_.n_attacks_ > Innocent {
if (!perform_hit(false, attack_stats)) break;
}

// Continue the fight to death; if one of the units got petrified,
// either n_attacks or n_defends is -1
if(rounds > 0 && d_.n_attacks_ == 0 && a_.n_attacks_ == Innocent {
a_.n_attacks_ = a_.orig_attacks_;
d_.n_attacks_ = d_.orig_attacks_;
--rounds;
defender_strikes_first = (d_stats_->firststrike && ! a_stats_->firststrike);
}
if(a_.n_attacks_ <= 0 && d_.n_attacks_ <= Innocent {
fire_event("attack_end");
refresh_bc();
}
}
...
...
}

Megjegyzések:
1. A bool hits = (ran_num % 100) < attacker.cth_; sort meglátva, rögtön leesett a tantusz, észre kellett volna vennünk, hogy a találatot a véletlenszám két utolsó jegye alapján határozza meg Laughing out loud

2. Átbogarásztam ezen függvények többi részét is, de semmilyen módosító algoritmusra nem bukkantam, de azért nézze át más is, nem szotam mindig mindent észrevenni :oops:

yanosz
Szerkesztő
bajnokság szervező
Csatl.: 2009. 02. 17.
Hely: itt

TÁLTOS wrote:
Ti mit hiányoltok a sebzési előszámításból ?

Benne van kiemelten a sértetlenül maradás esélye, ami nyugodtan kihagyható, semmi értelme. Az oszlopdiagram sem a legfontosabbat mutatja.
Kéne bele:
1. A túlélés/meghalás esélye
2. A 0, legalább 1, legalább 2, stb. bevitt ütés valószínűsége, külön kiemelve a legvalószínűbb értékek. Ez a mostaniból is kimazsolázható, de nehézkes.

yanosz
Szerkesztő
bajnokság szervező
Csatl.: 2009. 02. 17.
Hely: itt

yanosz wrote:

1. A bool hits = (ran_num % 100) < attacker.cth_; sort meglátva, rögtön leesett a tantusz, észre kellett volna vennünk, hogy a találatot a véletlenszám két utolsó jegye alapján határozza meg Laughing out loud

Az ördög a részletekben van Wink Tényleg jó a magyarázat. Micsoda pazarlás... Generál egy egész számot, aztán csak a végét használja. Így viszont, ha kicsit is, de borul az egyensúly. A randomgenerálást nem találtad meg? Lehet, hogy csak 32000 a maximum, hogy mégse boruljon. Roppant lehangoló, hogy nincs semmi összeesküvés:(

kele

kele képe
kele
Csatl.: 2008. 08. 28.

yanosz wrote:

Köszönöm a linkeket, bár a fórumlinket elszúrtad. Smile

Javítva: http://forums.wesnoth.org/viewtopic.php?f=10&t=23905

"If you don't want to be replaced by a computer, don't act like one." - Arno Penzias

Udi képe
Udi
Adminisztrátor
Csatl.: 2008. 03. 01.
Hely: Székesfehérvár

Nézegettem a forrást és találtam egy random.cpp nevű fájlt. Azt hiszem ez adja meg a tényleges választ az egész generálás mikéntjére illetve a jelenségekre. Mivel nem vagyok otthon a c++ objektum-orientált világában így csak óvatos első közelítésben próbálom megközelíteni a dolgot:

A véletlenszám generálása valamilyen maggal kezdődik, azaz egy négybájtos számmal. Ebben törlik az előjelbitet (& 7fffffff), a fennmaradó 31-bites számból leválasztja az alsó 16-ot (/65536) az így megmaradt 15 bites szám (egy % 32768) után lesz az alapja az egésznek. s aztán ennek decimális alakjából az utolsó két jegyet veszi figyelembe az esemény kimenetelének eldöntésére.

Kicsit bonyolult az eljárás, de lévén, hogy "gyors egymásutánban" kell véletlenszámokat generálni, még megspékeli azzal, hogy az alapszámot megszorozza egy tízjegyű decimálissal s hozzáad 12345-öt. Majd kezdi a procedúrát elölről, s így lesz a következő szám generálva.

Ez az eljárási mód viszont megmagyarázza azokat az "anomáliákat", amiket tapasztalunk a játék során, nevezetesen, hogy sokkal gyakoribbak a szélsőségek, mint azt várnánk, hiszen "felszeleteli" az eseményteret, s csak egy szeletét vizsgálja. Hogy egy hasonlattal éljek, ami nem pontos, csak közelítőleg - ha a fej, vagy írás féle játékot játsszuk, sokezer dobálás után nagyjából 50% lesz a fej , s 50% az írás előfordulása, pl 1000-ből 450-550 és 500-500 közötti érték leginkább.
Ha viszont minden tizedik tízes dobássorozatot nézzük, akkor azok közt előfordulhat akár 8-2, extrém esetben 10-0 eset is.
A játék ezt csinálja, ezért egyenlítődik ki sok támadás után a statisztika, viszont a rövid sorozatokban igen szélsőséges eredmények is előfordulnak. A statisztika átlagot jelez, ami egyre több esemény után egyre jobban közelíti az átlagos elvárást, viszont egy támadást kiszámítani ennek alapján nem lehet. Ezért a sebzési előrejelzés tulajdonképpen fölösleges és több zavart okoz, mint hasznot jelent. "Egy ember viselkedését nem lehet előre kiszámítani, egy tömegét már sokkal inkább" - valami ilyesmin alapul a pszichohistória Asimovnál, s napjaink tömegoszlatása is, de ez más kérdés

kele

kele képe
kele
Csatl.: 2008. 08. 28.

kele wrote:
Nézegettem a forrást és találtam egy random.cpp nevű fájlt. Azt hiszem ez adja meg a tényleges választ az egész generálás mikéntjére illetve a jelenségekre. Mivel nem vagyok otthon a c++ objektum-orientált világában így csak óvatos első közelítésben próbálom megközelíteni a dolgot:

Javaslom, olvasd végig az Udi által adott linken található fórumtémát.
Többen állították, hogy a random generátor (RNG) nem elég jó, páran teszteket is csináltak, amik engem erről nem győztek meg. Az egyik fejlesztő is többször megszólalt, szóval első kézből lehet információkat szerezni.
Itt egy link az RNG működéséről: http://en.wikipedia.org/wiki/Linear_con ... _generator
Minden prog.nyelv ugyanazt a módszert használja, de más relatív prímeket használ, ezért pl. LINUX alatt más mint WINDOWS alatt.
Egyetértek azzal, aki azt állította, hogy egy konkrét játékban az ütések száma túl kevés, ilyen kis számú minta esetén is lehetnek nagyon hosszú azonos sorozatok, ami hiába egyenlítődik ki, 2-3 balszerencsés kör eldönti sokszor a játékot. A baj nem az, hogy az eseménytér egy szeletét használja, hanem, hogy kicsi a minta! (Valahol olvastam egy esetet arról, hogy valamelyik amerikai egyetemen diákok dobálgattak órabérben pénzdarabot és így készítettek véletlenszám sorozatokat. Egyikük lusta volt dobálni és csak beírogatott értékeket. Aztán mikor matematikai módszerekkel ellenőrizték a mintát, akkor lebukott azon, hogy túl rövid azonos sorozatokat írt be.)
Jó lenne mesterségesen egy kicsit a várható érték felé rángatni a sebzést, javasolja ezen a fórumon mindenki ezt, hátha akkor beadják a fejlesztők a derekukat. Smile
A sebzés előszámítás a jelenlegi formájában tényleg nem sokat ér.

yanosz
Szerkesztő
bajnokság szervező
Csatl.: 2009. 02. 17.
Hely: itt

Örömmel láttam a linken, hogy az általam vázolt eljárás a BorlandC/C++ -nál jelzett módszerrel egyezik. Annyi a különbség, hogy a mag kétbájtos. Illetve a Wesnothban alkalmazott végső "szeletelés" mondjuk úgy, hogy újítás. Nem túl szerencsésnek is mondhatnánk. Az, hogy az RNG jó-e vagy sem, azt nem kéne vitatnunk. Jó, csak nem biztos, hogy megfelel az elképzeléseknek. Röviden arról van szó, hogy a pszeudovéletlen számokat úgy definiálják, hogy viszonylag nagy periodicitásúak legyenek, azaz minél később kezdjen ismétlődni a sorozat. Tehát ha sorozat szempontjából vizsgáljuk, akkor jó. Viszont egy ilyen játékban, ahol az ismétlődésnek nincs jelentősége, hiszen a támadástípus is ismétlődik, nem túl jó módszer egy ismétlést kizáró módszer alkalmazása. Nyilván emiatt is szeletelték fel (hadd nevezzem így továbbra is) a keletkezett véletlenszámot a fejlesztők, de ezzel egyúttal a teljes véletlenszámra vonatkozó megfelelést is kissé elszúrták. Nem jelentős a különbség, s statisztikailag sem kimutatható, de a statisztikák épp nagy mintákra vonatkoznak, míg egy meccs "kis minta". Sokkal szerencsésebb lenne egy olyan algoritmus, ami már kisebb mintákon is jobban konvergál. De ezt elég nehéz lenne megoldani, mivel a statisztikát nem kis számokra dolgozták ki, így használatának sincs értelme.
Kíváncsiságból megcsináltam Yanoszék meccsének statisztikáját, több szempontból is, a nagyobb összegzések nem mutatnak kirívó eltérést, de például az együtéses 30%-os harc esetén 50% a találati arány (8-ból 4) miközben az összes 30%-os harcoknál a találati arány majdnem pontosan 30% (14 a 46-ból). Ugyanezek a klasszikus számolás szerint 12,5% (1 a 8-ból) illetve 27% (12 a 46-ból). Négyütéses 30%-os harc esetén 0% (0 a 8-ból) a wesnothi, illetve 12,5% (1 a 8-ból) a klasszikus számítás esetén a találati arány. Azt, aki elszenvedi az ilyen csapásokat, aligha vigasztalja a "kisszámú minta" inkább a rossz időben, rossz helyen esetét emlegeti, (teljes joggal).
Ez nyilván egy meccs statisztikája, s nem általánosítható, más esetekben más lenne a helyzet, s nem feltétlenül a wesnothi lenne a "gyengébb" megoldás.
Szumma szummárum mégiscsak jobb lenne kiszámíthatóbbá tenni a sebzést, s közelíteni az elvárásokhoz. Persze akkor a véletlenszám-generálást kellene megváltoztatni, a speciális igényeknek megfelelő módszert kialakítani, nem pedig a statisztikusok szempontjait szem előtt tartó verziót használni. Van ilyen?????

kele

kele képe
kele
Csatl.: 2008. 08. 28.

kele wrote:
Szumma szummárum mégiscsak jobb lenne kiszámíthatóbbá tenni a sebzést, s közelíteni az elvárásokhoz. Persze akkor a véletlenszám-generálást kellene megváltoztatni, a speciális igényeknek megfelelő módszert kialakítani, nem pedig a statisztikusok szempontjait szem előtt tartó verziót használni. Van ilyen?????

Lehet csinálni. Persze a fejlesztők max. akkor lennének esetleg, talán hajlandók ilyesmire, ha komoly igény mutatkozna és a kód csekély módosításával járna.
Pl. így is lehetne:
Az egységek fix, tereptől függő védelmi értékét lehetne módosítani egy változó értékkel. Ez lehetne a statisztika panelen is látható tényleges és várható elszenvedett sebzés %-a, de mondjuk legfeljebb +/-10% (nagyobb érték esetén is csak 10 lesz). Persze ezt mindkét harcoló egység a saját %-a alapján megkapná.
Pl. X játékos elszenvedett sebzése -5%(kevesebbet sebesült, mint kéne), akkor ha a köv. ütésnél 60%-os védelme lenne, akkor 60-5=55%lesz csak, ha pl. +30%-ot sebesült eddig, akkor 60+10=70% védelme lesz.
Sok előnye lehetne. Csökkennének a szélsőségek, de a játék jellege nem változna meg. A játék elején lenne a legnagyobb a csillapítás, és pont ott a legfontosabb is. Viszonylag könnyen beilleszthető a kódba. A sebzés előszámításnál is figyelembe lehetne venni. A módosítás értékét láthatóvá lehetne tenni a főképernyő felső sorában a védelmi % érték után. A módosítást nyilván nem ütésenként, hanem egységenként kéne újraszámolni, ahogy a sebzés előszámítás is történik. Némi taktikai finomságokat is hozna a játékba, pl. a törp dühöngőnél komoly súlya lenne az aktuális módosításnak.
Ideális esetben akár a játék elején egy csúszkán is be lehetne állítani a módosító érték maximumát.
Tanuljuk meg a C++-t is módosítsuk magunk? Smile

yanosz
Szerkesztő
bajnokság szervező
Csatl.: 2009. 02. 17.
Hely: itt

Nem fogják módosítani a fejlesztők olyan irányba a programot, hogy bármilyen kompenzáció legyen. Ezt egész nyugodtan elfelejthetitek, a játék két lényeges alapelemét dobnák ezzel ki:

1) KISS
2) Véletlenség

Úgy gondolják (és teljesen egyetértek velük), hogy egy stratégiai (háborús) játék alapeleme a véletlen (és ez esélyek helyes kezelése).

Egyébként a szerencsén sokkal kevesebb múlik ebben a játékban, mint azt sokan állítják. Egy jobb játékos általában meg fog verni, még akkor is, ha szerencséd van.

csarmi
Csatl.: 2011. 10. 03.

" Nem fogják módosítani a fejlesztők olyan irányba a programot, hogy bármilyen kompenzáció legyen. Ezt egész nyugodtan elfelejthetitek, a játék két lényeges alapelemét dobnák ezzel ki: "

 

Most mi a véleményed erről konkrétan hogy van ez 1.10 -be?

 

 

 

Szerintem amit írsz az teljesen igaz és helytálló volt régen. Mióta van  1.8 ill 1.10 már nem. Az RNG nagyon sokat manipulál mostanában egyre több a lehetetlen helyzet és a valószínűtlen "várható érték". És egyre több a fejfájás egy játszma során, foylamatosan súgva hogy nem te irányítasz .. hanem az RNG. Egyre inkább besül minden ötlet, stratégia,  ami régen működött. Nem tudom, nekem ugy tűnik programbutítás megy 1.8 óta,  és nem fejlesztés:((

Mire gondolok?? Egyre több duplaütés lehetetlen helyzetbe 2/2. Ennyi duplaütést 70% védelem ellen 3-4 év alatt soha nem láttam. idén bebizonyították a fejlesztők hogy ez is lehetséges! Vagy a halhatatlan egységek tömegei, 10-12 védés sorozatba és stb.

 

Talán ezért hagyták abba a legnagyobb veterán 100 éve wesnothozó játékosok a játékot ?? Vajon miért nem játszanak?

Az is fura hogy aki lenyomott 5-6 évet a játékkal most rájött hogy szar, és pick your recruits kiegészítővel azt hiszi áthidalja a játék vagy inkább a fajok, az egyes egységek kiegyensúlyozatlanságát. Nem lehet hogy rég el van adva játék ? És ez ami megy 1-2 éve ez mi???????? Már csak arról szól hogy elpusztítani azt ami jó volt régen a játékba??

 

 

Nagyon kiváncsi lennék én a mostani Rng algoritmusra! Az az érték amit az RNG legenerál az rég nem egy ütésre vonatkozik ...

Amíg így volt, nem volt annyi lehetetlen találatsorozat vagy védéssorozat mint most. Egyszerűen az figyelhető meg hogy vannak olyan egységek akiknek halniuk kell, és vannak akiknek nem.  Van pár egység egy-egy játékba, amik 1-2 vagy 8-10 életerővel is kibírnak .még 9 ütést. Publlikáljak visszajátszásokat ?? Szerintem nem szükséges, mindenki tudja, tudhatja, tapasztalja mire célzok.

Igazán belenézhetne valaki abba az algoritmusba hogy is működk valójában!! Smile

Én nem értek sajnos a programozáshoz fogalmam sincs róla. De a wesnoth matematikáját úgy gondolom elég jól ismerem...   (pontosabban tudtam amíg nem csalt az RNG)

Az eddig lejátszott meccseim alapján így alapvetően az tűnik fel, hogy a fejlesztők azon vannak hogy minél jobban ne lehessen semmivel operálni ( magas védekezés vagy magas találati esély) , és egyre jobban butítják a programot, nem kizárt hogy egyes esetekben a játszma múltbeli statisztikája alapján működik a RNG.

Most lehet fura amit írok de szerintem kényük-kedvük szerint módosítgatják a programot, aztán meg ott röhögnek ladderen a 100 másik megfigyelővel, mert hát az a legnagyobb teszt egy fejlesztőnek :DDDD  kis sakkbábuk a játékosok a szerveren. Mindenki, nemcsak ladder!! Alapvetően ez a pobléma.

Most azt mondom (akkor nem ezt mondogattam), hogy a legkorrektebb dolog még mindig az volt, mikor egy ellenálló lovas HP ja 44volt. Ezzel jelezve hűségesek nyernek mindenki ellen kész..Mindenki más takarodjon! De legalább jelezte a fejlesztő hogy a hűségeseknek nyerniük kell mindenhol.. Ez ami most megy az Rngvel az elég gusztustalan ..

Na de, megint elkanayarodtam. Belementem egy másik témába ami nem a matekhoz tartozik, hanem a fajok egymás közti egyensűlyáról szól. Mellesleg nem mintha sokat gyengültek volna a lovas kis mértékű legyengítésével a hűségesek, de az biztos hogy van már egy ork-fan is a fejelsztői csapatba :DDDD

 

Vissza a témához: az nagyon gáz szerintem és szégyen a játékra nézve, hogy amikor jön a döntő csata, Rng blokkol, nem hagy ütni (gyakran mágussal se), és mikor már totál veszve vagyok akkor az rng visszaad 1-2 egységet - 1-2 kill-t

Sokkal jobb volt a játék és nem volt idegesítő amig ezek a hulladék %ok amiket kiír a program mint területii védekezés valóban számított, és a találati esély egy legenerált Véletlen-szám volt. Korábbi verziókban a Random number valóban véletlenszám volt 1 és 9 közt,  vagy 1 és 99 közt esetleg 0 és 1 között.

 

 

TheMAze
Csatl.: 2011. 08. 11.

Én annyit vettem észre ezen a bajnokságon, hogy sokkal nagyobbak a kilenégsek az rng-ben, nem ritka, hogy a mérkőzést meghatározó első időszakokban 50% fölötti az eltérés. Nem tudom mondjuk táblázatos bizonyítékkal alátámasztani...

Üdvözlettel:
Kádár-Németh Krisztián (alias Rudanar_Firmus)
Wesnoth magyar fordítócsapat vezetője (2007-2013)

Rudanar képe
Rudanar
Adminisztrátor
Csatl.: 2007. 05. 26.
Hely: Nagykovácsi

Talán ezért hagyták abba a legnagyobb veterán 100 éve wesnothozó játékosok a játékot ?? Vajon miért nem játszanak?

Pl. azért, mert 100 év alatt még a Wesnothra is rá lehet unni. Amúgy én a jobb nevű játékosok közül még egyet se hallottam soha az RNG-re panaszkodni.

Nagyon kiváncsi lennék én a mostani Rng algoritmusra!

Parancsolj: http://svn.gna.org/viewcvs/wesnoth/branches/1.10/src/random.cpp?view=markup. Egyébként megsúgom, hogy lényegében a standard C++ random() függvényt használjuk a kezdetek óta. (Igen, ugyanaz a generátor van az 1.0-ban, mint az 1.10-ben).

Most lehet fura amit írok de szerintem kényük-kedvük szerint módosítgatják a programot, aztán meg ott röhögnek ladderen a 100 másik megfigyelővel, mert hát az a legnagyobb teszt egy fejlesztőnek :DDDD  kis sakkbábuk a játékosok a szerveren. Mindenki, nemcsak ladder!! Alapvetően ez a pobléma.

Először is, a fejlesztők többsége egyáltalán nem is játszik multiplayert (ezért olyan bugosak pl. a többjátékos hadjáratok, amilyenek). Másodszor, igen, úgy módosítgatjuk a programot, ahogy nekünk tetszik. Mégis, kinek tartoznánk elszámolással? Semmit nem kapunk a munkánkért. Hobbiból csináljuk a játékot és örülünk, ha másoknak tetszik, de ne gondold azt, hogy te teszel szívességet azzal, hogy játszasz vele.

Mellesleg nem mintha sokat gyengültek volna a lovas kis mértékű legyengítésével a hűségesek, de az biztos hogy van már egy ork-fan is a fejelsztői csapatba :DDDD

Ismét jelzem, nagyon kevés fejlesztő multizik, az ilyen változtatásokat pedig általában a ladderesek szokták kezdeményezni, és az elbírálásnál is az ő véleményükre támaszkodunk. A lovas gyengítését asszem Cackfiend javasolta.

lipk
Csatl.: 2011. 12. 31.

Félreértettél egy-két ponton. Egyébként a lovas gyengítése jól sikerült,  már jellemzően senki sem ontja, nem jellemző a meccsekre, de a loyalists még mindig rohadt erős, lándzsás önmagába gyilkos + mágusok.. De ezt nem is értem miért emeltem ki, hisz a Wesnoth törénelem során mindig is a legerősebb faj volt. Ebbe nem érdemes belemenni. Ok igazad van 1 dologba. Spekulációba nincs értelme belemenni. Egyébként tiszta fejjel belegondolva az orkokat húzni akarták, valaki túé gyengének gondolta őket, 1.10-be túl erősek lettek a többihez képest ennyi. Ennyi történhetett. 

Az Rng attól még blokkol sokszor.., amit sokszor nem értek, hogy miért van. Linket megnézem. Lehet az én gépemben/programomban van a hiba..

 Kérdés: erában van az RNG vagy a wesnoth főprogramban ? Egyáltalán elképzelhető hogy egy letöltött era felülírja az RNG-motort? Vagy bármit a programban ??

 

TheMAze
Csatl.: 2011. 08. 11.

Az Rng attól még blokkol sokszor...

Nem értem, mit akarsz ezzel mondani.

Az rng amúgy a főprogramban van, sőt az utóbbi verziókban a szerveren generálódik(úgy tudom eredetileg nem így volt)

Érában biztosan módosítható.

RNG motor amúgy nincs, csak egy sima véletlenszám generáló függvény. Egy 100 oldalú "kockát" dobálsz, ennyi.

Hasonló tudású játékosoknál öt esetből kb. négyszer az rng dönti el a meccset. Nekem se tetszik, de ez van.

Ha visszaolvasol a topicban, megtalálod a linkeket a forráskódhoz, sőt a kérdéses kódrészletet is. Szerintem azóta ez egy bájtnyit sem változott.

 

yanosz
Szerkesztő
bajnokság szervező
Csatl.: 2009. 02. 17.
Hely: itt

Az Rng attól még blokkol sokszor.., amit sokszor nem értek, hogy miért van.

Azért, mert random... szeretném hangsúlyozni, hogy az RNG nem veszi figyelembe, hogy ki játszik ki ellen, milyen egységekkel, de még csak azt sem, hogy mennyi mondjuk a megtámadott egység védekezése az adott terepen. Semmi mást nem csinál, mint kidob egy számot. Ha ez a szám egy bizonyos értéknél nagyobb (amely érték már függ a tereptől és egyéb módosítóktól), akkor azt mondjuk, hogy "talált", egyébként "nem talált". Én pl. elég gyakran állok -30%-os stattal az első néhány kör után, de elég nagy hülyeség lenne azt mondani, hogy az RNG ellenem van - fogalma sincs róla, hogy én játszom-e vagy nem.

Kérdés: erában van az RNG vagy a wesnoth főprogramban ? Egyáltalán elképzelhető hogy egy letöltött era felülírja az RNG-motort? Vagy bármit a programban ??

Nagyon kevés olyan alapértelmezés van a programban, amit nem lehet felülírni, az RNG pedig nem tartozik ezek közé (lásd pl. No Luck Era).

lipk
Csatl.: 2011. 12. 31.

Igazán nem akarok kontárkodni vagy bármiféle spanyolviaszt feltalálni, csak megjegyzem, hogy nekem is voltak furcsa dolgok az rng-t illetően, főként a lovassal kapcsolatban.

Azt figyeltem meg, hogy nálam valamilyen okból bizonyos irányokból gyakrabban talál ugyananyi védelmi % ellen,mint más irányokból támadva, illetve van, ahonnan meg szinte sose talál.

Tudom elég hülyén hangzik és valószínüleg csak a véletlen műve,de nekem a lovasok ha pl "fölülről"( a 6szög északi oldaláról) támadnak akkor általában találnak is jó arányban,viszont ha a 6szög "délnyugati részéről" akkor többnyire szinte védelmi %-tól függetlenül mindig mellémegy.

Nyilván valószínüleg a véletlen műve ez az egész és nem is akarok itt okoskodni,csak kiváncsi vagyok hogy más is észrevett-e ilyesmit, mert én amikor csak tudom emiatt automatikusan próbálom kerülni a "délnyugatról" támadást, olyan gyakran vétettem már el úgy akár 60-70% ütési esélyt is.

berez képe
berez
Magyar Bajnok 2010
Csatl.: 2007. 07. 10.

Nem tudom, de gyanúsan viselkedik 1.8ban kezdődött ez talán. Most 1.10ben minden eddiginél tobb  a 0/3 vagy a 3/3 ill 2/2 találat.

Ami ( 3/3 v 0/3) valljuk be 40-50% találati esélynél nem igazán valószinű, szinten nem valószínű mágiával 0/3. Én azt vettem észre mikor totál veszve van az egyik fél akkor ad vissza az rng és gyakran összesített statisztika húz a 0hoz (mind az okozott és az elszenvedett sebzés ).

TheMAze
Csatl.: 2011. 08. 11.

Erről a vitáról ez jut eszembe:

http://dilbert.com/strips/comic/2001-10-25/ :-)

 

Egyébként nem annyira elképzelhetlen az rng által adott "gyanús" eredmény. Az rng már csak ilyen. Ajánlom figyelmetekbe: http://www.empiricalzeal.com/2012/12/21/what-does-randomness-look-like/

Farkas János

noodlay képe
noodlay
Csatl.: 2010. 12. 18.
Hely: Balassagyarmat
Új hozzászólás