几天前,我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
该如何避免每次重复输入?为什么此函数不能产生不同的数字?
答案 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;