Class: Saulabs::TrueSkill::Factors::GreaterThan
- Defined in:
- lib/saulabs/trueskill/factors/greater_than.rb
Instance Method Summary collapse
-
#initialize(epsilon, variable) ⇒ GreaterThan
constructor
A new instance of GreaterThan.
- #log_normalization ⇒ Object
- #update_message_at(index) ⇒ Object
Methods inherited from Base
#bind, #message_count, #reset_marginals, #send_message_at
Constructor Details
#initialize(epsilon, variable) ⇒ GreaterThan
Returns a new instance of GreaterThan.
9 10 11 12 13 |
# File 'lib/saulabs/trueskill/factors/greater_than.rb', line 9 def initialize(epsilon, variable) super() @epsilon = epsilon bind(variable) end |
Instance Method Details
#log_normalization ⇒ Object
15 16 17 18 19 |
# File 'lib/saulabs/trueskill/factors/greater_than.rb', line 15 def log_normalization msg = @variables[0] / [0] -Gauss::Distribution.log_product_normalization(msg, [0]) + Math.log(Gauss::Distribution.cdf((msg.mean - @epsilon) / msg.deviation)) end |
#update_message_at(index) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/saulabs/trueskill/factors/greater_than.rb', line 21 def (index) raise "illegal message index: #{index}" if index < 0 || index > 0 = [index] variable = @bindings[[index]] msg = variable / c = msg.precision d = msg.precision_mean sqrt_c = Math.sqrt(c) d_sqrt_c = sqrt_c == 0 ? 0.0 : d / sqrt_c e_sqrt_c = @epsilon * sqrt_c denom = 1.0 - Gauss::TruncatedCorrection.w_exceeds_margin(d_sqrt_c, e_sqrt_c) new_precision = c / denom new_precision_mean = (d + sqrt_c * Gauss::TruncatedCorrection.v_exceeds_margin(d_sqrt_c, e_sqrt_c)) / denom new_marginal = Gauss::Distribution.with_precision(new_precision_mean, new_precision) = * new_marginal / variable diff = new_marginal - variable .replace() variable.replace(new_marginal) return diff end |