예제 #1
0
        private static SuccessionType[,] CreateFootprintTable(PetriNet petriNet)
        {
            var transactions = petriNet.Transitions;

            var footprintTable = new SuccessionType[transactions.Count,
                                                    transactions.Count];

            for (int i = 0; i < transactions.Count; i++)
            {
                var transactionId = transactions[-(i + 1)].id;
                var childrenIds   = petriNet.GetIdsOfChildTransactions(transactionId);
                var parentIds     = petriNet.GetIdsOfParentTransactions(transactionId);

                for (int j = 0; j < transactions.Count; j++)
                {
                    footprintTable[i, j] = DetermineSuccessionType(childrenIds,
                                                                   parentIds, -(j + 1));
                }
            }
            return(footprintTable);
        }
예제 #2
0
        private static SuccessionType[,] CreateFootprintTable(Dictionary <List <string>, int> trace_frequencies,
                                                              Dictionary <string, int> transitionsNameToId)
        {
            var directSuccessions = AlphaMiner.GetDirectSuccessions(trace_frequencies);

            List <KeyValuePair <int, int> > directSucessionList = new List <KeyValuePair <int, int> >();

            foreach (var directSuccession in directSuccessions)
            {
                var key   = transitionsNameToId[directSuccession.Item1];
                var value = transitionsNameToId[directSuccession.Item2];

                directSucessionList.Add(new KeyValuePair <int, int>(key, value));
            }

            var ids = directSucessionList.Select(x => x.Key).ToList();

            ids.AddRange(directSucessionList.Select(x => x.Value).ToList());
            ids = ids.Distinct().OrderByDescending(x => x).ToList();

            var footprintTable = new SuccessionType[ids.Count, ids.Count];

            for (int i = 0; i < ids.Count; i++)
            {
                var casualityChildIdList  = directSucessionList.Where(kvp => kvp.Key == -(i + 1)).Select(kvp => kvp.Value).ToList();
                var casualityParentIdList = directSucessionList.Where(kvp => kvp.Value == -(i + 1)).Select(kvp => kvp.Key).ToList();
                var parallerIdList        = casualityChildIdList.Intersect(casualityParentIdList).ToList();

                for (int j = 0; j < ids.Count; j++)
                {
                    var nodeId = -(j + 1);
                    footprintTable[i, j] = DetermineSuccessionType(casualityChildIdList, casualityParentIdList,
                                                                   parallerIdList, nodeId);
                }
            }

            return(footprintTable);
        }