Files
trueskill/src/TrueSkill/Factors/GaussianFactor.php

39 lines
1.3 KiB
PHP
Raw Normal View History

<?php namespace Moserware\Skills\TrueSkill\Factors;
use Moserware\Skills\FactorGraphs\Factor;
use Moserware\Skills\FactorGraphs\Message;
use Moserware\Skills\FactorGraphs\Variable;
use Moserware\Skills\Numerics\GaussianDistribution;
abstract class GaussianFactor extends Factor
{
protected function __construct($name)
{
parent::__construct($name);
}
/**
* Sends the factor-graph message with and returns the log-normalization constant.
* @param Message $message
* @param Variable $variable
* @return float|int
*/
protected function sendMessageVariable(Message &$message, Variable &$variable)
{
$marginal = &$variable->getValue();
$messageValue = &$message->getValue();
$logZ = GaussianDistribution::logProductNormalization($marginal, $messageValue);
$variable->setValue(GaussianDistribution::multiply($marginal, $messageValue));
return $logZ;
}
2010-09-30 08:25:31 -04:00
public function &createVariableToMessageBinding(Variable &$variable)
{
$newDistribution = GaussianDistribution::fromPrecisionMean(0, 0);
2010-09-30 08:25:31 -04:00
$binding = &parent::createVariableToMessageBindingWithMessage($variable,
new Message(
$newDistribution,
sprintf("message from %s to %s", $this, $variable)));
2010-09-30 08:25:31 -04:00
return $binding;
}
}