trueskill/Skills/FactorGraphs/FactorList.cs

47 lines
1.3 KiB
C#
Raw Normal View History

using System.Collections.Generic;
using System.Linq;
namespace Moserware.Skills.FactorGraphs
{
/// <summary>
/// Helper class for computing the factor graph's normalization constant.
/// </summary>
public class FactorList<TValue>
{
private readonly List<Factor<TValue>> _List = new List<Factor<TValue>>();
public double LogNormalization
{
get
{
_List.ForEach(f => f.ResetMarginals());
double sumLogZ = 0.0;
for (int i = 0; i < _List.Count; i++)
{
Factor<TValue> f = _List[i];
for (int j = 0; j < f.NumberOfMessages; j++)
{
sumLogZ += f.SendMessage(j);
}
}
double sumLogS = _List.Aggregate(0.0, (acc, fac) => acc + fac.LogNormalization);
return sumLogZ + sumLogS;
}
}
public int Count
{
get { return _List.Count; }
}
public Factor<TValue> AddFactor(Factor<TValue> factor)
{
_List.Add(factor);
return factor;
}
}
}