Language agnostic 分裂概率

Language agnostic 分裂概率,language-agnostic,random,math,probability,Language Agnostic,Random,Math,Probability,我用PHP编写了以下代码,效果很好(每次运行时都会返回大约10个结果): 函数GetAboutTenRandomNumbers() { $result=array(); 对于($i=0;$i

我用PHP编写了以下代码,效果很好(每次运行时都会返回大约10个结果):

函数GetAboutTenRandomNumbers() { $result=array(); 对于($i=0;$i<240;$i++) { 如果(机会(10240)==true) { $result[]=$i; } } 回声'; 打印(结果); 回声'; 返回$result; } Chance()函数如下所示:

function GetAboutTenWeightedRandomNumbers()
{
    $result = array();

    // Chance * 10%
    for ($i = 0; $i < 60; $i++)
    {
        if (Chance(10 * 0.1, 240) === true)
        {
            $result[] = $i;
        }
    }

    // Chance * 20%
    for ($i = 60; $i < 120; $i++)
    {
        if (Chance(10 * 0.2, 240) === true)
        {
            $result[] = $i;
        }
    }

    // Chance * 30%
    for ($i = 120; $i < 180; $i++)
    {
        if (Chance(10 * 0.3, 240) === true)
        {
            $result[] = $i;
        }
    }

    // Chance * 40%
    for ($i = 180; $i < 240; $i++)
    {
        if (Chance(10 * 0.4, 240) === true)
        {
            $result[] = $i;
        }
    }

    echo '<pre>';
    print_r($result);
    echo '</pre>';

    return $result;
}
函数机会($Chance,$universe=100)
{
$chance=abs(intval($chance));
$universe=abs(intval($universe));

if(mt_rand(1,$universe)如果您希望
DoIt_02()
返回与
DoIt_01()相同数量的结果
,那么是的,你犯了一个基本的数学错误。你的部分的概率权重加起来等于10意味着什么,因为加权概率没有应用到整个0..240集。如果你在0..240而不是0..59、60..119等上运行每个限制概率,它将返回类似的结果


顺便说一句,您的
Chance()
函数在这方面稍有偏差,为了获得您似乎在尝试的概率,如果您希望
DoIt_02()
返回与
DoIt_01()相同数量的结果,那么它应该是
mt_rand(1,$universe)
,那么是的,你犯了一个基本的数学错误。你的部分的概率权重加起来等于10意味着什么,因为加权概率没有应用到整个0..240集。如果你在0..240而不是0..59、60..119等上运行每个限制概率,它将返回类似的结果

顺便说一句,您的
Chance()
函数在这方面有点不正确,要获得您似乎在尝试的概率,它应该是
mt_rand(1,$universe)确实是

在第二次循环中,每次循环给它60个值,而不是240个值,因此在该循环中得到的值约为预期值的四分之一。将每个值运行到240,然后使用模60来获得每个循环中要查找的值范围。

确实如此


在第二次循环中,每次循环给它60个值,而不是240个值,因此在该循环中得到的值约为预期值的四分之一。将每个值运行到240,然后使用模60获得每个循环中要查找的值的范围。

确定“DoIt”是一个非常具有描述性的函数名吗?当时我想没有更好的了,如果您觉得麻烦,可以更改它。=)GetAboutEnterAndomNumbers()和GetAboutEnterWaterdAndomNumbers()如何?您确定“DoIt”是一个非常具有描述性的函数名吗?当时我脑子里没有比这更好的名字了,如果你觉得麻烦的话,可以修改它。=)GetAboutEnterAndomNumbers()和GetAboutEnterWaterdAndomNumbers()怎么样?谢谢你,特别是Chance()警告-直到你提到它才注意到。谢谢你,特别是Chance()警告-直到你提到它,它才注意到。
function Chance($chance, $universe = 100)
{
    $chance = abs(intval($chance));
    $universe = abs(intval($universe));

    if (mt_rand(1, $universe) <= $chance)
    {
        return true;
    }

    return false;
}
function GetAboutTenWeightedRandomNumbers()
{
    $result = array();

    // Chance * 10%
    for ($i = 0; $i < 60; $i++)
    {
        if (Chance(10 * 0.1, 240) === true)
        {
            $result[] = $i;
        }
    }

    // Chance * 20%
    for ($i = 60; $i < 120; $i++)
    {
        if (Chance(10 * 0.2, 240) === true)
        {
            $result[] = $i;
        }
    }

    // Chance * 30%
    for ($i = 120; $i < 180; $i++)
    {
        if (Chance(10 * 0.3, 240) === true)
        {
            $result[] = $i;
        }
    }

    // Chance * 40%
    for ($i = 180; $i < 240; $i++)
    {
        if (Chance(10 * 0.4, 240) === true)
        {
            $result[] = $i;
        }
    }

    echo '<pre>';
    print_r($result);
    echo '</pre>';

    return $result;
}