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;
几天前我问过这个问题
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;