Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何在mersenne twister中初始化一次种子值,并多次使用以每次获得不同的随机数_Actionscript 3_Actionscript_Flash Media Server - Fatal编程技术网

Actionscript 3 如何在mersenne twister中初始化一次种子值,并多次使用以每次获得不同的随机数

Actionscript 3 如何在mersenne twister中初始化一次种子值,并多次使用以每次获得不同的随机数,actionscript-3,actionscript,flash-media-server,Actionscript 3,Actionscript,Flash Media Server,我无法从机器翻译中获得不同的随机数,因为种子具有固定值(没有按照测试人员的建议进行更改)。但是,当我在一个程序中调用同一个函数两次时,它会显示不同的值,但即使我多次调用该程序,它也不会随机化值。我不知道我在哪里落后了 请就此向我提出建议 下面是从mine.asc文件粘贴的代码(与flash media server相关) main.asc load(shuffle.asc); application.onAppStart=function() { trace("Application

我无法从机器翻译中获得不同的随机数,因为种子具有固定值(没有按照测试人员的建议进行更改)。但是,当我在一个程序中调用同一个函数两次时,它会显示不同的值,但即使我多次调用该程序,它也不会随机化值。我不知道我在哪里落后了
请就此向我提出建议

下面是从mine.asc文件粘贴的代码(与flash media server相关)

main.asc

  load(shuffle.asc);
  application.onAppStart=function()
  {
trace("Application Started");
  };

  application.onConnect=function(client,name)
   {

shuffledNumbers();
   }
洗牌

var gen_random;


function  shuffledeck()
{
trace("shufledeck");

gen_random = new Array();

gen_random= new Array();

for(i=0;i<1000;i++)
{
gen_random[i]=genrand_int32();
}
trace("gen_random: "+gen_random); // HERE WE CAN SEE THE RANDOMLY GENERATED NUMBERS . THE PROBLEM: EVERYTIME I AM GETTING THE SAME RANDOM GENERATED VALUES.

}


    var N = 624;  
    var M  = 397;  
    var MATRIX_A  = 0x9908b0df;   /* constant vector a */  
    var UPPER_MASK  = 0x80000000; /* most significant w-r bits */  
    var LOWER_MASK  = 0x7fffffff; /* least significant r bits */  
    var mt =[]; /* the array for the state vector  */  
    var mti ;  
    var seed ;  
    var returnLength ;  
    var maxSize ;  
    var returnArray = new Array();




    /* initializes mt[N] with a seed */  
    function init_genrand($seed)
    {
        mt[0]= $seed & 0xffffffff;

        for (mti=1; mti<N; mti++) {
            mt[mti] = (1812433253 * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);
            mt[mti] &= 0xffffffff;
            /* for >32 bit machines */


        }
    }

    /* initialize by an array with array-length */
    /* init_key is the array for initializing keys */
    /* key_length is its length */
    /* slight change for C++, 2004/2/26 */
    //    void init_by_array(unsigned long init_key[], int key_length)  

    /* generates a random number on [0,0xffffffff]-interval */  
    function genrand_int32()     
    {
        var y ;
        var mag01 =[0x0, MATRIX_A];
        /* mag01[x] = x * MATRIX_A  for x=0,1 */

        if (mti >= N)
        {
            /* generate N words at one time */
            var kk ;

            if (mti == N+1)   /* if init_genrand() has not been called, */
                init_genrand(15475454); /* a default initial seed is used */

            for (kk=0;kk<N-M;kk++) {
                y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
                mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1];
            }
            for (;kk<N-1;kk++) {
                y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
                mt[kk] = mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1];
            }
            y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK);
            mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1];

            mti = 0;
        }

        y = mt[mti++];

        /* Tempering */
        y ^= (y >> 11);
        y ^= (y << 7) & 0x9d2c5680;
        y ^= (y << 15) & 0xefc60000;
        y ^= (y >> 18);
    //  trace("y: "+y);
        return y;
    }

    /* generates a random number on [0,0x7fffffff]-interval */  
    function genrand_int31()     
    {
        return (genrand_int32()>>1);
    }
var-genu-random;
函数shuffledeck()
{
跟踪(“shufledeck”);
gen_random=新数组();
gen_random=新数组();
对于(i=0;i 30))+mti);
mt[mti]&=0xffffffff;
/*对于>32位机器*/
}
}
/*由具有数组长度的数组初始化*/
/*init_key是用于初始化密钥的数组*/
/*键的长度是它的长度*/
/*轻微变化为C++,2004/2/26 */
//void init_by_数组(无符号长init_键[],int键长度)
/*在[0,0xffffffff]-间隔*上生成一个随机数
函数genrand_int32()
{
变量y;
var mag01=[0x0,矩阵_A];
/*对于x=0,1,mag01[x]=x*矩阵_A*/
如果(mti>=N)
{
/*一次生成N个单词*/
var-kk;
如果(mti==N+1)/*如果未调用init_genrand()*/
init_genrand(15475454);/*使用默认初始种子*/
对于(kk=0;kk>1)^mag01[y&0x1];
}
对于(;kk>1)^mag01[y&0x1];
}
y=(mt[N-1]和上|掩码)|(mt[0]和下|掩码);
mt[N-1]=mt[M-1]^(y>>1)^mag01[y&0x1];
mti=0;
}
y=mt[mti++];
/*回火*/
y^=(y>>11);
y^=(y 18);
//轨迹(“y:+y”);
返回y;
}
/*在[0,0x7fffffff]-间隔*上生成一个随机数
函数genrand_int31()
{
返回(genrand_int32()>>1);
}
任何帮助都将受到感谢


PS:我试图说服他们,通过重新设定int_genrand()函数的种子,并获得输出,但它损害了随机性的可预测性

如果您试图洗牌一副牌,我发现这个函数很有用:

function fisherYates (myArray) {
  var i = myArray.length;
   while ( i-- ) {
     var j = Math.floor( Math.random() * ( i + 1 ) );
     var tempi = myArray[i];
     var tempj = myArray[j];
     myArray[i] = tempj;
     myArray[j] = tempi;
  }
}
用法:

myArray = [1,2,3,4,5];
fisherYates(myArray);

内置的Math.random()有什么问题?@Smolniy它的一副牌,我需要洗牌。在这里我们不能使用math.random(),所以我使用MT算法来获取RNG值你说“重新播种int\u genrand()会影响随机性的可预测性”。对我来说,无论你想要可预测的随机数(你现在得到的结果)还是不想要(你似乎想要的),这与我在后面的阶段中要使用的相同,但是,在
Math.random()
函数的位置,我需要使用我上面提到的函数,即
shuffle()
函数。您好@danjp,@Smolniy,我想我已经得到了输出,只要保持行
init_genrand(15475454)函数外部(使其成为全局)请让我知道,我的方法是否正确,谢谢。我不确定我是否正确理解该问题。(在问题中)在main.asc中调用
shuffledNumbers()
,但在shuffle.asc中没有名为
shuffledNumbers
的函数。但通常,当您将随机生成器与seed函数一起使用时,在使用生成器之前,需要使用当前日期作为参数调用init seed函数。也许在您的情况下调用
init_genrand((new Date()).getTime())将解决此问题。