Even less strings

This commit is contained in:
Jens True 2024-03-19 15:56:57 +00:00
parent bbff1fbbbc
commit 796bd993d0
8 changed files with 14 additions and 25 deletions

@ -8,7 +8,7 @@ use DNW\Skills\Guard;
use DNW\Skills\HashMap;
use Exception;
abstract class Factor implements \Stringable
abstract class Factor
{
/**
* @var Message[] $messages
@ -17,16 +17,13 @@ abstract class Factor implements \Stringable
private readonly HashMap $messageToVariableBinding;
private readonly string $name;
/**
* @var Variable[] $variables
*/
private array $variables = [];
protected function __construct(string $name)
protected function __construct()
{
$this->name = 'Factor[' . $name . ']';
$this->messageToVariableBinding = new HashMap();
}
@ -121,9 +118,4 @@ abstract class Factor implements \Stringable
return $message;
}
public function __toString(): string
{
return $this->name;
}
}

@ -6,9 +6,9 @@ namespace DNW\Skills\FactorGraphs;
use DNW\Skills\Numerics\GaussianDistribution;
class Message implements \Stringable
class Message
{
public function __construct(private GaussianDistribution $value, private readonly string $name)
public function __construct(private GaussianDistribution $value)
{
}
@ -21,9 +21,4 @@ class Message implements \Stringable
{
$this->value = $value;
}
public function __toString(): string
{
return $this->name;
}
}

@ -31,7 +31,7 @@ abstract class GaussianFactor extends Factor
return parent::createVariableToMessageBindingWithMessage(
$variable,
new Message(
$newDistribution,'message from %s to %s'
$newDistribution,
)
);
}

@ -18,7 +18,7 @@ class GaussianGreaterThanFactor extends GaussianFactor
{
public function __construct(private readonly float $epsilon, Variable $variable)
{
parent::__construct('%s > %.2f');
parent::__construct();
$this->createVariableToMessageBinding($variable);
}

@ -21,7 +21,8 @@ class GaussianLikelihoodFactor extends GaussianFactor
public function __construct(float $betaSquared, Variable $variable1, Variable $variable2)
{
parent::__construct('Likelihood of %s going to %s');
//Likelihood of $variable1 going to $variable2
parent::__construct();
$this->precision = 1.0 / $betaSquared;
$this->createVariableToMessageBinding($variable1);
$this->createVariableToMessageBinding($variable2);

@ -19,11 +19,11 @@ class GaussianPriorFactor extends GaussianFactor
public function __construct(float $mean, float $variance, Variable $variable)
{
parent::__construct('Prior value going to %s');
//Prior value going to $variable
parent::__construct();
$this->newMessage = new GaussianDistribution($mean, sqrt($variance));
$newMessage = new Message(
GaussianDistribution::fromPrecisionMean(0, 0),
'message from %s to %s'
GaussianDistribution::fromPrecisionMean(0, 0)
);
$this->createVariableToMessageBindingWithMessage($variable, $newMessage);

@ -42,7 +42,7 @@ class GaussianWeightedSumFactor extends GaussianFactor
*/
public function __construct(Variable $sumVariable, array $variablesToSum, array $variableWeights)
{
parent::__construct('$sumVariable, $variablesToSum, $variableWeights');
parent::__construct();
// The first weights are a straightforward copy
// v_0 = a_1*v_1 + a_2*v_2 + ... + a_n * v_n

@ -18,7 +18,8 @@ class GaussianWithinFactor extends GaussianFactor
{
public function __construct(private readonly float $epsilon, Variable $variable)
{
parent::__construct('%s <= %.2f');
//$epsilon <= $variable
parent::__construct();
$this->createVariableToMessageBinding($variable);
}