Пример #1
0
 /// <summary>VMP message to <c>a</c>.</summary>
 /// <param name="areEqual">Incoming message from <c>areEqual</c>. Must be a proper distribution. If uniform, the result will be uniform.</param>
 /// <param name="B">Incoming message from <c>b</c>.</param>
 /// <param name="result">Modified to contain the outgoing message.</param>
 /// <returns>
 ///   <paramref name="result" />
 /// </returns>
 /// <remarks>
 ///   <para>The outgoing message is the exponential of the average log-factor value, where the average is over all arguments except <c>a</c>. Because the factor is deterministic, <c>areEqual</c> is integrated out before taking the logarithm. The formula is <c>exp(sum_(b) p(b) log(sum_areEqual p(areEqual) factor(areEqual,a,b)))</c>.</para>
 /// </remarks>
 /// <exception cref="ImproperMessageException">
 ///   <paramref name="areEqual" /> is not a proper distribution.</exception>
 public static DiscreteEnum <TEnum> AAverageLogarithm([SkipIfUniform] Bernoulli areEqual, TEnum B, DiscreteEnum <TEnum> result)
 {
     return(DiscreteEnum <TEnum> .FromDiscrete(DiscreteAreEqualOp.AAverageLogarithm(areEqual, ToInt(B), result.GetInternalDiscrete())));
 }
 /// <summary>
 /// VMP message to 'a'
 /// </summary>
 /// <param name="areEqual">Incoming message from 'areEqual'. Must be a proper distribution.  If uniform, the result will be uniform.</param>
 /// <param name="B">Constant value for 'b'.</param>
 /// <param name="result">Modified to contain the outgoing message</param>
 /// <returns><paramref name="result"/></returns>
 /// <remarks><para>
 /// The outgoing message is the factor viewed as a function of 'a' with 'areEqual' integrated out.
 /// The formula is <c>sum_areEqual p(areEqual) factor(areEqual,a,b)</c>.
 /// </para></remarks>
 /// <exception cref="ImproperMessageException"><paramref name="areEqual"/> is not a proper distribution</exception>
 public static DiscreteEnum <TEnum> AAverageLogarithm([SkipIfUniform] Bernoulli areEqual, TEnum B, Discrete result)
 {
     return(new DiscreteEnum <TEnum>(DiscreteAreEqualOp.AAverageLogarithm(areEqual, ToInt(B), result)));
 }
Пример #3
0
 /// <summary>VMP message to <c>a</c>.</summary>
 /// <param name="areEqual">Constant value for <c>areEqual</c>.</param>
 /// <param name="B">Incoming message from <c>b</c>.</param>
 /// <param name="result">Modified to contain the outgoing message.</param>
 /// <returns>
 ///   <paramref name="result" />
 /// </returns>
 /// <remarks>
 ///   <para>The outgoing message is the exponential of the average log-factor value, where the average is over all arguments except <c>a</c>. The formula is <c>exp(sum_(b) p(b) log(factor(areEqual,a,b)))</c>.</para>
 /// </remarks>
 public static DiscreteEnum <TEnum> AAverageLogarithm(bool areEqual, TEnum B, DiscreteEnum <TEnum> result)
 {
     return(DiscreteEnum <TEnum> .FromDiscrete(DiscreteAreEqualOp.AAverageLogarithm(areEqual, ToInt(B), result.GetInternalDiscrete())));
 }
 /// <summary>
 /// VMP message to 'a'
 /// </summary>
 /// <param name="areEqual">Constant value for 'areEqual'.</param>
 /// <param name="B">Constant value for 'b'.</param>
 /// <param name="result">Modified to contain the outgoing message</param>
 /// <returns><paramref name="result"/></returns>
 /// <remarks><para>
 /// The outgoing message is the factor viewed as a function of 'a' conditioned on the given values.
 /// </para></remarks>
 public static DiscreteEnum <TEnum> AAverageLogarithm(bool areEqual, TEnum B, Discrete result)
 {
     return(new DiscreteEnum <TEnum>(DiscreteAreEqualOp.AAverageLogarithm(areEqual, ToInt(B), result)));
 }