Class: Distem::Events::EventGenerator
- Inherits:
-
Event
- Object
- Event
- Distem::Events::EventGenerator
- Defined in:
- lib/distem/events/eventgenerator.rb
Overview
Class to generate events from a probabilist distribution
Instance Method Summary (collapse)
- - (Object) get_next_date
-
- (EventGenerator) initialize(resource_desc, change_type, generator_desc, event_value = nil, random_generators = nil)
constructor
A new instance of EventGenerator.
- - (Object) trigger(event_list, date)
Methods inherited from Event
Constructor Details
- (EventGenerator) initialize(resource_desc, change_type, generator_desc, event_value = nil, random_generators = nil)
Returns a new instance of EventGenerator
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/distem/events/eventgenerator.rb', line 8 def initialize(resource_desc, change_type, generator_desc, event_value = nil, random_generators = nil) @generator_desc = generator_desc @random_generators = {} @random_generators = random_generators if random_generators if change_type == 'churn' event_value = 'down' unless event_value if @generator_desc['date'] if @generator_desc['availability'] or @generator_desc['unavailability'] raise "You cannot give a date generator and an availability or unavailability generator" end # same distribution for avaibility and unavailability time @generator_desc['availability'] = @generator_desc['date'] @generator_desc['unavailability'] = @generator_desc['date'] @generator_desc['date'] = nil else unless @generator_desc['availability'] and @generator_desc['unavailability'] raise "You must give availability and unavailability generators" end end @random_generators['availability'] = RngStreamRandomGenerator.new unless @random_generators['availability'] @random_generators['unavailability'] = RngStreamRandomGenerator.new unless @random_generators['unavailability'] else raise "No description given for the date generator" unless @generator_desc['date'] raise "No description given for the value generator" unless @generator_desc['value'] @random_generators['value'] = RngStreamRandomGenerator.new unless @random_generators['value'] event_value = get_random_value('value') if change_type == 'power' # For this event, non-integer values are accepted only if between 0 and 1 event_value = event_value.round if event_value > 1 else #No integer value allowed - As 0 means infinity in some cases, we only start from 1 event_value = event_value.round event_value = 1 if event_value == 0 end end super(resource_desc, change_type, event_value) @random_generators['date'] = RngStreamRandomGenerator.new unless @random_generators['date'] end |
Instance Method Details
- (Object) get_next_date
58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/distem/events/eventgenerator.rb', line 58 def get_next_date if @change_type == 'churn' if @event_value == 'down' # The resource will be down on the next trigger; for the moment, it should be up. # So we use the availability distribution to compute the next date return get_random_value('availability') else return get_random_value('unavailability') end else return get_random_value('date') end end |
- (Object) trigger(event_list, date)
72 73 74 75 76 77 78 79 80 |
# File 'lib/distem/events/eventgenerator.rb', line 72 def trigger(event_list, date) super generated_date = get_next_date if generated_date next_event = get_next_event next_date = generated_date + date event_list.add_event(next_date, next_event) end end |