在PHP中计算赔率限制

时间:2012-05-02 09:19:23

标签: php random probability probability-theory

在PHP中,如果我使用传送带构建工厂检查程序,其中表单上的弹出列表框为100%(不检查 - 让所有通过)到0%(检查所有内容),有什么功能到计算其中一个小部件何时到期检查?

一些额外的信息 - 标签上写着“让[x%]小部件经过检查而无需检查”。

除此之外,我们如何测试您的算法以证明它是正确的?例如,值为100%,运行99999次,应该不显示检查。值99%,运行99999次,如果重复运行,应该在蓝色月亮中显示一次检查。值为0%,运行99999次,应该显示所有99999小部件被发送到检查。

编辑:一位同事说我的赔率和概率在这里混淆了。她认为我在描述概率?

无论如何,我尝试将此代码作为测试,但除了100和50到1之外,它没有做任何事情。然而,1-49表现得像50,而51到100表现得像100。

<?php

$nChance = @ $argv[1];
$nChance = intval($nChance);

for ($i = 1; $i <= 999999; $i++) {
  $nTest = rand(1,floor(100/$nChance));
  if (!($nTest == 1)) {
    die("INSPECT! i($i) rand($nTest) chance($nChance)\n");
  }
}

然后我尝试了这种变化,但也失败了,因为它只是一直说INSPECT。

<?php

$nChance = @ $argv[1];
$nChance = intval($nChance);

for ($i = 1; $i <= 999999; $i++) {
  $nTest = rand(0,100);
  if (!($nTest < $nChance)) {
    die("INSPECT! i($i) rand($nTest) chance($nChance)\n");
  }
}

1 个答案:

答案 0 :(得分:1)

$nChance = 5; // % chance of inspection
$x       = 1; // number of seconds between products passing inspection point
while ( isLineRunning() )
{
    if( mt_rand(1,100) <= $nChance )
    {
        echo "INSPECT ITEM!";
    }
    sleep( $x );
};

这将在线路运行时每隔'x'秒检查一次。

你的同事是正确的,但出于你的目的,你是根据一个随机数是否小于或等于(在这种情况下)5作出决定,如果真正随机(它不是这样产生的话)应该在您选择任何给定项目时提供20%的机会。

相关问题