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

38 lines
1.1 KiB
PHP
Raw Normal View History

2022-07-05 15:55:47 +02:00
<?php
namespace DNW\Skills\TrueSkill\Factors;
2022-07-05 15:33:34 +02:00
use DNW\Skills\FactorGraphs\Factor;
use DNW\Skills\FactorGraphs\Message;
use DNW\Skills\FactorGraphs\Variable;
use DNW\Skills\Numerics\GaussianDistribution;
abstract class GaussianFactor extends Factor
{
/**
* Sends the factor-graph message with and returns the log-normalization constant.
*/
2022-07-05 16:21:06 +02:00
protected function sendMessageVariable(Message $message, Variable $variable): float|int
{
$marginal = $variable->getValue();
$messageValue = $message->getValue();
$logZ = GaussianDistribution::logProductNormalization($marginal, $messageValue);
$variable->setValue(GaussianDistribution::multiply($marginal, $messageValue));
2022-07-05 15:55:47 +02:00
return $logZ;
}
public function createVariableToMessageBinding(Variable $variable): Message
{
$newDistribution = GaussianDistribution::fromPrecisionMean(0, 0);
2022-07-05 16:21:06 +02:00
2023-08-01 13:53:19 +00:00
return parent::createVariableToMessageBindingWithMessage(
$variable,
new Message(
$newDistribution,
2023-08-08 07:00:51 +00:00
sprintf('message from %s to %s', (string)$this, (string)$variable)
2023-08-01 13:53:19 +00:00
)
);
}
2022-07-05 15:55:47 +02:00
}