Exemple #1
0
        public void CalculateTokenReplayFitnessWithSameLogTest()
        {
            // Arrange
            PetriNet minedModel = AlphaMiner.mine(log);

            // Act
            var casualFitness = ConformanceChecking.TokenReplayFitness(minedModel, log);

            // Assert
            Assert.AreEqual(casualFitness, 1);
        }
Exemple #2
0
        public void CalculateCasualFootprintFitnessWithSameLogTest()
        {
            // Arrange
            PetriNet minedModel = AlphaMiner.mine(log);

            // Act
            var casualFitness = CasualFootprints.CalculateCasualFootprintFitness(minedModel, log);

            // Assert
            Assert.AreEqual(casualFitness, 1);
        }
Exemple #3
0
        public void CalculateTokenReplayFitnessWithNoisyLogTest()
        {
            // Arrange
            PetriNet minedModel = AlphaMiner.mine(log);

            // Act
            var casualFitness = ConformanceChecking.TokenReplayFitness(minedModel, log_noisy);

            // Assert
            Assert.IsTrue(casualFitness > 0.96);
            Assert.IsTrue(casualFitness < 0.97);
        }
Exemple #4
0
        public void CalculateCasualFootprintFitnessWithNoisyLogTest()
        {
            // Arrange
            PetriNet minedModel = AlphaMiner.mine(log);

            // Act
            var casualFitness = CasualFootprints.CalculateCasualFootprintFitness(minedModel, log_noisy);

            // Assert
            Assert.IsTrue(casualFitness > 0.21M);
            Assert.IsTrue(casualFitness < 0.22M);
        }
Exemple #5
0
    public static double TestAlignment(Dictionary <List <string>, int> trace_frequencies,
                                       Dictionary <List <string>, int> trace_frequencies_noisy)
    {
        var minedNet       = AlphaMiner.mine(trace_frequencies);
        var completelyFits = true;

        AlignmentBased res = new AlignmentBased();

        foreach (KeyValuePair <List <string>, int> trace in trace_frequencies_noisy)
        {
            string alignment = "";
            res.traceCount += 1;
            bool match = true;
            // Console.WriteLine(" \n");

            minedNet.InitializeTokens();
            minedNet.AddMarking(1);
            foreach (var step in trace.Key)
            {
                // Console.Write(step+"-");
                var transitionId = minedNet.TransitionNameToId(step);
                var isEnabled    = minedNet.IsEnabled(transitionId);
                if (!isEnabled)
                {
                    match = false;
                    //  Console.WriteLine(step);
                    FindOptimalAlignment(trace, minedNet, transitionId, alignment);
                    completelyFits = false;
                    break;
                }
                else
                {
                    alignment += step + " - ";
                }
                minedNet.FireTransition(transitionId);
            }
            if (match == true)
            {
                res.totalFitness += 1;
            }
        }

        if (completelyFits)
        {
            Console.WriteLine("Fitness: " + res.totalFitness / res.traceCount);
            return((double)res.totalFitness / res.traceCount);
        }
        else
        {
            return(-1);
        }
    }
Exemple #6
0
        public void AlphaMinerDetectEndActivitiesTest()
        {
            Field field = new Field {
                EventLog = GenerateTestLog()
            };

            AlphaMiner    alphaMiner = new AlphaMiner(field);
            PrivateObject priObj     = new PrivateObject(alphaMiner);

            priObj.Invoke("DetectStartAndEndActivitiesInTraces");
            HashSet <String> listOfEndActivities = (HashSet <String>)priObj.GetField("_listOfEndActivities");

            Assert.IsNotNull(listOfEndActivities);
        }
        public void mineTest()
        {
            // Arrange
            Dictionary <List <string>, int> log = FileParser.ParseXES(
                @"C:\ProcessMining\conformance-checking-c-\ProcessMiningC#\ProcessMining\extension-log.xes");

            // Act
            PetriNet minedModel = AlphaMiner.mine(log);

            // Assert
            Assert.IsNotNull(minedModel);
            Assert.AreEqual(8, minedModel.Transitions.Count);
            Assert.AreEqual(8, minedModel.TransitionsNameToId.Count);
        }
