/// <summary>Computations that depend on the observed value of InstanceCount</summary> private void Changed_InstanceCount() { if (this.Changed_InstanceCount_isDone) { return; } this.Labels_F = new DistributionStructArray <Bernoulli, bool>(this.InstanceCount); this.NoisyScore_F = new Gaussian[this.InstanceCount]; this.FeatureScores_F = new DistributionStructArray <Gaussian, double> [this.InstanceCount]; this.Weights_FeatureIndexes_F = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.InstanceCount); this.Score_F = new Gaussian[this.InstanceCount]; this.IndexedWeights_B = new DistributionStructArray <Gaussian, double> [this.InstanceCount]; this.Labels_marginal_F = new DistributionStructArray <Bernoulli, bool>(this.InstanceCount); this.Labels_use_B_reduced = default(Bernoulli); if (this.InstanceCount > 0) { this.Labels_use_B_reduced = Bernoulli.Uniform(); } for (int InstanceRange = 0; InstanceRange < this.InstanceCount; InstanceRange++) { this.Labels_F[InstanceRange] = Bernoulli.Uniform(); this.Score_F[InstanceRange] = Gaussian.Uniform(); this.NoisyScore_F[InstanceRange] = Gaussian.Uniform(); this.Labels_marginal_F[InstanceRange] = Bernoulli.Uniform(); } this.Changed_InstanceCount_isDone = true; }
/// <summary>Computations that depend on the observed value of InstanceCount</summary> private void Changed_InstanceCount() { if (this.Changed_InstanceCount_isDone) { return; } this.FeatureScores_F = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.instanceCount); this.Score_F = new DistributionStructArray <Gaussian, double>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.Score_F[InstanceRange] = Gaussian.Uniform(); } this.NoisyScore_F = new DistributionStructArray <Gaussian, double>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.NoisyScore_F[InstanceRange] = Gaussian.Uniform(); } this.NoisyScore_use_B = new DistributionStructArray <Gaussian, double>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.NoisyScore_use_B[InstanceRange] = Gaussian.Uniform(); } this.Score_B = new DistributionStructArray <Gaussian, double>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.Score_B[InstanceRange] = Gaussian.Uniform(); } this.FeatureScores_B = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.instanceCount); this.ModelSelector_selector_cases_0_rep8_B = new DistributionStructArray <Bernoulli, bool>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.ModelSelector_selector_cases_0_rep8_B[InstanceRange] = Bernoulli.Uniform(); } this.Changed_InstanceCount_isDone = true; }
/// <summary>Computations that depend on the observed value of InstanceCount</summary> private void Changed_InstanceCount() { if (this.Changed_InstanceCount_isDone) { return; } this.Weights_FeatureIndexes_F = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.instanceCount); this.FeatureScores_F = new DistributionStructArray <Gaussian, double> [this.instanceCount]; this.Score_F = new Gaussian[this.instanceCount]; for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.Score_F[InstanceRange] = Gaussian.Uniform(); } this.NoisyScore_F = new Gaussian[this.instanceCount]; for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.NoisyScore_F[InstanceRange] = Gaussian.Uniform(); } this.NoisyScore_use_B = new Gaussian[this.instanceCount]; for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.NoisyScore_use_B[InstanceRange] = Gaussian.Uniform(); } this.Score_B = new Gaussian[this.instanceCount]; for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.Score_B[InstanceRange] = Gaussian.Uniform(); } this.FeatureScores_B = new DistributionStructArray <Gaussian, double> [this.instanceCount]; this.IndexedWeights_B = new DistributionStructArray <Gaussian, double> [this.instanceCount]; this.Weights_FeatureIndexes_B = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.instanceCount); this.Changed_InstanceCount_isDone = true; }
/// <summary>Computations that depend on the observed value of FeatureCount</summary> private void Changed_FeatureCount() { if (this.Changed_FeatureCount_isDone) { return; } this.Weights_depth1_rep_F_marginal = new DistributionStructArray <Gaussian, double>(this.featureCount); this.Weights_depth1_rep_B_toDef = new DistributionStructArray <Gaussian, double>(this.featureCount); this.Weights_depth1_rep_F = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.featureCount); this.Weights_depth1_rep_B = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.featureCount); this.Changed_FeatureCount_isDone = true; }
public virtual void SolveSudoku(GrilleSudoku s) { Dirichlet[] dirArray = Enumerable.Repeat(Dirichlet.Uniform(CellDomain.Count), CellIndices.Count).ToArray(); //On affecte les valeurs fournies par le masque à résoudre en affectant les distributions de probabilités initiales foreach (var cellIndex in GrilleSudoku.IndicesCellules) { if (s.Cellules[cellIndex] > 0) { Vector v = Vector.Zero(CellDomain.Count); v[s.Cellules[cellIndex] - 1] = 1.0; //Todo: Alternative: le fait de mettre une proba non nulle permet d'éviter l'erreur "zero probability" du Sudoku Easy-n°2, mais le Easy#3 n'est plus résolu //Vector v = Vector.Constant(CellDomain.Count, EpsilonProba); //v[s.Cellules[cellIndex] - 1] = FixedValueProba; dirArray[cellIndex] = Dirichlet.PointMass(v); } } CellsPrior.ObservedValue = dirArray; // Todo: tester en inférant sur d'autres variables aléatoire, // et/ou en ayant une approche itérative: On conserve uniquement les cellules dont les valeurs ont les meilleures probabilités et on réinjecte ces valeurs dans CellsPrior comme c'est également fait dans le projet neural nets. DistributionRefArray <Discrete, int> cellsPosterior = (DistributionRefArray <Discrete, int>)InferenceEngine.Infer(Cells); var cellValues = cellsPosterior.Point.Select(i => i + 1).ToList(); //Autre possibilité de variable d'inférence (bis) //Dirichlet[] cellsProbsPosterior = InferenceEngine.Infer<Dirichlet[]>(ProbCells); foreach (var cellIndex in GrilleSudoku.IndicesCellules) { if (s.Cellules[cellIndex] == 0) { s.Cellules[cellIndex] = cellValues[cellIndex]; //Autre possibilité de variable d'inférence (bis) //var mode = cellsProbsPosterior[cellIndex].GetMode(); //var value = mode.IndexOf(1.0) + 1; //s.Cellules[cellIndex] = value; } } }
public static DistributionRefArray <TDist, T> ItemsAverageConditionalInit <TDist>( [IgnoreDependency] DistributionRefArray <TDist, T> array, IList <int> indices) where TDist : class, SettableTo <TDist>, SettableToProduct <TDist>, SettableToRatio <TDist>, SettableToPower <TDist>, SettableToWeightedSum <TDist>, CanGetLogAverageOf <TDist>, CanGetLogAverageOfPower <TDist>, CanGetAverageLog <TDist>, IDistribution <T>, Sampleable <T> { return(new DistributionRefArray <TDist, T>(indices.Count, i => (TDist)array[indices[i]].Clone())); }
/// <summary> /// Initializes a new instance of the <see cref="BPMShared"/> class. /// </summary> /// <param name="numClasses">The number of classes.</param> /// <param name="noisePrecision">The precision of the noise.</param> /// <param name="numFeatures">The number of features.</param> /// <param name="numChunksTraining">The number of training set chunks.</param> /// <param name="numChunksTesting">The number of test set chunks.</param> public BPMShared(int numClasses, double noisePrecision, int numFeatures, int numChunksTraining, int numChunksTesting) { // Range over classes. this.c = new Range(numClasses).Named("c"); // Setup shared weights and weights' prior. this.weightsPrior = InitializePrior(numClasses, numFeatures); this.weights = SharedVariable<Vector>.Random(this.c, this.weightsPrior).Named("w"); // Configure models. this.trainModel = new Model(this.weights, this.c, numChunksTraining); this.testModel = new Model(this.weights, this.c, numChunksTesting); // Observe the noise precision. this.trainModel.noisePrecision.ObservedValue = noisePrecision; this.testModel.noisePrecision.ObservedValue = noisePrecision; }
/// <summary>Computations that depend on the observed value of InstanceCount</summary> private void Changed_InstanceCount() { if (this.Changed_InstanceCount_iterationsDone == 1) { return; } // Create array for 'Labels' Forwards messages. this.Labels_F = new DistributionStructArray <Bernoulli, bool>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.Labels_F[InstanceRange] = Bernoulli.Uniform(); } // Create array for replicates of 'IndexedWeights_B' this.IndexedWeights_B = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.instanceCount); // Create array for 'Weights_FeatureIndexes' Forwards messages. this.Weights_FeatureIndexes_F = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.instanceCount); // Create array for replicates of 'FeatureScores_F' this.FeatureScores_F = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.instanceCount); // Create array for replicates of 'Score_F' this.Score_F = new DistributionStructArray <Gaussian, double>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.Score_F[InstanceRange] = Gaussian.Uniform(); } // Create array for replicates of 'NoisyScore_F' this.NoisyScore_F = new DistributionStructArray <Gaussian, double>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.NoisyScore_F[InstanceRange] = Gaussian.Uniform(); } // Create array for 'Labels_marginal' Forwards messages. this.Labels_marginal_F = new DistributionStructArray <Bernoulli, bool>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.Labels_marginal_F[InstanceRange] = Bernoulli.Uniform(); } // Create array for 'Labels_use' Backwards messages. this.Labels_use_B = new DistributionStructArray <Bernoulli, bool>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.Labels_use_B[InstanceRange] = Bernoulli.Uniform(); } this.Changed_InstanceCount_iterationsDone = 1; this.Changed_InstanceCount_InstanceFeatureCounts_iterationsDone = 0; this.Changed_InstanceCount_InstanceFeatureCounts_FeatureValues_FeatureIndexes_WeightPriors_WeightConstrai6_iterationsDone = 0; }
/// <summary>Computations that depend on the observed value of FeatureCount</summary> private void Changed_FeatureCount() { if (this.Changed_FeatureCount_iterationsDone == 1) { return; } // Create array for replicates of 'Weights_depth1_rep_B_toDef' this.Weights_depth1_rep_B_toDef = new DistributionStructArray <Gaussian, double>(this.featureCount); // Create array for replicates of 'Weights_depth1_rep_F_marginal' this.Weights_depth1_rep_F_marginal = new DistributionStructArray <Gaussian, double>(this.featureCount); // Create array for replicates of 'Weights_depth1_rep_F' this.Weights_depth1_rep_F = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.featureCount); // Create array for replicates of 'Weights_depth1_rep_B' this.Weights_depth1_rep_B = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.featureCount); this.Changed_FeatureCount_iterationsDone = 1; this.Changed_FeatureCount_WeightPriors_iterationsDone = 0; this.Changed_FeatureCount_WeightPriors_Init_numberOfIterationsDecreased_InstanceCount_WeightConstraints_iterationsDone = 0; this.Changed_FeatureCount_InstanceCount_iterationsDone = 0; }
/// <summary>Computations that depend on the observed value of InstanceCount</summary> private void Changed_InstanceCount() { if (this.Changed_InstanceCount_iterationsDone == 1) { return; } // Create array for 'Weights_FeatureIndexes' Forwards messages. this.Weights_FeatureIndexes_F = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.instanceCount); // Create array for replicates of 'FeatureScores_F' this.FeatureScores_F = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.instanceCount); // Create array for replicates of 'Score_F' this.Score_F = new DistributionStructArray <Gaussian, double>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.Score_F[InstanceRange] = Gaussian.Uniform(); } // Create array for replicates of 'NoisyScore_F' this.NoisyScore_F = new DistributionStructArray <Gaussian, double>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.NoisyScore_F[InstanceRange] = Gaussian.Uniform(); } // Create array for replicates of 'NoisyScore_use_B' this.NoisyScore_use_B = new DistributionStructArray <Gaussian, double>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.NoisyScore_use_B[InstanceRange] = Gaussian.Uniform(); } // Create array for replicates of 'Score_B' this.Score_B = new DistributionStructArray <Gaussian, double>(this.instanceCount); for (int InstanceRange = 0; InstanceRange < this.instanceCount; InstanceRange++) { this.Score_B[InstanceRange] = Gaussian.Uniform(); } // Create array for replicates of 'FeatureScores_B' this.FeatureScores_B = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.instanceCount); // Create array for replicates of 'IndexedWeights_B' this.IndexedWeights_B = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.instanceCount); this.Changed_InstanceCount_iterationsDone = 1; this.Changed_InstanceCount_InstanceFeatureCounts_iterationsDone = 0; this.Changed_numberOfIterationsDecreased_WeightPriors_FeatureIndexes_InstanceCount_InstanceFeatureCounts_7_iterationsDone = 0; }
/// <summary>Computations that depend on the observed value of FeatureCount</summary> private void Changed_FeatureCount() { if (this.Changed_FeatureCount_isDone) { return; } this.Weights_depth1_rep_F_marginal = new DistributionStructArray <Gaussian, double>(this.featureCount); this.Weights_depth1_rep_B_toDef = new DistributionStructArray <Gaussian, double>(this.featureCount); this.Weights_depth1_rep_F = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.featureCount); this.Weights_depth1_rep_B = new DistributionRefArray <DistributionStructArray <Gaussian, double>, double[]>(this.featureCount); this.ModelSelector_selector_cases_0_rep3_uses_B = new Bernoulli[this.featureCount][]; this.ModelSelector_selector_cases_0_rep3_B = new DistributionStructArray <Bernoulli, bool>(this.featureCount); for (int FeatureRange = 0; FeatureRange < this.featureCount; FeatureRange++) { this.ModelSelector_selector_cases_0_rep3_uses_B[FeatureRange] = new Bernoulli[2]; this.ModelSelector_selector_cases_0_rep3_uses_B[FeatureRange][0] = Bernoulli.Uniform(); this.ModelSelector_selector_cases_0_rep3_uses_B[FeatureRange][1] = Bernoulli.Uniform(); this.ModelSelector_selector_cases_0_rep3_B[FeatureRange] = Bernoulli.Uniform(); } this.Changed_FeatureCount_isDone = true; }
/// <summary>Computations that depend on the observed value of vVector__343</summary> private void Changed_vVector__343() { if (this.Changed_vVector__343_iterationsDone == 1) { return; } this.vVector__343_marginal = new PointMass <Vector[]>(this.VVector__343); // The constant 'vVectorGaussian343' VectorGaussian vVectorGaussian343 = VectorGaussian.FromNatural(DenseVector.FromArray(new double[3] { 1547829870.0, 525077980.0, 200270.0 }), new PositiveDefiniteMatrix(new double[3, 3] { { 4254590363351.0, 1127383488860.0, 433199230.0 }, { 1127383488860.0, 482723521821.0, 146764360.0 }, { 433199230.0, 146764360.0, 56221.0 } })); this.vVector1029_marginal_F = ArrayHelper.MakeUniform <VectorGaussian>(vVectorGaussian343); // Buffer for ReplicateOp_Divide.Marginal<VectorGaussian> VectorGaussian vVector1029_rep_B_toDef = default(VectorGaussian); // Message to 'vVector1029_rep' from Replicate factor vVector1029_rep_B_toDef = ReplicateOp_Divide.ToDefInit <VectorGaussian>(vVectorGaussian343); // Message to 'vVector1029_marginal' from Variable factor this.vVector1029_marginal_F = VariableOp.MarginalAverageConditional <VectorGaussian>(vVector1029_rep_B_toDef, vVectorGaussian343, this.vVector1029_marginal_F); DistributionStructArray <Gaussian, double> vdouble__1029_F = default(DistributionStructArray <Gaussian, double>); // Create array for 'vdouble__1029' Forwards messages. vdouble__1029_F = new DistributionStructArray <Gaussian, double>(1); for (int index343 = 0; index343 < 1; index343++) { vdouble__1029_F[index343] = Gaussian.Uniform(); } DistributionStructArray <Gaussian, double> vdouble__1030_F = default(DistributionStructArray <Gaussian, double>); // Create array for 'vdouble__1030' Forwards messages. vdouble__1030_F = new DistributionStructArray <Gaussian, double>(1); for (int index343 = 0; index343 < 1; index343++) { vdouble__1030_F[index343] = Gaussian.Uniform(); } DistributionRefArray <VectorGaussian, Vector> vVector1029_rep_F = default(DistributionRefArray <VectorGaussian, Vector>); DistributionRefArray <VectorGaussian, Vector> vVector1029_rep_B = default(DistributionRefArray <VectorGaussian, Vector>); // Create array for 'vVector1029_rep' Forwards messages. vVector1029_rep_F = new DistributionRefArray <VectorGaussian, Vector>(1); // Create array for 'vVector1029_rep' Backwards messages. vVector1029_rep_B = new DistributionRefArray <VectorGaussian, Vector>(1); for (int index343 = 0; index343 < 1; index343++) { vVector1029_rep_B[index343] = ArrayHelper.MakeUniform <VectorGaussian>(vVectorGaussian343); vVector1029_rep_F[index343] = ArrayHelper.MakeUniform <VectorGaussian>(vVectorGaussian343); } // Buffer for ReplicateOp_Divide.UsesAverageConditional<VectorGaussian> VectorGaussian vVector1029_rep_F_marginal = default(VectorGaussian); // Message to 'vVector1029_rep' from Replicate factor vVector1029_rep_F_marginal = ReplicateOp_Divide.MarginalInit <VectorGaussian>(vVectorGaussian343); // Message to 'vVector1029_rep' from Replicate factor vVector1029_rep_F_marginal = ReplicateOp_Divide.Marginal <VectorGaussian>(vVector1029_rep_B_toDef, vVectorGaussian343, vVector1029_rep_F_marginal); // Buffer for InnerProductOp.InnerProductAverageConditional // Create array for replicates of 'vVector1029_rep_F_index343__AMean' Vector[] vVector1029_rep_F_index343__AMean = new Vector[1]; for (int index343 = 0; index343 < 1; index343++) { // Message to 'vdouble__1030' from InnerProduct factor vVector1029_rep_F_index343__AMean[index343] = InnerProductOp.AMeanInit(vVector1029_rep_F[index343]); } // Buffer for InnerProductOp.AMean // Create array for replicates of 'vVector1029_rep_F_index343__AVariance' PositiveDefiniteMatrix[] vVector1029_rep_F_index343__AVariance = new PositiveDefiniteMatrix[1]; for (int index343 = 0; index343 < 1; index343++) { // Message to 'vdouble__1030' from InnerProduct factor vVector1029_rep_F_index343__AVariance[index343] = InnerProductOp.AVarianceInit(vVector1029_rep_F[index343]); // Message to 'vVector1029_rep' from Replicate factor vVector1029_rep_F[index343] = ReplicateOp_Divide.UsesAverageConditional <VectorGaussian>(vVector1029_rep_B[index343], vVector1029_rep_F_marginal, index343, vVector1029_rep_F[index343]); } // Create array for 'vdouble__1030_marginal' Forwards messages. this.vdouble__1030_marginal_F = new DistributionStructArray <Gaussian, double>(1); for (int index343 = 0; index343 < 1; index343++) { this.vdouble__1030_marginal_F[index343] = Gaussian.Uniform(); } // Message from use of 'vdouble__1030' DistributionStructArray <Gaussian, double> vdouble__1030_use_B = default(DistributionStructArray <Gaussian, double>); // Create array for 'vdouble__1030_use' Backwards messages. vdouble__1030_use_B = new DistributionStructArray <Gaussian, double>(1); for (int index343 = 0; index343 < 1; index343++) { vdouble__1030_use_B[index343] = Gaussian.Uniform(); // Message to 'vdouble__1030' from InnerProduct factor vVector1029_rep_F_index343__AVariance[index343] = InnerProductOp.AVariance(vVector1029_rep_F[index343], vVector1029_rep_F_index343__AVariance[index343]); // Message to 'vdouble__1030' from InnerProduct factor vVector1029_rep_F_index343__AMean[index343] = InnerProductOp.AMean(vVector1029_rep_F[index343], vVector1029_rep_F_index343__AVariance[index343], vVector1029_rep_F_index343__AMean[index343]); // Message to 'vdouble__1030' from InnerProduct factor vdouble__1030_F[index343] = InnerProductOp.InnerProductAverageConditional(vVector1029_rep_F_index343__AMean[index343], vVector1029_rep_F_index343__AVariance[index343], this.VVector__343[index343]); // Message to 'vdouble__1030_marginal' from DerivedVariable factor this.vdouble__1030_marginal_F[index343] = DerivedVariableOp.MarginalAverageConditional <Gaussian>(vdouble__1030_use_B[index343], vdouble__1030_F[index343], this.vdouble__1030_marginal_F[index343]); } // Create array for 'vdouble__1029_marginal' Forwards messages. this.vdouble__1029_marginal_F = new DistributionStructArray <Gaussian, double>(1); for (int index343 = 0; index343 < 1; index343++) { this.vdouble__1029_marginal_F[index343] = Gaussian.Uniform(); } // Message from use of 'vdouble__1029' DistributionStructArray <Gaussian, double> vdouble__1029_use_B = default(DistributionStructArray <Gaussian, double>); // Create array for 'vdouble__1029_use' Backwards messages. vdouble__1029_use_B = new DistributionStructArray <Gaussian, double>(1); for (int index343 = 0; index343 < 1; index343++) { vdouble__1029_use_B[index343] = Gaussian.Uniform(); // Message to 'vdouble__1029' from GaussianFromMeanAndVariance factor vdouble__1029_F[index343] = GaussianFromMeanAndVarianceOp.SampleAverageConditional(vdouble__1030_F[index343], 0.1); // Message to 'vdouble__1029_marginal' from Variable factor this.vdouble__1029_marginal_F[index343] = VariableOp.MarginalAverageConditional <Gaussian>(vdouble__1029_use_B[index343], vdouble__1029_F[index343], this.vdouble__1029_marginal_F[index343]); } this.Changed_vVector__343_iterationsDone = 1; }
/// <summary>Computations that depend on the observed value of vVector__134 and vdouble__402</summary> private void Changed_vVector__134_vdouble__402() { if (this.Changed_vVector__134_vdouble__402_iterationsDone == 1) { return; } this.vVector__134_marginal = new PointMass <Vector[]>(this.VVector__134); this.vdouble__402_marginal = new DistributionStructArray <Gaussian, double>(5622, delegate(int index134) { return(Gaussian.Uniform()); }); this.vdouble__402_marginal = Distribution.SetPoint <DistributionStructArray <Gaussian, double>, double[]>(this.vdouble__402_marginal, this.Vdouble__402); // The constant 'vVectorGaussian134' VectorGaussian vVectorGaussian134 = VectorGaussian.FromNatural(DenseVector.FromArray(new double[3] { 0.0, 0.0, 0.0 }), new PositiveDefiniteMatrix(new double[3, 3] { { 1.0, 0.0, 0.0 }, { 0.0, 1.0, 0.0 }, { 0.0, 0.0, 1.0 } })); this.vVector403_marginal_F = ArrayHelper.MakeUniform <VectorGaussian>(vVectorGaussian134); // Message from use of 'vdouble__403' DistributionStructArray <Gaussian, double> vdouble__403_use_B = default(DistributionStructArray <Gaussian, double>); // Create array for 'vdouble__403_use' Backwards messages. vdouble__403_use_B = new DistributionStructArray <Gaussian, double>(5622); for (int index134 = 0; index134 < 5622; index134++) { vdouble__403_use_B[index134] = Gaussian.Uniform(); // Message to 'vdouble__403_use' from GaussianFromMeanAndVariance factor vdouble__403_use_B[index134] = GaussianFromMeanAndVarianceOp.MeanAverageConditional(this.Vdouble__402[index134], 0.1); } DistributionRefArray <VectorGaussian, Vector> vVector403_rep_B = default(DistributionRefArray <VectorGaussian, Vector>); // Create array for 'vVector403_rep' Backwards messages. vVector403_rep_B = new DistributionRefArray <VectorGaussian, Vector>(5622); for (int index134 = 0; index134 < 5622; index134++) { vVector403_rep_B[index134] = ArrayHelper.MakeUniform <VectorGaussian>(vVectorGaussian134); // Message to 'vVector403_rep' from InnerProduct factor vVector403_rep_B[index134] = InnerProductOp.AAverageConditional(vdouble__403_use_B[index134], this.VVector__134[index134], vVector403_rep_B[index134]); } // Buffer for ReplicateOp_Divide.Marginal<VectorGaussian> VectorGaussian vVector403_rep_B_toDef = default(VectorGaussian); // Message to 'vVector403_rep' from Replicate factor vVector403_rep_B_toDef = ReplicateOp_Divide.ToDefInit <VectorGaussian>(vVectorGaussian134); // Message to 'vVector403_rep' from Replicate factor vVector403_rep_B_toDef = ReplicateOp_Divide.ToDef <VectorGaussian>(vVector403_rep_B, vVector403_rep_B_toDef); // Message to 'vVector403_marginal' from Variable factor this.vVector403_marginal_F = VariableOp.MarginalAverageConditional <VectorGaussian>(vVector403_rep_B_toDef, vVectorGaussian134, this.vVector403_marginal_F); DistributionStructArray <Gaussian, double> vdouble__403_F = default(DistributionStructArray <Gaussian, double>); // Create array for 'vdouble__403' Forwards messages. vdouble__403_F = new DistributionStructArray <Gaussian, double>(5622); for (int index134 = 0; index134 < 5622; index134++) { vdouble__403_F[index134] = Gaussian.Uniform(); } DistributionRefArray <VectorGaussian, Vector> vVector403_rep_F = default(DistributionRefArray <VectorGaussian, Vector>); // Create array for 'vVector403_rep' Forwards messages. vVector403_rep_F = new DistributionRefArray <VectorGaussian, Vector>(5622); for (int index134 = 0; index134 < 5622; index134++) { vVector403_rep_F[index134] = ArrayHelper.MakeUniform <VectorGaussian>(vVectorGaussian134); } // Buffer for ReplicateOp_Divide.UsesAverageConditional<VectorGaussian> VectorGaussian vVector403_rep_F_marginal = default(VectorGaussian); // Message to 'vVector403_rep' from Replicate factor vVector403_rep_F_marginal = ReplicateOp_Divide.MarginalInit <VectorGaussian>(vVectorGaussian134); // Message to 'vVector403_rep' from Replicate factor vVector403_rep_F_marginal = ReplicateOp_Divide.Marginal <VectorGaussian>(vVector403_rep_B_toDef, vVectorGaussian134, vVector403_rep_F_marginal); // Buffer for InnerProductOp.InnerProductAverageConditional // Create array for replicates of 'vVector403_rep_F_index134__AMean' Vector[] vVector403_rep_F_index134__AMean = new Vector[5622]; for (int index134 = 0; index134 < 5622; index134++) { // Message to 'vdouble__403' from InnerProduct factor vVector403_rep_F_index134__AMean[index134] = InnerProductOp.AMeanInit(vVector403_rep_F[index134]); } // Buffer for InnerProductOp.AMean // Create array for replicates of 'vVector403_rep_F_index134__AVariance' PositiveDefiniteMatrix[] vVector403_rep_F_index134__AVariance = new PositiveDefiniteMatrix[5622]; for (int index134 = 0; index134 < 5622; index134++) { // Message to 'vdouble__403' from InnerProduct factor vVector403_rep_F_index134__AVariance[index134] = InnerProductOp.AVarianceInit(vVector403_rep_F[index134]); // Message to 'vVector403_rep' from Replicate factor vVector403_rep_F[index134] = ReplicateOp_Divide.UsesAverageConditional <VectorGaussian>(vVector403_rep_B[index134], vVector403_rep_F_marginal, index134, vVector403_rep_F[index134]); } // Create array for 'vdouble__403_marginal' Forwards messages. this.vdouble__403_marginal_F = new DistributionStructArray <Gaussian, double>(5622); for (int index134 = 0; index134 < 5622; index134++) { this.vdouble__403_marginal_F[index134] = Gaussian.Uniform(); // Message to 'vdouble__403' from InnerProduct factor vVector403_rep_F_index134__AVariance[index134] = InnerProductOp.AVariance(vVector403_rep_F[index134], vVector403_rep_F_index134__AVariance[index134]); // Message to 'vdouble__403' from InnerProduct factor vVector403_rep_F_index134__AMean[index134] = InnerProductOp.AMean(vVector403_rep_F[index134], vVector403_rep_F_index134__AVariance[index134], vVector403_rep_F_index134__AMean[index134]); // Message to 'vdouble__403' from InnerProduct factor vdouble__403_F[index134] = InnerProductOp.InnerProductAverageConditional(vVector403_rep_F_index134__AMean[index134], vVector403_rep_F_index134__AVariance[index134], this.VVector__134[index134]); // Message to 'vdouble__403_marginal' from DerivedVariable factor this.vdouble__403_marginal_F[index134] = DerivedVariableOp.MarginalAverageConditional <Gaussian>(vdouble__403_use_B[index134], vdouble__403_F[index134], this.vdouble__403_marginal_F[index134]); } this.Changed_vVector__134_vdouble__402_iterationsDone = 1; }