【问题标题】:Calculating Odds Throttles in PHP在 PHP 中计算赔率节流阀
【发布时间】:2012-05-11 18:11:51
【问题描述】:

在 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");
  }
}

【问题讨论】:

  • 如果我错了,请纠正我,但您要求有人构建一个工作脚本并为您测试它。也许这会更好地发布在您为完成的工作付费的网站上?
  • 不,一点也不。 one liner 几乎可以工作,但是当有人做了类似“答案是 (mt_rand(1,100)

标签: php random probability probability-theory


【解决方案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 分之一的机会选择任何给定项目。

【讨论】:

  • 这和这个公式有什么不同吗? if ($nChance == 0){$bLetThrough = FALSE;}else{$bLetThrough=rand(1,round(100/$nChance)) == 1);}
  • 确实应该是 if( mt_rand(0,100)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2020-08-02
相关资源
最近更新 更多