示例#1
0
        /// <summary>
        /// Creates a relation matrix accordingly to given Petri Net.
        /// </summary>
        /// <param name="net">Petri Net to be analyzed.</param>
        /// <returns>RelationMatrix of given Petri Net.</returns>
        public static RelationMatrix MakeRelationMatrix(IPetriNet net)
        {
            List <string>    activities      = GetActivities(net.Transitions);
            HashSet <string> startActivities = GetStartActivities(net.Transitions, net.StartPlace);
            HashSet <string> endActivities   = GetEndActivities(net.Transitions, net.EndPlace);
            RelationMatrix   matrix          = new RelationMatrix(activities, startActivities, endActivities);

            foreach (ITransition t in net.GetStartTransitions())
            {
                FindSuccessions(ref matrix, t, net);
            }

            var analysisOverlay = new PetriNetTokenTraverseOverlay(net);

            FindParallelism(ref matrix, analysisOverlay);

            UpdatePredecessions(ref matrix);

            return(matrix);
        }