2012-10-24 100 views
0

我不得不承認這個問題的標題很糟糕......我無法得到最好的描述。讓我看看我能否舉一個例子。用不同長度的變量計算剩餘時間

我的軟件一次約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

回答

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

我把每個帳戶,並開始建立一個數組,每個人花費的時間量。數組然後運行這個計算,所以它會建立一個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的區別。接下來將計算精確度。

感謝您試用球員和加爾斯