Class: PredictabilityEngine::Simulators::MonteCarlo

Inherits:
Object
  • Object
show all
Defined in:
lib/predictability_engine/simulators/monte_carlo.rb

Constant Summary collapse

DEFAULT_TRIALS =
10_000

Class Method Summary collapse

Class Method Details

.how_many_will_be_done(days_to_forecast, historical_throughput, trials: DEFAULT_TRIALS) ⇒ Object



22
23
24
25
26
27
28
29
30
# File 'lib/predictability_engine/simulators/monte_carlo.rb', line 22

def self.how_many_will_be_done(days_to_forecast, historical_throughput, trials: DEFAULT_TRIALS)
  validate_and_run(historical_throughput, trials) do
    total_done = 0
    days_to_forecast.times do
      total_done += historical_throughput.sample
    end
    total_done
  end
end

.percentile(results, percentile_value) ⇒ Object



38
39
40
41
42
43
# File 'lib/predictability_engine/simulators/monte_carlo.rb', line 38

def self.percentile(results, percentile_value)
  return nil if results.empty?

  index = (results.size * percentile_value / 100.0).ceil - 1
  results[index]
end

.when_will_it_be_done(backlog_count, historical_throughput, trials: DEFAULT_TRIALS) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/predictability_engine/simulators/monte_carlo.rb', line 8

def self.when_will_it_be_done(backlog_count, historical_throughput, trials: DEFAULT_TRIALS)
  validate_and_run(historical_throughput, trials) do
    remaining = backlog_count
    days = 0

    while remaining.positive?
      remaining -= historical_throughput.sample
      days += 1
    end

    days
  end
end