vWin($t, $epsilon); return $v * ($v + $t - $epsilon); } /** * Variance multiplicative function "w" for draws * * @latex w = \nu^2 + \dfrac{(\epsilon - t) * \mathcal{N}(\epsilon - t) + (\epsilon + t) * \mathcal{N}(\epsilon + t)}{\Phi(\epsilon - t) - \Phi(-\epsilon - t)} * * @param float $t Difference winner and loser mu * @param float $epsilon Draw margin * * @return float * * @since 1.0.0 */ private function wDraw(float $t, float $epsilon) : float { $tAbs = \abs($t); $v = $this->vDraw($t, $epsilon); return $v * $v + (($epsilon - $t) * NormalDistribution::getPdf($epsilon - $tAbs, 0.0, 1.0) + ($epsilon + $tAbs) * NormalDistribution::getPdf($epsilon + $tAbs, 0.0, 1.0)) / (NormalDistribution::getCdf($epsilon - $tAbs, 0.0, 1.0) - NormalDistribution::getCdf(-$epsilon - $tAbs, 0.0, 1.0)); } private function buildRatingLayer() : void { } private function buildPerformanceLayer() : void { } private function buildTeamPerformanceLayer() : void { } private function buildTruncLayer() : void { } private function factorGraphBuilders() { // Rating layer // Performance layer // Team Performance layer // Trunc layer return [ 'rating_layer' => $ratingLayer, 'performance_layer' => $ratingLayer, 'team_performance_layer' => $ratingLayer, 'trunc_layer' => $ratingLayer, ]; } public function rating() : void { // Start values $mu = 25; $sigma = $mu / 3; $beta = $sigma / 2; $tau = $sigma / 100; $Pdraw = 0.1; $alpha = 0.25; // Partial update $sigmaPartial = $sigmaOld * $sigmaNew / \sqrt($alpha * $sigmaOld * $sigmaOld - ($alpha - 1) * $sigmaNew * $sigmaNew); $muPartial = $muOld * ($alpha - 1) * $sigmaNew * $sigmaNew - $muNew * $alpha * $sigmaOld * $sigmaOld / (($alpha - 1) * $sigmaNew * $sigmaNew - $alpha * $sigmaOld * $sigmaOld); // New $tau = $pi * $mu; $P = NormalDistribution::getCdf(($s1 - $s2) / (\sqrt(2) * $beta)); $Delta = $alpha * $beta * \sqrt($pi) * (($y + 1) / 2 - $P); $K = NormalDistribution::getCdf(); $pi = 1 / ($sigma * $sigma); } }