public double BinaryFactorFunction(Factorable adjFactorable)
        {
            double sum = 0.0;

            foreach (KeyValuePair <int, object> pair in FactorDictionary)
            {
                byte factorValue = GetBinaryFactor(pair.Key, adjFactorable);
                if (factorValue != double.NaN)
                {
                    sum += Graph.GetLambda(pair.Key, factorValue) * factorValue;
                }
            }
            return(Math.Exp(sum));
        }
        public byte GetBinaryFactor(int factorLabel, Factorable adjFactorable)
        {
            if (!FactorDictionary.ContainsKey(factorLabel))
            {
                return(byte.MaxValue);
            }
            if (!FactorEnabled[factorLabel])
            {
                return(byte.MaxValue);
            }

            switch (FactorTypes[factorLabel])
            {
            case FactorType.Binary:
                return(((BinaryFactor)FactorDictionary[factorLabel])(this, adjFactorable, DataSource));

            default:
                return(byte.MaxValue);
            }
        }
 public int CheckBinaryFactor(int factorLabel, Factorable adjFactorable, byte value)
 {
     return((value == GetBinaryFactor(factorLabel, adjFactorable)) ?
            1 :
            0);
 }