Ver Mensaje Individual
  #9  
Antiguo 18-02-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Cita:
Empezado por fer21unmsm
Pero si usas los valores correctos con el congruencial mixto multiplicativo no pasaria esto.
fer21unmsm, de eso precisamente me refiero cuando le indico a coletaun sobre mis algoritmos que puede conseguir en el hilo 1 que mencioné.

Y ahora que me acuerdo... no debería modificar ninguna parte del código. Si emplea el algoritmo Mixer() que detallo a continuación:

Código Delphi [-]
function Mixer(Seed_X0, a, b, m, Series: int64; var List: TStringList): integer;
{************************************************
 Genera una serie de números aletorios siguiendo
 el método congruencial mixto.
 * Parámetros *
 Seed_X0: valor semilla ( Corresponde a X0)
 a: factor multiplicativo
 b: factor aditivo
 m: módulo
 Series: cantidad de números a generar
 List: array de strings con los resultados
 ************************************************}
 var Ant,Sig:int64;
     i:integer;
 begin
 // realizamos unas preventivas:
 result := Preventive2(Seed_X0,a,m,Series);
 if result <> PROCESS
    then exit;
 Ant := 0;
  // borramos el contenido de la lista
 List.Clear;
 for i:=0 to Series-1 do
   begin
     if i = 0
        then begin
             List.Add(Format(RS_RESULT,[i,Seed_X0]));
             Ant := Seed_X0;
             end
        else begin
             Sig := (((a * Ant) + b) mod m);
             // agregar a la lista
             List.Add(Format(RS_RESULT,[i,Sig]));
             Ant := Sig;
             end;
   end;
 result := GENERATE;
 end; {Mixer}

Siendo Preventive2:

Código Delphi [-]
function Preventive2(Seed_X0,a,m,Series:int64): integer;
{************************************************
 Esta función permite chequear algunos valores
 iniciales para:
 * Multiplicative
 * Mixer
 * Parámetros *
 Seed_X0: valor semilla (Corresponde a X0)
 a: factor multiplicativo
 m: módulo
 Series: cantidad de números a generar
 ************************************************}
 begin
 if Seed_X0 = 0
    then begin
         result := SEED_X0_ZERO;
         exit;
         end;
 if a = 0
    then begin
         result := A_ZERO;
         exit;
         end;
 if m = 0
    then begin
         result := M_ZERO;
         exit;
         end;
 if Series < 1
    then begin
         result := INCORRECT_SERIES;
         exit;
         end;
 result := PROCESS;
 end; {Preventive2}

Las declaraciones en mayúsculas como M_ZERO son constantes y no vienen al caso ponerlas... que ya es intituivo.

Con los parámetros indicados, conseguirá su propósito No es necesario alterarlo... en List quedarán registrados los valores que necesite.

De seguro que en el enlace que mencionas va a cosneguir información académica y la explicación del algoritmo. Junto con el axioma adecuado para elegir los valores.

Cita:
Empezado por fer21unmsm
Por si acaso estos números no deben llamarse aleatoreos (ya que eso lo logras con tecnicas realmente al azar como el metodo de montecarlo, o utilizando la tabla de ibm utilizada para obtener numeros aleatoreos reales, ya que los números que te botan los metodos mencionados arriba se denomina pseudoaleatoreos, pero para los programas o sistemas se utilizan estos numeros pseudoaleatoreos
Si... es cierto... deberían llamarlos asi. Pero para simplificar las cosas... y evitar alguna confusión de parte de coletaun. Sería meyor decirles aleatorios. Y recuerda fer21unmsm, estos métodos están basados en la teoría de los grandes números... y hay tests adecuados para verifivar si pueden considerarse "aletorios". Yo hice mis pruebas a todos mis algoritmos, con diversos valores y la pasaron en un 100%.

Robert01, habría que ofreces en el enlace que detallas. Y no deberían descartarse...

A ver que dice coletaun de esto: si le sirve... o definitivamente lo hemos asustado con esto de los generadores multiplicativos... tests y teoria de los grandes números.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita