String based "name" for Variable class removed for performance

This commit is contained in:
2024-03-19 15:09:13 +00:00
parent 0095829906
commit ae5d2a8b73
14 changed files with 28 additions and 83 deletions

View File

@ -42,7 +42,7 @@ class GaussianWeightedSumFactor extends GaussianFactor
*/
public function __construct(Variable $sumVariable, array $variablesToSum, array $variableWeights)
{
parent::__construct(self::createName((string)$sumVariable, $variablesToSum, $variableWeights));
parent::__construct('$sumVariable, $variablesToSum, $variableWeights');
// The first weights are a straightforward copy
// v_0 = a_1*v_1 + a_2*v_2 + ... + a_n * v_n
@ -235,42 +235,4 @@ class GaussianWeightedSumFactor extends GaussianFactor
$updatedVariables
);
}
/**
* @param Variable[] $variablesToSum
* @param float[] $weights
*/
private static function createName(string $sumVariable, array $variablesToSum, array $weights): string
{
// TODO: Perf? Use PHP equivalent of StringBuilder? implode on arrays?
$result = $sumVariable;
$result .= ' = ';
$totalVars = count($variablesToSum);
for ($i = 0; $i < $totalVars; ++$i) {
$isFirst = ($i == 0);
if ($isFirst && ($weights[$i] < 0)) {
$result .= '-';
}
$absValue = sprintf('%.2f', \abs($weights[$i])); // 0.00?
$result .= $absValue;
$result .= '*[';
$result .= (string)$variablesToSum[$i];
$result .= ']';
$isLast = ($i === $totalVars - 1);
if (! $isLast) {
if ($weights[$i + 1] >= 0) {
$result .= ' + ';
} else {
$result .= ' - ';
}
}
}
return $result;
}
}