UniformInt产生重复的数字

时间:2018-09-04 17:15:35

标签: gams-math

几天前,我Generate 100 data randomly, or select if it is possible问了这个问题。现在,当我想从一组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个随机数。 第二次选择20次,第三次选择30次,...,第十次选择100次。

此外,我每次都需要选择新的数字, 我的意思是,第二次选择的数字必须与第一次选择的数字不同。

但是UniformInt每次选择重复的数字。 例如,选择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个结果为:

 * 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

该如何避免每次重复输入?为什么此函数不能产生不同的数字?

1 个答案:

答案 0 :(得分:0)

我搜索并在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;