Class: Musicality::RandomSampler

Inherits:
Object
  • Object
show all
Defined in:
lib/musicality/composition/util/random_sampler.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(vals, probs) ⇒ RandomSampler

Returns a new instance of RandomSampler.

Raises:

  • (ArgumentError)


5
6
7
8
9
10
11
12
13
14
15
# File 'lib/musicality/composition/util/random_sampler.rb', line 5

def initialize vals, probs
  @values, @probabilities = vals, probs
  total_prob = probs.inject(0,:+)
  raise ArgumentError, "Total probability is not 1" if total_prob != 1
  
  offsets = AddingSequence.new(probs).over(1...probs.size).to_a
  changes = vals[1..-1].map{|val| Change::Immediate.new(val) }
  
  value_changes = Hash[ [offsets, changes].transpose ]
  @val_comp = ValueComputer.new(vals.first, value_changes)
end

Instance Attribute Details

#probabilitiesObject (readonly)

Returns the value of attribute probabilities.



4
5
6
# File 'lib/musicality/composition/util/random_sampler.rb', line 4

def probabilities
  @probabilities
end

#valuesObject (readonly)

Returns the value of attribute values.



4
5
6
# File 'lib/musicality/composition/util/random_sampler.rb', line 4

def values
  @values
end

Instance Method Details

#sample(n = nil) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/musicality/composition/util/random_sampler.rb', line 17

def sample n=nil
  if n.nil?
    return @val_comp.at(rand)
  else
    return Array.new(n){ @val_comp.at(rand) }
  end
end