Sha256: edaff2416ddf7586836624dc8f48aadc1f5ab8fc21b11bc0105a2f398122dfaf

Contents?: true

Size: 1.4 KB

Versions: 17

Compression:

Stored size: 1.4 KB

Contents

module Query

  # Calculates weights for certain combinations.
  #
  class Weights
    
    #
    #
    def initialize weights = {}
      @weights_cache = {}
      @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 ;)
    #
    include Helpers::Cache
    def score combinations
      # TODO Rewrite to use the category
      #
      categories = combinations.map { |combination| combination.bundle.category }.clustered_uniq
      
      # Note: Caching will not be necessary anymore if the
      #       mapping is not necessary anymore.
      #
      cached @weights_cache, categories do
        categories.map! &:name
        weight_for categories
      end
    end

  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
picky-0.9.3 lib/picky/query/weights.rb
picky-0.9.2 lib/picky/query/weights.rb
picky-0.9.1 lib/picky/query/weights.rb
picky-0.9.0 lib/picky/query/weights.rb
picky-0.3.0 lib/picky/query/weights.rb
picky-0.2.4 lib/picky/query/weights.rb
picky-0.2.3 lib/picky/query/weights.rb
picky-0.2.2 lib/picky/query/weights.rb
picky-0.2.1 lib/picky/query/weights.rb
picky-0.2.0 lib/picky/query/weights.rb
picky-0.1.0 lib/picky/query/weights.rb
picky-0.0.9 lib/picky/query/weights.rb
picky-0.0.8 lib/picky/query/weights.rb
picky-0.0.7 lib/picky/query/weights.rb
picky-0.0.6 lib/picky/query/weights.rb
picky-0.0.5 lib/picky/query/weights.rb
picky-0.0.4 lib/picky/query/weights.rb