Class: Starter::Random::DiscreteSequence
- Defined in:
- lib/starter/random.rb
Instance Attribute Summary collapse
-
#distrib ⇒ Object
readonly
Returns the value of attribute distrib.
Attributes inherited from Sequence
Instance Method Summary collapse
-
#initialize(opt = {}) ⇒ DiscreteSequence
constructor
A new instance of DiscreteSequence.
- #next ⇒ Object
Methods inherited from Sequence
random_pool_seed, random_seed, serial_count
Constructor Details
#initialize(opt = {}) ⇒ DiscreteSequence
Returns a new instance of DiscreteSequence.
205 206 207 208 209 210 211 212 213 214 215 |
# File 'lib/starter/random.rb', line 205 def initialize opt = {} super @distrib = opt[:distrib] || { 0 => 1.0 } sum = @distrib.inject(0) {|sum, (pt, prob)| sum + prob} sum = sum.to_f # so division is ok @distrib.keys.each do |point| @distrib[point] /= sum end end |
Instance Attribute Details
#distrib ⇒ Object (readonly)
Returns the value of attribute distrib.
203 204 205 |
# File 'lib/starter/random.rb', line 203 def distrib @distrib end |
Instance Method Details
#next ⇒ Object
217 218 219 220 221 222 223 224 225 226 227 228 229 |
# File 'lib/starter/random.rb', line 217 def next loop do r = super @distrib.each do |point, probability| if r < probability return point end r -= probability end # repeat if failed to get a result (due to floating point imprecision) end ## this would be faster using an rbtree end |