annuncio

Comprimi
Ancora nessun annuncio.

[BUG?] Generatore numeri casuali

Comprimi
X
 
  • Filtro
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi

  • [BUG?] Generatore numeri casuali

    Da un pò di tempo ho notato che il generatore di numeri casuali è quantomeno "strano".

    Faccio un esempio, se mi piazzo ad uno spawn di dragon e comincio ad ammazzarli, quasi sempre ne escono una sequenza di grigi molto lunga o una di rossi.
    Si potrà obiettare che è possibile che succeda, una probabilità del 50% non esclude lunghe sequenze, però questo succede abbastanza sistematicamente. Avere lunghe sequenze pare essere la norma e non l'eccezione.

    Azzardo un ipotesi, non è che per caso il generatore di numeri casuali viene re-inizializzato durante il funzionamento del server invece di essere inizializzato una volta sola alla partenza ? questo potrebbe spiegare il comportamento.

    Mi pare di osservare casualità non tanto casuali in un bel pò di cose, non solo i dragon.
    Lemmings
    * Lani, Fabbro e Sarto
    * N'Salla Nuto, l'arciere che non ci prende mai [PP]
    * Lina, intrepida Paladina [PP]
    * Lila, la Domatrice di Vongole [PP]
    * Isah, La Piantagrane [AdL]
    * Trismegistus, Il Maestro di Veleni [AdL]

    Windows Vista, preferisco il colera.

  • #2
    Originariamente inviato da Mastro Lani
    Da un pò di tempo ho notato che il generatore di numeri casuali è quantomeno "strano".
    Il genratore di numeri casuali non dipende dall'inizializzazione del server ma avviene in mod stand alone:
    ovvero ad una richiesta di numero casuale risponde con l'elezione di un numero nell'intervallo richiesto senza nessun backtrick (ovvero conteggio elezioni precedenti) anche perche' con tutte le generazioni casuali da fare all'interno del server usare un backtrick occuperebbe tonnellate di memoria.
    Questo puo' a volte dare la senzazione di 0 casualita'..... ma su grandi numeri vedrai che i conteggi tornano.

    Sangue e trippa de Agnellu (cit.)

    Commenta


    • #3
      Non credo tu abbia capito.

      Probabilmente il server usa la classe Random di .NET, la quale viene inizializzata con un "seed", a parità di seed la sequenza dei numeri casuali generata è la stessa, la distribuzione all'interno della sequenza è "casuale" ed è corretta.

      Purtroppo la sequenza è ripetibile.

      Ora, se si usa una singola istanza della classe Random, la generazione dei numeri è corretta, se invece si istanzia una nuova classe Random ogni volta, passandogli lo stesso seed, invece la generazione dei numeri casuali non è corretta e può generare anomalie statistiche.

      Quindi quelli che tu definisci "backtrick" sono possibili anche senza tener memoria delle estrazioni precedenti.

      Il modo corretto di utilizzo del generatore di numeri casuali è: singola istanza, uso di quella stessa istanza durante tutta la vita del sistema.
      Lemmings
      * Lani, Fabbro e Sarto
      * N'Salla Nuto, l'arciere che non ci prende mai [PP]
      * Lina, intrepida Paladina [PP]
      * Lila, la Domatrice di Vongole [PP]
      * Isah, La Piantagrane [AdL]
      * Trismegistus, Il Maestro di Veleni [AdL]

      Windows Vista, preferisco il colera.

      Commenta


      • #4
        Sono di fretta, cmq a seed uguali non corrispondono sequenze uguali, quindi il principio errato e' lo stesso.

        Cmq si usa il random del Framework, .net non centra, usiamo il Framework2

        Amdir

        Commenta


        • #5
          Originariamente inviato da Amdir
          Sono di fretta, cmq a seed uguali non corrispondono sequenze uguali, quindi il principio errato e' lo stesso.

          Cmq si usa il random del Framework, .net non centra, usiamo il Framework2

          Amdir
          Caro Amdir, io controllerei prima di fare affermazioni un pò affrettate

          Mi permetto di quotare parte della documentazione dello MSDN:

          Pseudo-random numbers are chosen with equal probability from a finite set of numbers. The chosen numbers are not completely random because a definite mathematical algorithm is used to select them, but they are sufficiently random for practical purposes.

          The random number generation starts from a seed value. If the same seed is used repeatedly, the same series of numbers is generated. One way to produce different sequences is to make the seed value time-dependent, thereby producing a different series with each new instance of
          Random
          Framework 1 o 2 non cambia. Il suggerimento è:
          To improve performance, create one Random to generate many random numbers over time, instead of repeatedly creating a new Random to generate one random number.
          Lemmings
          * Lani, Fabbro e Sarto
          * N'Salla Nuto, l'arciere che non ci prende mai [PP]
          * Lina, intrepida Paladina [PP]
          * Lila, la Domatrice di Vongole [PP]
          * Isah, La Piantagrane [AdL]
          * Trismegistus, Il Maestro di Veleni [AdL]

          Windows Vista, preferisco il colera.

          Commenta


          • #6
            Può capitare di trovare le stesse sequenze dal medesimo seed, personalmente uso sempre l'ora indicata dall'orologio di sistema per derivare un seed.

            Commenta


            • #7
              L'ho pure scritto che ero di fretta!

              Bello consigliare di controllare e poi non seguire il proprio consiglio

              Per quanto riguarda il seed mancanza mia, davo per scontato:

              One way to produce different sequences is to make the seed value time-dependent
              Per quanto riguarda RunUO bastava leggere un attimo di codice

              codice:
              		private static Random m_Random = new Random();	
              
              		public static int Random( int count )
              		{
              			return m_Random.Next( count );
              		}
              Dove Random e' una classe del Framework ( ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref2/html/T_System_Random_Members.htm ).

              Mi permetto di citare

              The distribution of the generated numbers is uniform; each number is equally likely to be returned.

              The default seed value is derived from the system clock. However, when generating random numbers on high-performance systems, the system clock value might not produce the expected behavior. For details, see the Remarks section of the Random constructor.
              Spero di non dimenticare nulla

              Amdir

              Commenta


              • #8
                Non ho il codice del RunUO, vedo che è già istanziato un singolo oggetto, quindi OK.

                La mia osservazione era sulla ripetibilità delle sequenze di numeri, mi avevi "liquidato" un pò alla leggera.
                Lemmings
                * Lani, Fabbro e Sarto
                * N'Salla Nuto, l'arciere che non ci prende mai [PP]
                * Lina, intrepida Paladina [PP]
                * Lila, la Domatrice di Vongole [PP]
                * Isah, La Piantagrane [AdL]
                * Trismegistus, Il Maestro di Veleni [AdL]

                Windows Vista, preferisco il colera.

                Commenta


                • #9
                  Avevo il piatto in tavola, piu' che scrivere di essere di fretta non potevo, cmq fa sempre piacere scambiare due chiacchiere su di un presunto problema

                  Alla prossima,
                  Amdir

                  P.S.: Il RunUO e' open, se vuole lo trova da scaricare su www.runuo.com

                  Commenta


                  • #10
                    Il codice del RunUO non è particolarmente utile di per se. Se si facesse il codice specifico di UOD open si potrebbe darci un occhiata in più persone, anche se non necessariamente parte dello staff.

                    Credo che i bug si risolverebbero molto più velocemente.
                    Lemmings
                    * Lani, Fabbro e Sarto
                    * N'Salla Nuto, l'arciere che non ci prende mai [PP]
                    * Lina, intrepida Paladina [PP]
                    * Lila, la Domatrice di Vongole [PP]
                    * Isah, La Piantagrane [AdL]
                    * Trismegistus, Il Maestro di Veleni [AdL]

                    Windows Vista, preferisco il colera.

                    Commenta


                    • #11
                      Come fai a dirlo se non lo conosci? Per "sentito dire"?

                      La maggior parte dei bug attuali sono patchabili su RunUO 2, tant'e' vero che i miei attuali collaboratori lavorano su RunUO e non su UOD. E' questione di buona volonta'.

                      Amdir

                      Commenta

                      Sto operando...
                      X