Esempio n. 1
0
        /// <summary>Computations that depend on the observed value of vVector__141</summary>
        private void Changed_vVector__141()
        {
            if (this.Changed_vVector__141_iterationsDone == 1)
            {
                return;
            }
            this.vVector__141_marginal = new PointMass <Vector[]>(this.VVector__141);
            // The constant 'vVectorGaussian141'
            VectorGaussian vVectorGaussian141 = 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.vVector423_marginal_F = ArrayHelper.MakeUniform <VectorGaussian>(vVectorGaussian141);
            // Buffer for ReplicateOp_Divide.Marginal<VectorGaussian>
            VectorGaussian vVector423_rep_B_toDef = default(VectorGaussian);

            // Message to 'vVector423_rep' from Replicate factor
            vVector423_rep_B_toDef = ReplicateOp_Divide.ToDefInit <VectorGaussian>(vVectorGaussian141);
            // Message to 'vVector423_marginal' from Variable factor
            this.vVector423_marginal_F = VariableOp.MarginalAverageConditional <VectorGaussian>(vVector423_rep_B_toDef, vVectorGaussian141, this.vVector423_marginal_F);
            DistributionStructArray <Gaussian, double> vdouble__423_F = default(DistributionStructArray <Gaussian, double>);

            // Create array for 'vdouble__423' Forwards messages.
            vdouble__423_F = new DistributionStructArray <Gaussian, double>(1);
            for (int index141 = 0; index141 < 1; index141++)
            {
                vdouble__423_F[index141] = Gaussian.Uniform();
            }
            DistributionStructArray <Gaussian, double> vdouble__424_F = default(DistributionStructArray <Gaussian, double>);

            // Create array for 'vdouble__424' Forwards messages.
            vdouble__424_F = new DistributionStructArray <Gaussian, double>(1);
            for (int index141 = 0; index141 < 1; index141++)
            {
                vdouble__424_F[index141] = Gaussian.Uniform();
            }
            DistributionRefArray <VectorGaussian, Vector> vVector423_rep_F = default(DistributionRefArray <VectorGaussian, Vector>);
            DistributionRefArray <VectorGaussian, Vector> vVector423_rep_B = default(DistributionRefArray <VectorGaussian, Vector>);

            // Create array for 'vVector423_rep' Forwards messages.
            vVector423_rep_F = new DistributionRefArray <VectorGaussian, Vector>(1);
            // Create array for 'vVector423_rep' Backwards messages.
            vVector423_rep_B = new DistributionRefArray <VectorGaussian, Vector>(1);
            for (int index141 = 0; index141 < 1; index141++)
            {
                vVector423_rep_B[index141] = ArrayHelper.MakeUniform <VectorGaussian>(vVectorGaussian141);
                vVector423_rep_F[index141] = ArrayHelper.MakeUniform <VectorGaussian>(vVectorGaussian141);
            }
            // Buffer for ReplicateOp_Divide.UsesAverageConditional<VectorGaussian>
            VectorGaussian vVector423_rep_F_marginal = default(VectorGaussian);

            // Message to 'vVector423_rep' from Replicate factor
            vVector423_rep_F_marginal = ReplicateOp_Divide.MarginalInit <VectorGaussian>(vVectorGaussian141);
            // Message to 'vVector423_rep' from Replicate factor
            vVector423_rep_F_marginal = ReplicateOp_Divide.Marginal <VectorGaussian>(vVector423_rep_B_toDef, vVectorGaussian141, vVector423_rep_F_marginal);
            // Buffer for InnerProductOp.InnerProductAverageConditional
            // Create array for replicates of 'vVector423_rep_F_index141__AMean'
            Vector[] vVector423_rep_F_index141__AMean = new Vector[1];
            for (int index141 = 0; index141 < 1; index141++)
            {
                // Message to 'vdouble__424' from InnerProduct factor
                vVector423_rep_F_index141__AMean[index141] = InnerProductOp.AMeanInit(vVector423_rep_F[index141]);
            }
            // Buffer for InnerProductOp.AMean
            // Create array for replicates of 'vVector423_rep_F_index141__AVariance'
            PositiveDefiniteMatrix[] vVector423_rep_F_index141__AVariance = new PositiveDefiniteMatrix[1];
            for (int index141 = 0; index141 < 1; index141++)
            {
                // Message to 'vdouble__424' from InnerProduct factor
                vVector423_rep_F_index141__AVariance[index141] = InnerProductOp.AVarianceInit(vVector423_rep_F[index141]);
                // Message to 'vVector423_rep' from Replicate factor
                vVector423_rep_F[index141] = ReplicateOp_Divide.UsesAverageConditional <VectorGaussian>(vVector423_rep_B[index141], vVector423_rep_F_marginal, index141, vVector423_rep_F[index141]);
            }
            // Create array for 'vdouble__424_marginal' Forwards messages.
            this.vdouble__424_marginal_F = new DistributionStructArray <Gaussian, double>(1);
            for (int index141 = 0; index141 < 1; index141++)
            {
                this.vdouble__424_marginal_F[index141] = Gaussian.Uniform();
            }
            // Message from use of 'vdouble__424'
            DistributionStructArray <Gaussian, double> vdouble__424_use_B = default(DistributionStructArray <Gaussian, double>);

            // Create array for 'vdouble__424_use' Backwards messages.
            vdouble__424_use_B = new DistributionStructArray <Gaussian, double>(1);
            for (int index141 = 0; index141 < 1; index141++)
            {
                vdouble__424_use_B[index141] = Gaussian.Uniform();
                // Message to 'vdouble__424' from InnerProduct factor
                vVector423_rep_F_index141__AVariance[index141] = InnerProductOp.AVariance(vVector423_rep_F[index141], vVector423_rep_F_index141__AVariance[index141]);
                // Message to 'vdouble__424' from InnerProduct factor
                vVector423_rep_F_index141__AMean[index141] = InnerProductOp.AMean(vVector423_rep_F[index141], vVector423_rep_F_index141__AVariance[index141], vVector423_rep_F_index141__AMean[index141]);
                // Message to 'vdouble__424' from InnerProduct factor
                vdouble__424_F[index141] = InnerProductOp.InnerProductAverageConditional(vVector423_rep_F_index141__AMean[index141], vVector423_rep_F_index141__AVariance[index141], this.VVector__141[index141]);
                // Message to 'vdouble__424_marginal' from DerivedVariable factor
                this.vdouble__424_marginal_F[index141] = DerivedVariableOp.MarginalAverageConditional <Gaussian>(vdouble__424_use_B[index141], vdouble__424_F[index141], this.vdouble__424_marginal_F[index141]);
            }
            // Create array for 'vdouble__423_marginal' Forwards messages.
            this.vdouble__423_marginal_F = new DistributionStructArray <Gaussian, double>(1);
            for (int index141 = 0; index141 < 1; index141++)
            {
                this.vdouble__423_marginal_F[index141] = Gaussian.Uniform();
            }
            // Message from use of 'vdouble__423'
            DistributionStructArray <Gaussian, double> vdouble__423_use_B = default(DistributionStructArray <Gaussian, double>);

            // Create array for 'vdouble__423_use' Backwards messages.
            vdouble__423_use_B = new DistributionStructArray <Gaussian, double>(1);
            for (int index141 = 0; index141 < 1; index141++)
            {
                vdouble__423_use_B[index141] = Gaussian.Uniform();
                // Message to 'vdouble__423' from GaussianFromMeanAndVariance factor
                vdouble__423_F[index141] = GaussianFromMeanAndVarianceOp.SampleAverageConditional(vdouble__424_F[index141], 0.1);
                // Message to 'vdouble__423_marginal' from Variable factor
                this.vdouble__423_marginal_F[index141] = VariableOp.MarginalAverageConditional <Gaussian>(vdouble__423_use_B[index141], vdouble__423_F[index141], this.vdouble__423_marginal_F[index141]);
            }
            this.Changed_vVector__141_iterationsDone = 1;
        }
        /// <summary>Computations that depend on the observed value of vVector__32 and vdouble__96</summary>
        private void Changed_vVector__32_vdouble__96()
        {
            if (this.Changed_vVector__32_vdouble__96_iterationsDone == 1)
            {
                return;
            }
            this.vVector__32_marginal = new PointMass <Vector[]>(this.VVector__32);
            this.vdouble__96_marginal = new DistributionStructArray <Gaussian, double>(5622, delegate(int index32) {
                return(Gaussian.Uniform());
            });
            this.vdouble__96_marginal = Distribution.SetPoint <DistributionStructArray <Gaussian, double>, double[]>(this.vdouble__96_marginal, this.Vdouble__96);
            // The constant 'vVectorGaussian32'
            VectorGaussian vVectorGaussian32 = 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.vVector97_marginal_F = ArrayHelper.MakeUniform <VectorGaussian>(vVectorGaussian32);
            // Message from use of 'vdouble__97'
            DistributionStructArray <Gaussian, double> vdouble__97_use_B = default(DistributionStructArray <Gaussian, double>);

            // Create array for 'vdouble__97_use' Backwards messages.
            vdouble__97_use_B = new DistributionStructArray <Gaussian, double>(5622);
            for (int index32 = 0; index32 < 5622; index32++)
            {
                vdouble__97_use_B[index32] = Gaussian.Uniform();
                // Message to 'vdouble__97_use' from GaussianFromMeanAndVariance factor
                vdouble__97_use_B[index32] = GaussianFromMeanAndVarianceOp.MeanAverageConditional(this.Vdouble__96[index32], 0.1);
            }
            DistributionRefArray <VectorGaussian, Vector> vVector97_rep_B = default(DistributionRefArray <VectorGaussian, Vector>);

            // Create array for 'vVector97_rep' Backwards messages.
            vVector97_rep_B = new DistributionRefArray <VectorGaussian, Vector>(5622);
            for (int index32 = 0; index32 < 5622; index32++)
            {
                vVector97_rep_B[index32] = ArrayHelper.MakeUniform <VectorGaussian>(vVectorGaussian32);
                // Message to 'vVector97_rep' from InnerProduct factor
                vVector97_rep_B[index32] = InnerProductOp.AAverageConditional(vdouble__97_use_B[index32], this.VVector__32[index32], vVector97_rep_B[index32]);
            }
            // Buffer for ReplicateOp_Divide.Marginal<VectorGaussian>
            VectorGaussian vVector97_rep_B_toDef = default(VectorGaussian);

            // Message to 'vVector97_rep' from Replicate factor
            vVector97_rep_B_toDef = ReplicateOp_Divide.ToDefInit <VectorGaussian>(vVectorGaussian32);
            // Message to 'vVector97_rep' from Replicate factor
            vVector97_rep_B_toDef = ReplicateOp_Divide.ToDef <VectorGaussian>(vVector97_rep_B, vVector97_rep_B_toDef);
            // Message to 'vVector97_marginal' from Variable factor
            this.vVector97_marginal_F = VariableOp.MarginalAverageConditional <VectorGaussian>(vVector97_rep_B_toDef, vVectorGaussian32, this.vVector97_marginal_F);
            DistributionStructArray <Gaussian, double> vdouble__97_F = default(DistributionStructArray <Gaussian, double>);

            // Create array for 'vdouble__97' Forwards messages.
            vdouble__97_F = new DistributionStructArray <Gaussian, double>(5622);
            for (int index32 = 0; index32 < 5622; index32++)
            {
                vdouble__97_F[index32] = Gaussian.Uniform();
            }
            DistributionRefArray <VectorGaussian, Vector> vVector97_rep_F = default(DistributionRefArray <VectorGaussian, Vector>);

            // Create array for 'vVector97_rep' Forwards messages.
            vVector97_rep_F = new DistributionRefArray <VectorGaussian, Vector>(5622);
            for (int index32 = 0; index32 < 5622; index32++)
            {
                vVector97_rep_F[index32] = ArrayHelper.MakeUniform <VectorGaussian>(vVectorGaussian32);
            }
            // Buffer for ReplicateOp_Divide.UsesAverageConditional<VectorGaussian>
            VectorGaussian vVector97_rep_F_marginal = default(VectorGaussian);

            // Message to 'vVector97_rep' from Replicate factor
            vVector97_rep_F_marginal = ReplicateOp_Divide.MarginalInit <VectorGaussian>(vVectorGaussian32);
            // Message to 'vVector97_rep' from Replicate factor
            vVector97_rep_F_marginal = ReplicateOp_Divide.Marginal <VectorGaussian>(vVector97_rep_B_toDef, vVectorGaussian32, vVector97_rep_F_marginal);
            // Buffer for InnerProductOp.InnerProductAverageConditional
            // Create array for replicates of 'vVector97_rep_F_index32__AMean'
            Vector[] vVector97_rep_F_index32__AMean = new Vector[5622];
            for (int index32 = 0; index32 < 5622; index32++)
            {
                // Message to 'vdouble__97' from InnerProduct factor
                vVector97_rep_F_index32__AMean[index32] = InnerProductOp.AMeanInit(vVector97_rep_F[index32]);
            }
            // Buffer for InnerProductOp.AMean
            // Create array for replicates of 'vVector97_rep_F_index32__AVariance'
            PositiveDefiniteMatrix[] vVector97_rep_F_index32__AVariance = new PositiveDefiniteMatrix[5622];
            for (int index32 = 0; index32 < 5622; index32++)
            {
                // Message to 'vdouble__97' from InnerProduct factor
                vVector97_rep_F_index32__AVariance[index32] = InnerProductOp.AVarianceInit(vVector97_rep_F[index32]);
                // Message to 'vVector97_rep' from Replicate factor
                vVector97_rep_F[index32] = ReplicateOp_Divide.UsesAverageConditional <VectorGaussian>(vVector97_rep_B[index32], vVector97_rep_F_marginal, index32, vVector97_rep_F[index32]);
            }
            // Create array for 'vdouble__97_marginal' Forwards messages.
            this.vdouble__97_marginal_F = new DistributionStructArray <Gaussian, double>(5622);
            for (int index32 = 0; index32 < 5622; index32++)
            {
                this.vdouble__97_marginal_F[index32] = Gaussian.Uniform();
                // Message to 'vdouble__97' from InnerProduct factor
                vVector97_rep_F_index32__AVariance[index32] = InnerProductOp.AVariance(vVector97_rep_F[index32], vVector97_rep_F_index32__AVariance[index32]);
                // Message to 'vdouble__97' from InnerProduct factor
                vVector97_rep_F_index32__AMean[index32] = InnerProductOp.AMean(vVector97_rep_F[index32], vVector97_rep_F_index32__AVariance[index32], vVector97_rep_F_index32__AMean[index32]);
                // Message to 'vdouble__97' from InnerProduct factor
                vdouble__97_F[index32] = InnerProductOp.InnerProductAverageConditional(vVector97_rep_F_index32__AMean[index32], vVector97_rep_F_index32__AVariance[index32], this.VVector__32[index32]);
                // Message to 'vdouble__97_marginal' from DerivedVariable factor
                this.vdouble__97_marginal_F[index32] = DerivedVariableOp.MarginalAverageConditional <Gaussian>(vdouble__97_use_B[index32], vdouble__97_F[index32], this.vdouble__97_marginal_F[index32]);
            }
            this.Changed_vVector__32_vdouble__96_iterationsDone = 1;
        }