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)); }
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); } }