uniformInt 产生重复数

uniformInt produce duplicate number

几天前我问过这个问题。现在,当我想从一组 i /1*300/ 中随机选择 10 个数字时。 我使用此代码:

 Set       I     /0*300/
      picks /p1*p10/;
 Scalar    pick;
Parameter MyParameter(I);

 MyParameter(I) = 0;
 loop(picks,
  pick = uniformInt(1, card(I));

 * Make sure to not pick the same one twice
  while(sum(I$(pick=ord(I)),MyParameter(I))=1,
    pick = uniformInt(1, card(I))
    Display 'here';
   );

   MyParameter(I)$(pick=ord(I))=1;
 );
 Display MyParameter;

我想运行这个代码几次,我想第一次选择10个随机数。 第二次20selection,第三次30selection,...,第十次100selection。

此外,我每次都需要select新号码, 我的意思是,第二次 selected 的数字必须不同于第一次 selected 的数字。

但uniformInt每次,selects重复数字。 例如,select离子10和20的结果如下:

* for      picks /p1*p10/;
 21  1.000,    52  1.000,    68  1.000,    88  1.000,    91  
 1.000,    106 1.000
 151 1.000,    166 1.000,    254 1.000,    258 1.000

20 selected 的结果是:

 * for      picks /p1*p20/;

 21  1.000,    40  1.000,    49  1.000,    52  1.000,    68  
  1.000,    76  1.000
  88  1.000,    91  1.000,    106 1.000,    132 1.000,    151 
  1.000,    166 1.000
  175 1.000,    193 1.000,    202 1.000,    230 1.000,    254 
   1.000,    258 1.000
  299 1.000

21,52,68,88,91,106,151,166,254,258第二次重复了

我应该怎么做才能避免每次重复数字?为什么这个函数不产生不同的数字?

我搜索并在 https://support.gams.com/gams:random_number_generator_in_gams

中找到了我的答案

我想要以下代码:

  Set       I     /0*300/
      picks /p1*p10/;
  Scalar    pick;
  Parameter MyParameter(I);

  MyParameter(I) = 0;
  execseed = 1 + gmillisec(jnow); 
   loop(picks,
     pick = uniformInt(1, card(I));

   * Make sure to not pick the same one twice
    while(sum(I$(pick=ord(I)),MyParameter(I))=1,
     pick = uniformInt(1, card(I))

      );

    MyParameter(I)$(pick=ord(I))=1;
     );
    Display MyParameter;