Class: Eventsims::Generate
- Inherits:
-
Object
- Object
- Eventsims::Generate
- Defined in:
- lib/eventsims/randgen.rb
Overview
Generating random outcomes and probabilities
Instance Method Summary collapse
-
#getcum ⇒ Object
Returns a cummulative probability list of all items in its argument.
-
#getprob ⇒ Object
Returns a probability list of all items in its argument.
-
#initialize(*args) ⇒ Generate
constructor
A new instance of Generate.
-
#occur ⇒ Object
# Returns the number of times the unique item is found.
-
#outcome ⇒ Object
Returns the outcome.
-
#unique ⇒ Object
Returns the unique outcome.
Constructor Details
#initialize(*args) ⇒ Generate
Returns a new instance of Generate.
7 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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/eventsims/randgen.rb', line 7 def initialize(*args) ''' Initialisation of all values''' # Starting variables that change result depending on the if statements start, stop, jump = 0, 10, 1 @@outcome, @@occur, @@unique, @@problist, @@cumprob = [], [], [], [], [] amount = (2..20).step(jump).to_a.sample amount.times{@@outcome << (start..stop).step(jump).to_a.sample} # If statements to run different functions if args.size == 0 @@outcome = @@outcome elsif args.size == 1 if args[0].is_a?(Integer) amount, @@outcome = args[0], [] amount.times{@@outcome << (start..stop).step(jump).to_a.sample} elsif args[0] == "r" @@outcome.sort!{|x,y| y<=>x} elsif args[0] == "s" @@outcome.sort! else raise "\nInvalid argument: Use (amount, 'r' or 's')" end elsif args.size == 2 if args.all?{|x| x.is_a?(Integer)} start, stop, @@outcome = args[0], args[1], [] amount.times{@@outcome << (start..stop).step(jump).to_a.sample} elsif args[1] == "r" amount, @@outcome = args[0], [] amount.times{@@outcome << (start..stop).step(jump).to_a.sample} @@outcome.sort!{|x,y| y<=>x} elsif args[1] == "s" amount, @@outcome = args[0], [] amount.times{@@outcome << (start..stop).step(jump).to_a.sample} @@outcome.sort! else raise "\nInvalid argument: Use (start, stop) or (amount, 'r' or 's')'" end elsif args.size == 3 if args.all?{|x| x.is_a?(Integer)} start, stop, amount, @@outcome = args[0], args[1], args[2], [] amount.times{@@outcome << (start..stop).step(jump).to_a.sample} elsif args[2] == "r" start, stop, @@outcome = args[0], args[1], [] amount.times{@@outcome << (start..stop).step(jump).to_a.sample} @@outcome.sort!{|x,y| y<=>x} elsif args[2] == "s" start, stop, @@outcome = args[0], args[1], [] amount.times{@@outcome << (start..stop).step(jump).to_a.sample} @@outcome.sort! else raise "\nInvalid argument: Use (start, stop, amount) or (amount, 'r' or 's')'" end elsif args.size == 4 if args.all?{|x| x.is_a?(Integer)} start, stop, jump, amount, @@outcome = args[0], args[1], args[2], args[3], [] amount.times{@@outcome << (start..stop).step(jump).to_a.sample} elsif args[3] == "r" start, stop, amount, @@outcome = args[0], args[1], args[2], [] amount.times{@@outcome << (start..stop).step(jump).to_a.sample} @@outcome.sort!{|x,y| y<=>x} elsif args[3] == "s" start, stop, amount, @@outcome = args[0], args[1], args[2], [] amount.times{@@outcome << (start..stop).step(jump).to_a.sample} @@outcome.sort! else raise "\nInvalid argument: Use (start, stop, step, amount) or \n\t(start, stop, amount, 'r' or 's')'" end elsif args.size == 5 if args[4] == "r" start, stop, jump, amount, @@outcome = args[0], args[1], args[2], args[3], [] amount.times{@@outcome << (start..stop).step(jump).to_a.sample} @@outcome.sort!{|x,y| y<=>x} elsif args[4] == "s" start, stop, jump, amount, @@outcome = args[0], args[1], args[2], args[3], [] amount.times{@@outcome << (start..stop).step(jump).to_a.sample} @@outcome.sort! else raise "\nInvalid argument: Use (start, stop, step, amount, 'r' or 's')'" end end #Generates a set and times of occurrence ofoutcome @@outcome.each{|item| @@unique << item unless @@unique.include?(item)} result = @@outcome.each_with_object(Hash.new(0)) { |word, counts| counts[word] += 1 } result.each{|x,y| @@occur << y} end |
Instance Method Details
#getcum ⇒ Object
Returns a cummulative probability list of all items in its argument
124 125 126 127 128 129 130 131 |
# File 'lib/eventsims/randgen.rb', line 124 def getcum() '''Returns a cummulative probability list of all items in its argument''' increase, probability, cumlist = 0, getprob(), [] probability.each{|i| increase +=i cumlist << increase.round(4) } cumlist[-1] = 1.0 #makes sure the last value is 1.0 return cumlist end |
#getprob ⇒ Object
Returns a probability list of all items in its argument
115 116 117 118 119 120 121 |
# File 'lib/eventsims/randgen.rb', line 115 def getprob() probability = [] '''Returns a probability list of all items in its argument''' @@occur.each{|i| probability << (i*1.0/@@outcome.size).round(4)} return probability end |
#occur ⇒ Object
# Returns the number of times the unique item is found
146 147 148 149 |
# File 'lib/eventsims/randgen.rb', line 146 def occur '''Returns the number of times the unique item is found''' return @@occur end |
#outcome ⇒ Object
Returns the outcome
134 135 136 137 |
# File 'lib/eventsims/randgen.rb', line 134 def outcome() ''' Returns a generated outcome ''' return @@outcome end |
#unique ⇒ Object
Returns the unique outcome
140 141 142 143 |
# File 'lib/eventsims/randgen.rb', line 140 def unique() '''Returns the unique outcome''' return @@unique end |