/// <summary>Computations that do not depend on observed values</summary> private void Constant() { if (this.Constant_isDone) { return; } this.firstCoin_marginal_F = Bernoulli.Uniform(); this.secondCoin_marginal_F = Bernoulli.Uniform(); // Message to 'bothHeads' from And factor this.bothHeads_F = BooleanAndOp.AndAverageLogarithm(this.firstCoin_marginal_F, this.secondCoin_marginal_F); this.Constant_isDone = true; }
/// <summary>Computations that depend on the observed value of firstCoin</summary> private void Changed_firstCoin() { if (this.Changed_firstCoin_isDone) { return; } this.firstCoin_marginal = Bernoulli.Uniform(); this.firstCoin_marginal = Distribution.SetPoint <Bernoulli, bool>(this.firstCoin_marginal, this.FirstCoin); this.secondCoin_marginal_F = Bernoulli.Uniform(); // Message to 'bothHeads' from And factor this.bothHeads_F = BooleanAndOp.AndAverageLogarithm(this.FirstCoin, this.secondCoin_marginal_F); this.Changed_firstCoin_isDone = true; }