Exemple #8
0
        public void DetectAllPlacesTestOntoTrue()
        {
            Field field = new Field {
                EventLog = GenerateTestLog()
            };

            AlphaMiner    alphaMiner = new AlphaMiner(field);
            PrivateObject priObj     = new PrivateObject(alphaMiner);

            priObj.Invoke("DetectAllPlaces");
            priObj.Invoke("AddsPlacesTogether");
            priObj.Invoke("RemoveAllDuplicatePlaces");
            List <AlphaMinerPlaces> alphaPlaces = (List <AlphaMinerPlaces>)priObj.GetField("_listOfAlphaPlaces");

            List <AlphaMinerPlaces> testPlaces = new List <AlphaMinerPlaces> {
                new AlphaMinerPlaces(new HashSet <string> {
                    "A"
                }, new HashSet <string> {
                    "B", "E"
                }),
                new AlphaMinerPlaces(new HashSet <string> {
                    "A"
                }, new HashSet <string> {
                    "C", "E"
                }),
                new AlphaMinerPlaces(new HashSet <string> {
                    "C", "E"
                }, new HashSet <string> {
                    "D"
                }),
                new AlphaMinerPlaces(new HashSet <string> {
                    "B", "E"
                }, new HashSet <string> {
                    "D"
                })
            };

            Assert.IsTrue(alphaPlaces.Count.Equals(testPlaces.Count));

            foreach (AlphaMinerPlaces testPlace in testPlaces)
            {
                int count = alphaPlaces
                            .Count(k => k.PredecessorHashSet.SetEquals(testPlace.PredecessorHashSet) &&
                                   k.FollowerHashSet.SetEquals(testPlace.FollowerHashSet));
                Assert.IsTrue(count == 1);
            }
        }
Exemple #9
0
        public void DetectAllPlacesTestOntoFalse()
        {
            Field field = new Field {
                EventLog = GenerateTestLog()
            };

            AlphaMiner    alphaMiner = new AlphaMiner(field);
            PrivateObject priObj     = new PrivateObject(alphaMiner);

            priObj.Invoke("DetectAllPlaces");
            priObj.Invoke("AddsPlacesTogether");
            priObj.Invoke("RemoveAllDuplicatePlaces");
            List <AlphaMinerPlaces> alphaPlaces = (List <AlphaMinerPlaces>)priObj.GetField("_listOfAlphaPlaces");

            List <AlphaMinerPlaces> testPlaces = new List <AlphaMinerPlaces> {
                new AlphaMinerPlaces(new HashSet <string> {
                    "A"
                }, new HashSet <string> {
                    "B", "E"
                }),
                new AlphaMinerPlaces(new HashSet <string> {
                    "A"
                }, new HashSet <string> {
                    "C", "E"
                }),
                new AlphaMinerPlaces(new HashSet <string> {
                    "G", "E"
                }, new HashSet <string> {
                    "F"
                }),                                                                                  // correctly -> "C,E", "D"
                new AlphaMinerPlaces(new HashSet <string> {
                    "B", "E"
                }, new HashSet <string> {
                    "D"
                }),
                new AlphaMinerPlaces(new HashSet <string> {
                    "D"
                }, new HashSet <string> {
                    "F"
                })                                                                                   // too much
            };

            Assert.IsFalse(alphaPlaces.Count.Equals(testPlaces.Count));
            Assert.IsFalse(testPlaces[2].PredecessorHashSet.SetEquals(alphaPlaces[2].PredecessorHashSet));
            Assert.IsFalse(testPlaces[2].FollowerHashSet.SetEquals(alphaPlaces[2].FollowerHashSet));
        }
Exemple #10
0
        public void AlphaMinerBuildTheNetTest()
        {
            Field field = new Field {
                EventLog = GenerateTestLog()
            };

            AlphaMiner    alphaMiner = new AlphaMiner(field);
            PrivateObject priObj     = new PrivateObject(alphaMiner);

            priObj.Invoke("DetectAllPlaces");
            priObj.Invoke("DetectStartAndEndActivitiesInTraces");
            priObj.Invoke("AddsPlacesTogether");
            priObj.Invoke("RemoveAllDuplicatePlaces");
            priObj.Invoke("BuildTheNet");

            PetriNet petriNet   = (PetriNet)priObj.GetField("_petriNet");
            Place    startPlace = petriNet.GetPlaceByName("start");
            Place    endPlace   = petriNet.GetPlaceByName("end");

            Assert.IsNotNull(petriNet);
            Assert.IsNotNull(startPlace);
            Assert.IsNotNull(endPlace);

            //MiningAlgorithm.AlphaMiner.PetriNet = new PetriNet("");

            //MiningAlgorithm.AlphaMiner.ListOfStartActivities.Add("A");
            //MiningAlgorithm.AlphaMiner.ListOfEndActivities.Add("D");

            //MiningAlgorithm.AlphaMiner.ListOfActivities.Add("A");
            //MiningAlgorithm.AlphaMiner.ListOfActivities.Add("B");
            //MiningAlgorithm.AlphaMiner.ListOfActivities.Add("C");
            //MiningAlgorithm.AlphaMiner.ListOfActivities.Add("D");
            //MiningAlgorithm.AlphaMiner.ListOfActivities.Add("E");

            //MiningAlgorithm.AlphaMiner.ListOfAlphaPlaces = ListAlphaMinerPlaces;

            //MiningAlgorithm.AlphaMiner.BuildTheNet();
        }