用不同长度的变量计算剩余时间

问题描述:

我不得不承认这个问题的标题很糟糕......我无法得到最好的描述。让我看看我能否举一个例子。用不同长度的变量计算剩余时间

我的软件一次约2700个客户已安装在他们的服务器上。 1500左右仍然如此。基本上我正在进行的是Auto Diagnostics,它可以帮助清除已经卸载的软件或者软件有问题的人,以便我们提供协助。目前我们有一个cURL为我们的软件获取他们的网站并寻找一个头文件返回。

我们有返回

GREEN 8个不同的状态 - 一切正常(通常是相当快0.5 - 2秒)
RED - 软件未找到(通常最长为5 - 15秒)
BLUE - 软件发现,但没有被激活(通常为3 - 9秒)
黄色 - 服务器IP不匹配(通常为1 - 3秒)
ORANGE - 服务器IP不匹配和错误的软件类型(通常为5 - 10秒)
紫色 - 激活密钥不正确(通常在2秒内)
BLACK - 域名返回404 - 不再存在(通常是在第二)
UNK - 连接失败(通常是由于我们的负载平衡器 - 非常罕见)(从不反驳这还)

现在基本上会发生什么是一个cronJob将通过拉动域和产品类型来启动这个过程。然后它将卷曲域,并开始通过上面的状态颜色循环。

发生这种情况时,我们有一个返回结果的ajax页面,以便我们可以关注状态。主要问题是剩余时间如此不稳定以至于没有做出好的估计。这是当前数学:

# Number of accounts between NOW and when started 
$completedAccounts = floor($parseData[2]*($parseData[1]/100)); 

# Number of seconds between NOW and when started 
$completedTime = strtotime("now") - strtotime("$hour:$minute:$second"); 

# Avg number of seconds per account 
$avgPerCompleted = $completedTime/$completedAccounts; 

# Total number of remaining accounts to be scanned 
$remainingAccounts = $parseData[2] - $completedAccounts; 

# The total of seconds remaining for all of the remaining accounts 
$remainingSeconds = $remainingAccounts * $avgPerCompleted; 

$remainingTime = format_time($remainingSeconds, ":"); 

我可以对所有的绿色,红色,蓝色等创建一个个性化......做多久每种颜色呢,然后使用该组件的平均时间的平均尽管我不相信这会带来更好的结果。

随着时代的变化如此多变,任何建议都会感激不尽?

感谢, 杰夫

+0

因此,基本上,你需要把你多久了去了,并与你所期望的是平均响应结合起来,并拿出的剩余时间,合理估算? – Wug

+0

这听起来正确。虽然变量是非常可变的......如果这甚至是有道理的。 – SecureLive

+0

看来你应该只计算每种类型的预期点击次数,将它们乘以它们的平均时间,然后求和它们。或者,您可以并行执行这些检查,并节省很多时间。 – Wug

OK,我相信我已经想通了。我不得不创建一个班级,以便在一段时间内计算一次回归。

function calc() { 
     $n = count($this->mDatas); 
     $vSumXX = $vSumXY = $vSumX = $vSumY = 0; 

     //var_dump($this->mDatas); 
     $vCnt = 0; // for time-series, start at t=0<br /> 
     foreach ($this->mDatas AS $vOne) { 
      if (is_array($vOne)) { // x,y pair<br /> 
       list($x,$y) = $vOne; 
      } else { // time-series<br /> 
       $x = $vCnt; $y = $vOne; 
      } // fi</p> 
      $vSumXY += $x*$y; 
      $vSumXX += $x*$x; 
      $vSumX += $x; 
      $vSumY += $y; 
      $vCnt++; 
     } // rof 
     $vTop = ($n*$vSumXY – $vSumX*$vSumY); 
     $vBottom = ($n*$vSumXX – $vSumX*$vSumX); 
     $a = $vBottom!=0?$vTop/$vBottom:0; 
     $b = ($vSumY – $a*$vSumX)/$n; 

     //var_dump($a,$b); 
     return array($a,$b); 
    } 

我把每个帐户,并开始建立一个数组,每个人花费的时间量。数组然后运行这个计算,所以它会建立一个x和y时间集合。最后我通过预测函数运行数组。

/** given x, return the prediction y */ 
    function calcpredict($x) { 
     list($a,$b) = $this->calc(); 
     $y = $a*$x+$b; 
     return $y; 
    } 

我把静态值,所以你可以看到的结果:

$eachTime = array(7,1,.5,12,11,6,3,.24,.12,.28,2,1,14,8,4,1,.15,1,12,3,8,4,5,8,.3,.2,.4,.6,4,5); 
$forecastProcess = new Linear($eachTime); 
$forecastTime = $forecastProcess->calcpredict(5); 

这整个系统给了我关于10个账户0.003差异,2700年占约2.6的区别。接下来将计算精确度。

感谢您试用球员和加尔斯