public static void RunCyclingTime2()
        {
            double[]  trainingData = new double[] { 13, 17, 16, 12, 13, 12, 14, 18, 16, 16 };
            ModelData initPriors   = new ModelData(
                Gaussian.FromMeanAndPrecision(1.0, 0.01),
                Gamma.FromShapeAndScale(2.0, 0.5));

            // Train the model
            CyclistTraining cyclistTraining = new CyclistTraining();

            cyclistTraining.CreateModel();
            cyclistTraining.SetModelData(initPriors);

            ModelData posteriors1 = cyclistTraining.InferModelData(trainingData);

            Console.WriteLine("Average travel time = " + posteriors1.AverageTimeDist);
            Console.WriteLine("Traffic noise = " + posteriors1.TrafficNoiseDist);

            // Make predictions based on the trained model
            CyclistPrediction cyclistPrediction = new CyclistPrediction();

            cyclistPrediction.CreateModel();
            cyclistPrediction.SetModelData(posteriors1);

            Gaussian tomorrowsTimeDist = cyclistPrediction.InferTomorrowsTime();

            double tomorrowsMean   = tomorrowsTimeDist.GetMean();
            double tomorrowsStdDev = Math.Sqrt(tomorrowsTimeDist.GetVariance());

            Console.WriteLine("Tomorrows average time: {0:f2}", tomorrowsMean);
            Console.WriteLine("Tomorrows standard deviation: {0:f2}", tomorrowsStdDev);
            Console.WriteLine("Probability that tomorrow's time is < 18 min: {0}",
                              cyclistPrediction.InferProbabilityTimeLessThan(18.0));

            // Second round of training
            double[] trainingData2 = new double[] { 17, 19, 18, 21, 15 };

            cyclistTraining.SetModelData(posteriors1);
            ModelData posteriors2 = cyclistTraining.InferModelData(trainingData2);

            Console.WriteLine("\n2nd training pass");
            Console.WriteLine("Average travel time = " + posteriors2.AverageTimeDist);
            Console.WriteLine("Traffic noise = " + posteriors2.TrafficNoiseDist);

            // Predictions based on two rounds of training
            cyclistPrediction.SetModelData(posteriors2);

            tomorrowsTimeDist = cyclistPrediction.InferTomorrowsTime();
            tomorrowsMean     = tomorrowsTimeDist.GetMean();
            tomorrowsStdDev   = Math.Sqrt(tomorrowsTimeDist.GetVariance());

            Console.WriteLine("Tomorrows average time: {0:f2}", tomorrowsMean);
            Console.WriteLine("Tomorrows standard deviation: {0:f2}", tomorrowsStdDev);
            Console.WriteLine("Probability that tomorrow's time is < 18 min: {0}",
                              cyclistPrediction.InferProbabilityTimeLessThan(18));
        }
示例#2
0
            public void CreateModel()
            {
                CommonEngine = new InferenceEngine();

                cyclist1 = new CyclistPrediction()
                {
                    InferenceEngine = CommonEngine
                };
                cyclist1.CreateModel();
                cyclist2 = new CyclistPrediction()
                {
                    InferenceEngine = CommonEngine
                };
                cyclist2.CreateModel();
                cyclist3 = new CyclistPrediction()
                {
                    InferenceEngine = CommonEngine
                };
                cyclist3.CreateModel();
                cyclist4 = new CyclistPrediction()
                {
                    InferenceEngine = CommonEngine
                };
                cyclist4.CreateModel();
                cyclist5 = new CyclistPrediction()
                {
                    InferenceEngine = CommonEngine
                };
                cyclist5.CreateModel();
                cyclist6 = new CyclistPrediction()
                {
                    InferenceEngine = CommonEngine
                };
                cyclist6.CreateModel();

                using (Variable.Case(winner, 0))
                {
                    Variable.ConstrainTrue(cyclist1.TomorrowsTime < cyclist2.TomorrowsTime & cyclist1.TomorrowsTime < cyclist3.TomorrowsTime &
                                           cyclist1.TomorrowsTime < cyclist4.TomorrowsTime & cyclist1.TomorrowsTime < cyclist5.TomorrowsTime &
                                           cyclist1.TomorrowsTime < cyclist6.TomorrowsTime);
                }
                using (Variable.Case(winner, 1))
                {
                    Variable.ConstrainTrue(cyclist2.TomorrowsTime < cyclist1.TomorrowsTime & cyclist2.TomorrowsTime < cyclist3.TomorrowsTime &
                                           cyclist2.TomorrowsTime < cyclist4.TomorrowsTime & cyclist2.TomorrowsTime < cyclist5.TomorrowsTime &
                                           cyclist2.TomorrowsTime < cyclist6.TomorrowsTime);
                }
                using (Variable.Case(winner, 2))
                {
                    Variable.ConstrainTrue(cyclist3.TomorrowsTime < cyclist1.TomorrowsTime & cyclist3.TomorrowsTime < cyclist2.TomorrowsTime &
                                           cyclist3.TomorrowsTime < cyclist4.TomorrowsTime & cyclist3.TomorrowsTime < cyclist5.TomorrowsTime &
                                           cyclist3.TomorrowsTime < cyclist6.TomorrowsTime);
                }
                using (Variable.Case(winner, 3))
                {
                    Variable.ConstrainTrue(cyclist4.TomorrowsTime < cyclist1.TomorrowsTime & cyclist4.TomorrowsTime < cyclist2.TomorrowsTime &
                                           cyclist4.TomorrowsTime < cyclist3.TomorrowsTime & cyclist4.TomorrowsTime < cyclist5.TomorrowsTime &
                                           cyclist4.TomorrowsTime < cyclist6.TomorrowsTime);
                }
                using (Variable.Case(winner, 4))
                {
                    Variable.ConstrainTrue(cyclist5.TomorrowsTime < cyclist1.TomorrowsTime & cyclist5.TomorrowsTime < cyclist2.TomorrowsTime &
                                           cyclist5.TomorrowsTime < cyclist3.TomorrowsTime & cyclist5.TomorrowsTime < cyclist4.TomorrowsTime &
                                           cyclist5.TomorrowsTime < cyclist6.TomorrowsTime);
                }
                using (Variable.Case(winner, 5))
                {
                    Variable.ConstrainTrue(cyclist6.TomorrowsTime < cyclist1.TomorrowsTime & cyclist6.TomorrowsTime < cyclist2.TomorrowsTime &
                                           cyclist6.TomorrowsTime < cyclist3.TomorrowsTime & cyclist6.TomorrowsTime < cyclist4.TomorrowsTime &
                                           cyclist6.TomorrowsTime < cyclist5.TomorrowsTime);
                }
            }