0

我不得不承认这个问题的标题很糟糕......我无法得到最好的描述。让我看看能不能举个例子。

我有大约 2700 名客户一次将我的软件安装在他们的服务器上。1500左右还是可以的。基本上,我所做的是自动诊断,以帮助清除已卸载或对软件有问题的人,供我们协助。目前我们有一个 cURL 为我们的软件获取他们的网站并寻找标题返回。

我们有 8 种不同的状态返回

绿色 - 一切正常(通常很快 0.5 - 2 秒)
红色 - 未找到软件(通常最长 5 - 15 秒)
蓝色 - 找到但未激活的软件(通常为 3 - 9 秒)
黄色 - 服务器 IP 不匹配(通常1 - 3 秒)
橙色 - 服务器 IP 不匹配和错误的软件类型(通常 5 - 10 秒)
紫色 - 激活密钥不正确(通常在 2 秒内)
黑色 - 域返回 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, ":");

我可以对所有的绿色、红色、蓝色等进行计数...并计算每种颜色的平均时间,然后在平均时间内使用它,尽管我不相信这会产生更好的结果.

由于时代差异如此之大,有什么建议将不胜感激?

谢谢,杰夫

4

1 回答 1

1

好的,我相信我已经想通了。我必须创建一个类,以便可以计算一段时间内的单个回归。

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

我记下每个帐户并开始构建一个数组,计算每个帐户所需的时间。然后数组运行此计算,因此它将构建 ax 和 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 的差异。接下来是计算精度。

感谢您尝试男孩和女孩

于 2012-10-26T17:33:48.023 回答