以下是我要做的事情:
我有一堆物品,让我们说从A到J,总共10件物品。现在我想生成总共20个平局,在每个平局中我需要以上10个项目中的3个项目。现在,如果第一个项目是A,则它不应出现在第二个和第三个项目中,而不管其分配的概率。
让我们说:
A - 4%
B - 20%
C - 1%
D - 16%
E - 5%
F - 7%
G - 3%
H - 21%
我 - 6%
J - 17%
现在,我需要根据他们分配的概率在每次抽奖中从上面的列表中随机生成3个项目,但是假设第一个项目是B,第二个和第三个项目不应该是B.我应该重复相同的20抽奖的过程。
答案应该是这样的:
1st Item 2nd Item 3rd Item
1st Draw B D J
2nd Draw D E F
3rd Draw B H G
应根据指定的概率生成数字。
提前致谢。
答案 0 :(得分:2)
对于公式路线:
您需要构建两个辅助列。第一个是总计
我把你的价值放在G1:H10
然后在I1中我放了1
在I2中我放了:
=I1+(H1*100)
并复制下来:
然后我创建了第二个帮助器。在K1中,我把:
=INDEX(G:G,MATCH(ROW(1:1),I:I))
并向下复制了100行。
这创造了概率的动态范围。
然后在B2中我放了:
=INDEX($K:$K,AGGREGATE(15,6,ROW($1:$100)/(COUNTIF($A2:A2,$K$1:$K$100)=0),RANDBETWEEN(1,100-SUMPRODUCT(COUNTIF($A2:A2,$K$1:$K$100)))))
复制三次,尽可能多地下载:
注意事项:
20.513%
。 1%
。100%
答案 1 :(得分:1)
根据本网站(https://www.mrexcel.com/forum/excel-questions/372071-random-numbers-assigned-probabilities.html)#7的帖子,这是另一种方式。您可以使用累计值并进行类似的测试。
添加helper column C
并使用以下公式:=SUM($B$2:B2)
,然后向下拖动。
在cell F2
上,您可以输入以下公式:
=INDEX($A$2:$A$11,COUNTIF($C$2:$C$11,"<="&RAND())+1)
它基本上是使用RAND
函数对行进行计数,并添加1(标题行)来选择项目。试一试,让我知道。
答案 2 :(得分:0)
这里结合了前两个答案中的方法。像ian0411的答案一样,它利用了累积概率分布。它还利用Scott Craner的技术构建0和1的数组,表明可能的结果(A,...,J)与已经绘制的结果之间的匹配。
单元格P2
中的公式为
=INDEX($A$2:$A$11,1+IFERROR(MATCH(RAND(),MMULT($D$2:$M$11,($B$2:$B$11)*(1-COUNTIF($O2:O2,$A$2:$A$11))/SUMPRODUCT($B$2:$B$11,(1-COUNTIF($O2:O2,$A$2:$A$11))))),0))
并将其复制到单元格Q2
和R2
中,然后在每次抽奖时向下拖动。
$B$2:$B$11
中的概率分布将当前抽取中任何先前绘制的项目的元素替换为零(对于如何实现这一点,向Scott提供了帽子提示)。调整后的分布通过kludgy矩阵乘法运算(无法想到更优雅的方法)转换为累积格式,并归一化为&#34;适当的&#34;累积分布除以其元素之和。我没有使用=1+COUNTIF(cumdist,"<="&RAND())
(其中cumdist
是累积分布)来挑选与随机变量匹配的cumdist
元素,而是使用了=1+IFERROR(MATCH(RAND(),cumdist),0)
的替代方法。