def log_normalization(self): marginal = self.variables[0].value message = self.messages[0].value message_from_variable = marginal / message mean = message_from_variable.mean std = message_from_variable.stdev z = (Gaussian.cumulative_to((self.epsilon - mean) / std) - Gaussian.cumulative_to((-self.epsilon - mean) / std)) return -Gaussian.log_product_normalization(message_from_variable, message) + log(z)
def log_normalization(self): marginal = self.variables[0].value message = self.messages[0].value message_from_variable = marginal / message mean = message_from_variable.mean std = message_from_variable.stdev z = (Gaussian.cumulative_to( (self.epsilon - mean) / std) - Gaussian.cumulative_to( (-self.epsilon - mean) / std)) return -Gaussian.log_product_normalization(message_from_variable, message) + log(z)
def w_within_margin(team_performance_difference, draw_margin): team_performance_difference_abs = abs(team_performance_difference) denominator = (Gaussian.cumulative_to(draw_margin - team_performance_difference_abs) - Gaussian.cumulative_to(-draw_margin - team_performance_difference_abs)) if denominator < 2.222758749e-162: return 1.0 vt = v_within_margin(team_performance_difference_abs, draw_margin) return (vt ** 2 + ( (draw_margin - team_performance_difference_abs) * Gaussian.at(draw_margin - team_performance_difference_abs) - (-draw_margin - team_performance_difference_abs) * Gaussian.at(-draw_margin - team_performance_difference_abs)) / denominator)
def testCumulativeTo(self): expected = 0.691462461274013 answer = Gaussian.cumulative_to(0.5) self.assertAlmostEqual( expected, answer, None, "testCumulativeTo expected %.15f, got %.15f" % (expected, answer), GaussianDistributionTest.ERROR_TOLERANCE)
def log_normalization(self): marginal = self.variables[0].value message = self.messages[0].value message_from_variable = marginal / message return (-Gaussian.log_product_normalization(message_from_variable, message) + log(Gaussian.cumulative_to((message_from_variable.mean - self.epsilon) / message_from_variable.stdev)))
def v_within_margin(team_performance_difference, draw_margin): team_performance_difference_abs = abs(team_performance_difference) denominator = ( Gaussian.cumulative_to(draw_margin - team_performance_difference_abs) - Gaussian.cumulative_to(-draw_margin - team_performance_difference_abs)) if denominator < 2.222758749e-162: if team_performance_difference < 0.0: return -team_performance_difference - draw_margin return -team_performance_difference + draw_margin numerator = (Gaussian.at(-draw_margin - team_performance_difference_abs) - Gaussian.at(draw_margin - team_performance_difference_abs)) if team_performance_difference < 0.0: return -numerator / denominator return numerator / denominator
def w_exceeds_margin(team_performance_difference, draw_margin): denominator = Gaussian.cumulative_to(team_performance_difference - draw_margin) if denominator < 2.222758749e-162: if team_performance_difference < 0.0: return 1.0 return 0.0 v_win = v_exceeds_margin(team_performance_difference, draw_margin) return v_win * (v_win + team_performance_difference - draw_margin)
def w_within_margin(team_performance_difference, draw_margin): team_performance_difference_abs = abs(team_performance_difference) denominator = ( Gaussian.cumulative_to(draw_margin - team_performance_difference_abs) - Gaussian.cumulative_to(-draw_margin - team_performance_difference_abs)) if denominator < 2.222758749e-162: return 1.0 vt = v_within_margin(team_performance_difference_abs, draw_margin) return (vt**2 + ((draw_margin - team_performance_difference_abs) * Gaussian.at(draw_margin - team_performance_difference_abs) - (-draw_margin - team_performance_difference_abs) * Gaussian.at(-draw_margin - team_performance_difference_abs)) / denominator)
def v_within_margin(team_performance_difference, draw_margin): team_performance_difference_abs = abs(team_performance_difference) denominator = ( Gaussian.cumulative_to(draw_margin - team_performance_difference_abs) - Gaussian.cumulative_to(-draw_margin - team_performance_difference_abs)) if denominator < 2.222758749e-162: if team_performance_difference < 0.0: return -team_performance_difference - draw_margin return -team_performance_difference + draw_margin numerator = (Gaussian.at(-draw_margin - team_performance_difference_abs) - Gaussian.at(draw_margin - team_performance_difference_abs)) if team_performance_difference < 0.0: return -numerator / denominator return numerator / denominator
def w_exceeds_margin(team_performance_difference, draw_margin): denominator = Gaussian.cumulative_to(team_performance_difference - draw_margin) if denominator < 2.222758749e-162: if team_performance_difference < 0.0: return 1.0 return 0.0 v_win = v_exceeds_margin(team_performance_difference, draw_margin) return v_win * (v_win + team_performance_difference - draw_margin)
def log_normalization(self): marginal = self.variables[0].value message = self.messages[0].value message_from_variable = marginal / message return ( -Gaussian.log_product_normalization(message_from_variable, message) + log( Gaussian.cumulative_to( (message_from_variable.mean - self.epsilon) / message_from_variable.stdev)))
def v_exceeds_margin(team_performance_difference, draw_margin): denominator = Gaussian.cumulative_to(team_performance_difference - draw_margin) if (denominator < 2.22275874e-162): return -team_performance_difference + draw_margin return Gaussian.at(team_performance_difference - draw_margin) / denominator
def testCumulativeTo(self): expected = 0.691462461274013 answer = Gaussian.cumulative_to(0.5) self.assertAlmostEqual(expected, answer, None, "testCumulativeTo expected %.15f, got %.15f" % (expected, answer), GaussianDistributionTest.ERROR_TOLERANCE)
def v_exceeds_margin(team_performance_difference, draw_margin): denominator = Gaussian.cumulative_to(team_performance_difference - draw_margin) if (denominator < 2.22275874e-162): return -team_performance_difference + draw_margin return Gaussian.at(team_performance_difference - draw_margin) / denominator