如何按给定百分比创建概率?

时间:2012-11-12 10:25:13

标签: c# probability probability-theory

我正在尝试为游戏创建基于百分比的概率。例如。如果一个项目有45%的几率遭到致命一击,那就必须意味着它有50个点击中的45个是至关重要的。

首先,我尝试使用一个简单的解决方案:

R = new Random();
int C = R.Next(1, 101);
if (C <= ProbabilityPercent) DoSomething()

但是在100次迭代中有可能例如48%,100分中40-52。 同样适用于49,50,51。 所以,这些“百分比”之间没有区别。

问题是如何设置例如百分比50,并且随机获得严格的50分100? 对于罕见项目查找的概率而言,有机会增加查找项目的机会是非常重要的。因此,1%的buff将是敏感的,因为现在它不是。

抱歉我的英语不好。

4 个答案:

答案 0 :(得分:9)

你只需要考虑重复滚动的均匀分布。

你不能超过100卷,因为强迫它产生完全 45 不会是随机的。通常,这种卷应该表现出“缺乏记忆”。例如,如果你掷骰子寻找一个6,你有六分之一的机会。如果你滚动它5次,并且没有得到6 - 那么:在下一次滚动中获得6的机会不是1.它仍然是1中的6。因此,你只能看看它遇到了多少在对统计数量较多的事件进行摊销时,你的期望是...... 100,000说。

基本上:你当前的代码很好。如果用户知道(因为他们已经达到55次没有关键),接下来的45次点击必须是关键的,那么它就不再是随机的,他们可以对系统进行游戏。

也; 45%的致命一击几率似乎有点高; p

答案 1 :(得分:4)

  

我试图为游戏创建基于百分比的概率。例如。   如果一个物品有45%的几率受到重击,那就必须意味着它是45   100次点击将是至关重要的。

不,那不是真的。你完全错过了概率概念。你不想要基于百分比的概率&#34;,你想要一个基于百分比的随机分布100个样本&#34;。

你需要的是一系列事件&#34;其中45个&#34; crytical&#34;其中55个&#34;非哭泣&#34;。一旦你从行李中挑选了一个事件,你只能在下一次选择剩下的事件。

你可以这样建模:

Initialize two integer variables Crytical and NonCrytical so that they sum exactly 100 according to the desired percetnages.

Get a random value from 1 to Crytical+NonCrytical

If the random value is less than the value of Crytical, let you hit be crytical and:

   Crytical = Crytical -1

Else, let your hit be non-crytical

   NonCrytical = NonCrytical-1

End If

Repeat until Crytical+NonCrytical = 0

答案 2 :(得分:2)

由于我不是C#的专家,我将使用C ++函数轻松但仍适用于任何语言。

rand() - 随机数生成器。

//33.34%
double probability = 0.3334;

//divide to get a number between 0 and 1
double result = rand() / RAND_MAX;
if(result < probability)
   //do something

我已经使用这种方法来创建非常大的渗透网格,并且它对精度值非常有用。

答案 3 :(得分:0)

问题是,对于Random,您可能只想初始化此类一次。

这是因为Random使用系统时间作为生成随机数的种子。 如果您的循环非常快,则可能会发生多个Random-instances使用相同的种子并因此生成相同的数字。

如果您怀疑发生这种情况,请检查生成的数字。

除此之外,Randomness固有的是它不会给你准确的结果。 这意味着即使有50/50的可能性,100个“头”或“尾巴”的序列也会发生100次“头”。

你唯一能做的就是创建一次Random-instance并使用结果;否则你不应该使用随机。