diff options
Diffstat (limited to 'estimation-scripts/EstimationResults.rb')
-rw-r--r-- | estimation-scripts/EstimationResults.rb | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/estimation-scripts/EstimationResults.rb b/estimation-scripts/EstimationResults.rb deleted file mode 100644 index 01eedcc..0000000 --- a/estimation-scripts/EstimationResults.rb +++ /dev/null @@ -1,100 +0,0 @@ -require 'Estimators' -require 'Sample' - -class EstimationResults - - attr_reader :estimator - - def initialize(estimator, samples) - @samples = samples - @totalTime = samples.keys.max - @totalSize = @samples[@totalTime].bytesDownloaded + @samples[@totalTime].bytesLeft - @estimator = estimator - - @maxError = nil - @estimations = nil - @absoluteErrors = nil - @relativeErrors = nil - @rootMeanSquareErrorRelative = nil - end - - def getRootMeanSquareErrorRelative - if @rootMeanSquareErrorRelative == nil - relativeErrors = getRelativeErrors - @rootMeanSquareErrorRelative = 0.0 - relativeErrors.each_value do |x| - @rootMeanSquareErrorRelative += x**2 - end - @rootMeanSquareErrorRelative = Math.sqrt( @rootMeanSquareErrorRelative / relativeErrors.size ) - end - return @rootMeanSquareErrorRelative - end - - # returns the root mean square error for a specific interval of the download - # left and right must be floats between 0.0 (no bytes downloaded, start of download) and 1.0 (download complete), right must be greater than left - - def getRootMeanSquareErrorRelative(left, right) - relativeErrors = getRelativeErrors - rmser = 0.0 - - n = 0 - @samples.keys.each do |x| - percentage = @samples[x].bytesDownloaded.to_f / @totalSize - if percentage >= left and percentage <= right - rmser += relativeErrors[x]**2 - n += 1 - end - end - - rmser = Math.sqrt( rmser / n ) - - return rmser - end - - def getRelativeErrors - if @relativeErrors == nil - @relativeErrors = Hash.new - absoluteErrors = getAbsoluteErrors - absoluteErrors.keys.sort.each do |time| - timeLeft = @totalTime - time; - @relativeErrors[time] = absoluteErrors[time].abs.to_f / timeLeft - @relativeErrors[time] = @maxError if @maxError != nil and @relativeErrors[time] > @maxError - end - end - return @relativeErrors - end - - def setMaxError(maxError) - if maxError != @maxError - @maxError = maxError - @relativeErrors = nil - @rootMeanSquareErrorRelative = nil - end - end - - def getAbsoluteErrors - if @absoluteErrors == nil - @absoluteErrors = Hash.new - estimations = getEstimations - estimations.keys.sort.each do |time| - @absoluteErrors[time] = @estimations[time] - (@totalTime - time) - end - end - - return @absoluteErrors - end - - def getEstimations - - if @estimations == nil - @estimations = Hash.new - @samples.values.sort.each do |sample| - @estimator.process(sample) - @estimations[sample.time] = @estimator.estimate - end - end - - return @estimations - end -end - |