Ejemplo n.º 1
0
        public void ValidateStates()
        {
            var enumerator = ProbabilityMatrix.GetEnumerator();

            //every row contains one probability distribution (also the initial distribution)
            while (enumerator.MoveNextRow())
            {
                // for each state there is a row. The sum of all columns in a row should be 1.0
                var probability = 0.0;
                while (enumerator.MoveNextColumn())
                {
                    if (enumerator.CurrentColumnValue != null)
                    {
                        probability += enumerator.CurrentColumnValue.Value.Value;
                    }
                    else
                    {
                        throw new Exception("Entry must not be null");
                    }
                }
                if (!Probability.IsOne(probability, 0.000000001))
                {
                    throw new Exception("Probabilities should sum up to 1");
                }
            }
        }
Ejemplo n.º 2
0
        private int ColumnToState(int state) => state;         //Do nothing! Just here to make the algorithms more clear.


        // Creating matrix phase
        // For the initial distribution the process is
        //    StartWithInitialDistribution()
        //    while(transitions to add exist) {
        //	      AddInitialTransition();
        //    }
        //    FinishInitialDistribution()
        internal void StartWithInitialDistribution()
        {
            ProbabilityMatrix.SetRow(RowOfInitialStates);
        }
Ejemplo n.º 3
0
 public void SealProbabilityMatrix()
 {
     ProbabilityMatrix.OptimizeAndSeal();
 }
Ejemplo n.º 4
0
 internal void FinishDistribution()
 {
     ProbabilityMatrix.FinishRow();
 }
Ejemplo n.º 5
0
 internal void AddTransition(int markovChainState, double probability)
 {
     ProbabilityMatrix.AddColumnValueToCurrentRow(new SparseDoubleMatrix.ColumnValue(StateToColumn(markovChainState), probability));
     Transitions++;
 }
Ejemplo n.º 6
0
 // For distribution of a state the process is
 //    StartWithNewDistribution(markovChainSourceState)
 //    while(transitions to add exist) {
 //	      AddTransition();
 //    }
 //    FinishDistribution()
 internal void StartWithNewDistribution(int markovChainSourceState)
 {
     ProbabilityMatrix.SetRow(StateToRow(markovChainSourceState));
 }
Ejemplo n.º 7
0
 internal void AddInitialTransition(int markovChainState, double probability)
 {
     // initial state probabilities are also saved in the ProbabilityMatrix
     ProbabilityMatrix.AddColumnValueToCurrentRow(new SparseDoubleMatrix.ColumnValue(StateToColumn(markovChainState), probability));
     InitialTransitions++;
 }
Ejemplo n.º 8
0
        private void makePrediction(PointQ currentCoordinate, PointQ previousCoordinate, List <PointQ> allEndPoints)
        {
            foreach (PointQ endPoint in allEndPoints)

            {
                Double previous_distance = GetDistance(previousCoordinate, endPoint);
                Double current_distance  = GetDistance(currentCoordinate, endPoint);

                //distance to endpoint is increasing which means that the pedestrian is moving away from this point and therefore moving towards another direction
                if (current_distance > previous_distance)
                {
                    //rule out this destination/Path
                    ProbabilityMatrix pM = new ProbabilityMatrix(endPoint, false);
                    listProbabilityMatrix.Add(pM);
                }

                //if distance is decreasing towards a certain endpoint this means that pedestrian is moving near to that endpoint

                else
                {
                    ProbabilityMatrix pM = new ProbabilityMatrix(endPoint, true);
                    listProbabilityMatrix.Add(pM);
                }
            }

            foreach (ProbabilityMatrix pM in listProbabilityMatrix)

            {
                //Add valid paths for calculating probabilty
                if (pM.isValid == true)
                {
                    probabilityCount += 1;
                    validDestination.Add(pM.allEndPoints);
                }
                else
                {
                    //Dont include in calculating probabilty
                }
            }

            //Total number of Paths/Routes => 6 in our case
            double totalnumberofendpoints = allEndPoints.Count();

            // total number of valid endpoints => 3 in our case
            double totalnumberofValidDestinations = validDestination.Count();

            foreach (PointQ p in validDestination)

            {
                double probability = (1 / totalnumberofValidDestinations) * 100.00;
                Console.WriteLine("The probability of pedestrian reaching the point (" + p.X + ", " + p.Y + ") is :" + probability.ToString());

                //Write Probability of Pedestrian of Valid paths in CSV file
                using (FileStream fs = new FileStream("Ped.csv", FileMode.Append, FileAccess.Write))
                {
                    StreamWriter sw = new StreamWriter(fs);
                    sw.Write("The probability of pedestrian reaching the point (" + p.X + ", " + p.Y + ") is :" + probability.ToString());
                    sw.Close();
                }
            }
        }