Milyen egy pasziánsz véletlenszámgenerátora?
2015-03-05T19:37:44+01:00
2015-03-07T10:53:09+01:00
2022-07-22T11:31:18+02:00
  • Bármilyen is a random generátor, egy kártyapakli megkeveréséhez azért még elég, csak megfelelő módon kell keverni. Ha a random generátor ismétlődést is hozna, de akkor már más állapotban van a pakli, más a kiinduló pont így a végeredmény is más lesz.
    De főleg ha megbolondítjuk a dátummal/idővel.

    A kész végállapotból visszabontás egy jó módszer arra, hogy tuti legyen kirakható állapot, csak ezt a részt is ügyesen kell megírni.
    De egy tuti kirakható állapotból is zsákutcába futhat az ember, mert van amikor csak egy helyes út van de előre nem tudhatod melyik az. (Például van két királyod, meg egy üres helyed, az egyik király alatt van az a lap ami a továbbjutáshoz kell, de ezt nem tudod meg csak ha levetted a királyt és vagy szerencséd van vagy nem.)

    Hogy a gép jelezze, ha már tuti vesztes a parti az egy jó ötlet, csak ezt is jól kell leprogramozni, mert különben tévedni fog. Például a felrakott kész lapokat is (ász, kettő, három..) néha vissza kell bontani ahhoz, hogy tovább léphessen az ember, ha erre nem gondol a programozó akkor gond van.

    Esetleg még tippet is adhat a gép, hogy mi szerinte a következő jó lépés, már ha ezt meg tudja állapítani.
    Mutasd a teljes hozzászólást!
  • Akkor gondolom amelyiket nem sikerult kirakni, akkor azt tobbszor ujraprobaltad. Volt olyan, amit tenyleg nem lehetett kirakni?
    Mutasd a teljes hozzászólást!
  • Nem biztos, hogy teljesen véletlen szám.
    Mert lehet játékot választani.
    Régebben mindig a napi dátumot játszottam.
    Szóval valami integer bemenetű generátora van.
    Mutasd a teljes hozzászólást!
  • Ja ugy! Ott tenyleg csak 1 fele vegallapot van.
    Mutasd a teljes hozzászólást!
  • Nem azt írtam, hogy fix, hogy sikerül, hanem azt, hogy a végállapot minden esetben ugyanaz. (Legalábbis ezt akartam.) Tehát nem kéne egy véletlenszerű sikeres végállapotból kiindulni, mert nincs egynél több sikeres végállapot. (És még ebben sem vagyok biztos.)
    Mutasd a teljes hozzászólást!
  • Azt a Win Solitaire-t en kb. 10-20%, hogy ki tudom rakni. Most vagy iszonyat bena vagyok, vagy tenyleg vannak kirakhatatlan leosztasok. :D

    Peldaul ha minden szinbol az ász nagyon el van ásva, akkor az a leosztas eléggé kirakhatatlan.
    Mutasd a teljes hozzászólást!
  • Nem vagyok kártyajáték-szakértő - pillanatnyilag nem is tudom feidézni a passziánsz szabályait - de az XP-s emlékeim alapján mintha a (sikeres) végállapot gyakorlatilag fix lenne (kivéve persze, hogy melyik szín melyik sloton van). Mivel ebben nem vagyok biztos, nyugodtan javítsatok ki! Ha viszont így van, akkor egy biztosan megoldható passziánszhoz nem is annyira (pszeudo)random keverő- mint (pszeudo)random kártyaösszeszedő rutint kellene írni, nem?
    Mutasd a teljes hozzászólást!
  • Egy egyszeru 32bites szorzason alapulo veletlenszam generator par millio elem utan elkezdi ismetelni magát. Szerintem ez ehhez a játékhoz boven eleg.

    A kirakhatatlan allasok kiszuresehez pedig meg kell irnod az automata kirakót. Csinalj egy strukturat, ami tarolja a pillanatnyi allapotot es arra egy algoritmust, ami megvizsgalja, hogy hany lehetseges lepes van, illetve egy olyat is, ami megteszi a lépés és egy verembe bepakolja a legutobbi allapotot, hogy vissza lehessen lepni. Csak tippelni tudok, de a pasziansznal nem tart évekig megvizsgálni a tejles játékfát.

    Egy masik lehetoseg pedig az, hogy megirod azt a programot, ami a egy random sikeres allapotbol visszafele jatszik, a lehetseges lepesek kozul veletlenszeruen valaszt es vegeredmenyben osszerakja a megkevert paklit. Mondjuk ebben nem vagyok biztos, hogy a pasziansz eseteben mukodne is. Lehet hogy vannak benne megfordithatatlan muveletek, vagy túlságosan egysíkú leosztasokat eredmenyezne. Ez ott dol el, hogy az adott lehetosegek kozul milyen veletlen valoszinuseggel valasztasz.
    Mutasd a teljes hozzászólást!
  • Ne essünk túlzásokba :)
    Keveréshez elegendő egy random permutációt venni, a választott véletlen szám generátor felhasználásával, mint forrás.



    A végigjátszhatóság kérdését át kell gondolni..
    Mutasd a teljes hozzászólást!
  • Mesterséges Intelligencia? 

    Esetleg minden lépésnél végignyomni hogy van-e még alkalmazható operátor, azokkal  a lapokkal amiket a kezedben tartasz. ha nincs, vége a játéknak mert megoldhatatlan, ha van akkor mehet tovább, és így még egy segítség gombot is belerakhatsz elakadás esetén.

    A keverést meg szerintem megint MI-vel kellene. Mindig más heurisztikával, így elég lenne azt berandomozni
    Mutasd a teljes hozzászólást!
  • A valós pasziánszban sem történik más, mint megkeveri az ember a paklit majd leosztja a lapokat. Ezt leprogramozni nem nagy feladat, a pakli megkeverését lehet esetleg szebben vagy butábban megoldani. (A játék szépségét is adhatja, hogy nem tudod előre hogy ki lehet e rakni vagy sem és az ember még vesztett helyzetben is gondolkodik.)

    Felmerül bennem egy kérdés: pasziánszban van olyan hogy eleve bukott helyzet, amit tutira nem lehet kirakni? És írható olyan algoritmus, ami ki is szűri azt? (pl ha alul ragad egy kis lap az gond, de nehéz lehet eldönteni hogy tényleg nem lehet e azt onnan kiszabadítani. Esetleg ha végig játszol minden lehetséges variációt és vagy lesz köztük egy nyerő vagy nem.)

    Ahogy írták azt is meg lehet tenni, hogy visszafelé felépíteni a leosztást és a paklit, akkor tuti lesz megoldás, csak tudni kell ezt jól megírni.

    ui: a véletlenszám egy dolog, de hogy mire használod az egy másik. Pl pasziánsz esetén előre le kell osztanod a lapokat, meg megkeverni a paklit és játék közben már minden fix, ott már nem kell véletlenszámot (kártyalapot) generálni, az elején eldől hogy melyik lap hol van.
    Mutasd a teljes hozzászólást!
  • Semmiféle plusz megkötésre nincs szükséged. Illetve, ha a vágyad az, hogy implementálj egy saját pszeudó véletlenszám generátort, akkor természetesen semmi ne akadályozzon meg benne.

    Kézenfekvő megoldás, hogy a 'keverés után' megvizsgálod, hogy el lehet-e jutni nyerő állapotba és ez alapján eldöntöd, hogy újraosztasz-e vagy hagyod küzdeni a felhasználót.

    Esetleg csinálhatod fordítva: véletlenszerű nyerő állapotból visszafelé építed fel a paklit és a leosztást.

    Én olyan messzire elkerülném a pszeudó véletlenszám generálást, amennyire csak lehet.
    Mutasd a teljes hozzászólást!
  • Stephan T. Lavavej (stl)-nek van egy nagyon jó előadása a véletlen szám generálásról.
    fél óra, érdemes végignézni:
    rand() Considered Harmful (Channel 9)

    Pseudo random szám generálás meg pl. MT19937 algoritmussal lehetséges, ami minden matematiaki, statisztikai teszten átment eddig. 2 ^19937 hívás után kezdi csak magát ismételni, mert egy 623 dimenziós matematikai objektumot szimulál. Emellett maga a megvalósítása nagyon gyors.

    forráskód:
    http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/C-LANG/mt19..

    Ami a passziánszt illeti, el kellene dönteni, hogy szórakoztató célra kell generálni vagy valamiféle realisztikus környezetet szimulálunk. Ha a szórakoztatás a cél, akkor valami algoritmus ellenőrizheti a leosztást és ha nem jól játszható, akkor generál másikat, de szerintem ilyet pl. az egyszerű windowsos biztos nem csinál. Igazából mi érdekel, egy algoritmus ami vizsgál egy pasziánsz leosztást? Vagy hogy egyáltalán használnak ilyeneket? Vagy a véletlen generálás maga?
    Mutasd a teljes hozzászólást!
  • A kérdésem az lenne, hogy egy jóféle* pasziánszprogram - magyarán ami a valós fizikai kártyajátékhoz mérten realisztikus - az ugyanúgy egy átlag számítógépes álvéletlenszám-generátort (pl. Xorshift - Wikipedia, the free encyclopedia) használ, vagy szükségesek plusz megkötések/matematikai szabályok az algoritmusban v. az eloszlásban?
    Gondolok itt pl. arra, hogy minél kevesebbszer forduljon elő patthelyzet, amikor olyan leosztás fordul elő, amikből a Klondike (az átlag pasziánsz, mint pl. az XP-nél is) szabályai szerint nem lehet a játék végére jutni, de azért maradjon meg a játék véletlenszerűsége, ne forduljanak elő "túl nagy szerencsék".

    Ismer valaki erre valamilyen matematikailag megfogalmazható megoldást? Vagy hogy a már meglevő programok erre milyen szabályokat, véletleneloszlást tartalmaznak?

    Vagy ezt a játék közben, a játékos lépéseitől függő véletlengenerátor változtatásaival lehet csak kiküszöbölni?
    Mutasd a teljes hozzászólást!
abcd