0

この質問のタイトルがひどいことを認めなければなりません...最良の説明を得ることができませんでした。例を挙げることができるかどうか見てみましょう。

一度に私のソフトウェアをサーバーにインストールした約 2700 人の顧客がいます。1500かそこらがまだそうです。基本的に私が行っているのは、ソフトウェアをアンインストールした人やソフトウェアに問題がある人を除外するための自動診断です。現在、私たちのソフトウェア用にウェブサイトをフェッチし、ヘッダー リターンを探している cURL があります。

返される 8 つの異なるステータスがあります。

緑 - すべてが動作します (通常、0.5 ~ 2 秒という非常に短い時間)
赤 - ソフトウェアが見つかりません (通常、最長で 5 ~ 15 秒)
青 - ソフトウェアが見つかりましたが、アクティブ化されていません (通常、3 ~ 9 秒)
黄 - サーバー IP の不一致 (通常、
オレンジ - サーバー IP の不一致とソフトウェア タイプの誤り (通常 5 - 10 秒)紫
- アクティベーション キーが正しくありません (通常 2 秒以内)
黒 - ドメインが 404 を返します - 存在しません (通常 1 秒以内)
UNK -接続に失敗しました (通常はロード バランサーが原因です -- 非常にまれです) (まだこれに対処したことはありません)

基本的には、cronJob がドメインと製品タイプを取得してプロセスを開始します。次に、ドメインを cURL し、上記のステータス カラーの循環を開始します。

これが発生している間、結果を返す 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

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

私はそれぞれのアカウントを考慮して、それぞれにかかる時間の間、アレイの構築を開始します。次に、配列はこの計算を実行するため、axおよびyの時間セットが作成されます。最後に、predict関数を使用して配列を実行します。

    /** 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個のアカウントで約.003の違いがあり、2700個のアカウントで約2.6の違いがあります。次は、精度を計算することです。

男とギャルを試してくれてありがとう

于 2012-10-26T17:33:48.023 に答える