Files
trueskill/src/FactorGraphs/FactorList.php

59 lines
1.1 KiB
PHP
Raw Normal View History

2022-07-05 15:55:47 +02:00
<?php
2024-02-02 14:53:38 +00:00
declare(strict_types=1);
2022-07-05 15:55:47 +02:00
namespace DNW\Skills\FactorGraphs;
/**
* Helper class for computing the factor graph's normalization constant.
*/
class FactorList
{
2023-08-02 09:36:44 +00:00
/**
* @var Factor[] $list
*/
private array $list = [];
2023-08-02 09:36:44 +00:00
public function getLogNormalization(): float
{
$list = $this->list;
foreach ($list as &$currentFactor) {
$currentFactor->resetMarginals();
}
$sumLogZ = 0.0;
$listCount = count($this->list);
2024-02-21 13:48:37 +00:00
for ($i = 0; $i < $listCount; ++$i) {
$f = $this->list[$i];
$numberOfMessages = $f->getNumberOfMessages();
2024-02-21 13:48:37 +00:00
for ($j = 0; $j < $numberOfMessages; ++$j) {
$sumLogZ += $f->sendMessageIndex($j);
}
}
$sumLogS = 0;
foreach ($list as &$currentFactor) {
2022-07-05 16:21:06 +02:00
$sumLogS += $currentFactor->getLogNormalization();
}
return $sumLogZ + $sumLogS;
}
2023-08-02 09:36:44 +00:00
public function count(): int
{
return count($this->list);
}
2023-08-02 09:36:44 +00:00
public function addFactor(Factor $factor): Factor
{
$this->list[] = $factor;
2022-07-05 15:55:47 +02:00
return $factor;
}
2022-07-05 15:55:47 +02:00
}