Sha256: 4d38fe8025b07876b039a436e735455c37aa29ec0b3f66e6a5825ad09d7d9965

Contents?: true

Size: 1.63 KB

Versions: 12

Compression:

Stored size: 1.63 KB

Contents

module Query

  # Calculates weights for certain combinations.
  #
  class Weights # :nodoc:all
    
    #
    #
    def initialize weights = {}
      # @weights_cache = {} # TODO
      @weights = prepare weights
    end
    
    # Get the category indexes for the given bonuses.
    #
    def prepare weights
      weights
    end
    
    # Get the weight of an allocation.
    #
    def weight_for clustered
      @weights[clustered] || 0
    end
    
    # Returns an energy term E for allocation. this turns into a probability
    # by P(allocation) = 1/Z * exp (-1/T * E(allocation)),
    # where Z is the normalizing partition function
    # sum_allocations exp(-1/T *E(allocation)), and T is a temperature constant.
    # If T is high the distribution will be close to equally distributed.
    # If T is low, the distribution will be the indicator function
    # for min (E(allocation))…
    #
    # ...
    #
    # Just kidding. It's far more complicated than that. Ha ha ha ha ;)
    #
    # Note: Cache this if more complicated weighings become necessary.
    #
    def score combinations
      # TODO Beautify? Use categories for weights?
      #
      # weight_for combinations.map(&:category).clustered_uniq_fast.map!(&:name)
      
      # TODO combinations could cluster uniq as combinations are added (since combinations don't change).
      #
      weight_for combinations.map(&:category_name).clustered_uniq_fast
    end
    
    # Are there any weights defined?
    #
    def empty?
      @weights.empty?
    end
    
    # Prints out a nice representation of the configured weights.
    #
    def to_s
      @weights.to_s
    end
    
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
picky-1.5.2 lib/picky/internals/query/weights.rb
picky-1.5.1 lib/picky/internals/query/weights.rb
picky-1.5.0 lib/picky/internals/query/weights.rb
picky-1.4.3 lib/picky/internals/query/weights.rb
picky-1.4.2 lib/picky/internals/query/weights.rb
picky-1.4.1 lib/picky/query/weights.rb
picky-1.4.0 lib/picky/query/weights.rb
picky-1.3.4 lib/picky/query/weights.rb
picky-1.3.3 lib/picky/query/weights.rb
picky-1.3.2 lib/picky/query/weights.rb
picky-1.3.1 lib/picky/query/weights.rb
picky-1.3.0 lib/picky/query/weights.rb