Beispiel #1
0
        public void SimpleDependencyGraphWithL1LLoop()
        {
            // Arrange
            ImportedEventLog elog = CSVImport.MakeDataFrame(heuristicCsv);

            elog.SetActivity("act");
            elog.SetCaseId("id");
            WorkflowLog wlog            = new WorkflowLog(elog);
            var         successorMatrix = new SuccessorMatrix(wlog);

            // Act
            HeuristicMinerSettings settings = new HeuristicMinerSettings {
                L1LThreshold = 0.7
            };
            DependencyGraph dependencyGraph = new DependencyGraph(successorMatrix, settings);

            // Assert
            Assert.AreEqual(successorMatrix.Activities.Count, dependencyGraph.Activities.Count);
            var start = successorMatrix.ActivityIndices[successorMatrix.StartActivities.First()];
            var end   = successorMatrix.ActivityIndices[successorMatrix.EndActivities.First()];

            Assert.AreEqual(start, dependencyGraph.StartActivity);
            Assert.AreEqual(end, dependencyGraph.EndActivity);
            Assert.IsTrue(dependencyGraph.LongDependencies.Count == 0);
            //NO INPUT FOR START ACT
            Assert.IsTrue(dependencyGraph.InputActivities[start].Count == 0);
            //NO OUTPUT FOR END ACT
            Assert.IsTrue(dependencyGraph.OutputActivities[end].Count == 0);
            //ARCS CORRECT IN
            Assert.IsTrue(dependencyGraph.InputActivities[1].SetEquals(new HashSet <int> {
                2, 3, 4
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[2].SetEquals(new HashSet <int> {
                0
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[3].SetEquals(new HashSet <int> {
                0
            }));
            //SELF LOOP
            Assert.IsTrue(dependencyGraph.InputActivities[4].SetEquals(new HashSet <int> {
                0, 4
            }));
            //ARCS CORRECT OUT
            Assert.IsTrue(dependencyGraph.OutputActivities[0].SetEquals(new HashSet <int> {
                2, 3, 4
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[2].SetEquals(new HashSet <int> {
                1
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[3].SetEquals(new HashSet <int> {
                1
            }));
            //SELF LOOP
            Assert.IsTrue(dependencyGraph.OutputActivities[4].SetEquals(new HashSet <int> {
                1, 4
            }));
        }
Beispiel #2
0
        /// <param name="workflowLog">Workflow log</param>
        /// <param name="heuristicsMinerSettings">Heuristic miner settings</param>
        public CNet(WorkflowLog workflowLog, HeuristicMinerSettings heuristicsMinerSettings)
        {
            var successorMatrix = new SuccessorMatrix(workflowLog);
            var dependencyGraph = new DependencyGraph(successorMatrix, heuristicsMinerSettings);

            IndexToActivity = dependencyGraph.Activities;
            ActivityIndices = dependencyGraph.ActivityIndices;
            FillActivities(successorMatrix);
            PrepareBindings(dependencyGraph);
            FindBindings(dependencyGraph, workflowLog);
        }
        public void MakeCNetHardLongDistanceSettings()
        {
            // Arrange
            ImportedEventLog elog = CSVImport.MakeDataFrame(hardCsv);

            elog.SetActivity("act");
            elog.SetCaseId("id");
            WorkflowLog wlog = new WorkflowLog(elog);

            // Act
            HeuristicMinerSettings settings = new HeuristicMinerSettings {
                UseLongDistance = true
            };
            CNet causalNet = HeuristicMiner.MineCNet(wlog, settings);

            // Assert
            Assert.AreEqual(2, causalNet.LongDependencies.Count);

            Assert.AreEqual(0, causalNet.StartActivity.Id);
            Assert.AreEqual(6, causalNet.EndActivity.Id);
            //ACTIVITY OCCURRENCE
            Assert.AreEqual(9, causalNet.Activities.Count);
            Assert.AreEqual(129, causalNet.Activities[0].Frequency);
            Assert.AreEqual(130, causalNet.Activities[1].Frequency);
            Assert.AreEqual(130, causalNet.Activities[2].Frequency);
            Assert.AreEqual(57, causalNet.Activities[3].Frequency);
            Assert.AreEqual(100, causalNet.Activities[4].Frequency);
            Assert.AreEqual(57, causalNet.Activities[5].Frequency);
            Assert.AreEqual(100, causalNet.Activities[6].Frequency);
            Assert.AreEqual(43, causalNet.Activities[7].Frequency);
            Assert.AreEqual(43, causalNet.Activities[8].Frequency);
            //BINDINGS
            Assert.AreEqual(1, causalNet.InputBindings[0].Count);
            Assert.AreEqual(2, causalNet.InputBindings[1].Count);
            Assert.AreEqual(1, causalNet.InputBindings[2].Count);
            Assert.AreEqual(1, causalNet.InputBindings[3].Count);
            Assert.AreEqual(2, causalNet.InputBindings[4].Count);
            Assert.AreEqual(1, causalNet.InputBindings[5].Count);
            Assert.AreEqual(2, causalNet.InputBindings[6].Count);
            Assert.AreEqual(1, causalNet.InputBindings[7].Count);
            Assert.AreEqual(1, causalNet.InputBindings[8].Count);
            Assert.AreEqual(2, causalNet.OutputBindings[0].Count);
            Assert.AreEqual(1, causalNet.OutputBindings[1].Count);
            Assert.AreEqual(3, causalNet.OutputBindings[2].Count);
            Assert.AreEqual(1, causalNet.OutputBindings[3].Count);
            Assert.AreEqual(2, causalNet.OutputBindings[4].Count);
            Assert.AreEqual(1, causalNet.OutputBindings[5].Count);
            Assert.AreEqual(0, causalNet.OutputBindings[6].Count);
            Assert.AreEqual(1, causalNet.OutputBindings[7].Count);
            Assert.AreEqual(1, causalNet.OutputBindings[8].Count);
        }
        public void MakeCNetEasyCustomSettings()
        {
            // Arrange
            ImportedEventLog elog = CSVImport.MakeDataFrame(heuristicCsv);

            elog.SetActivity("act");
            elog.SetCaseId("id");
            WorkflowLog wlog            = new WorkflowLog(elog);
            var         successorMatrix = new SuccessorMatrix(wlog);

            // Act
            HeuristicMinerSettings settings = new HeuristicMinerSettings
            {
                DependencyThreshold = 0.7, RelativeToBestThreshold = 0.15, L1LThreshold = 0.7
            };
            CNet causalNet = HeuristicMiner.MineCNet(wlog, settings);

            // Assert
            Assert.AreEqual(0, causalNet.StartActivity.Id);
            Assert.AreEqual(1, causalNet.EndActivity.Id);
            //ACTIVITY OCCURRENCE
            Assert.AreEqual(5, causalNet.Activities.Count);
            Assert.AreEqual(40, causalNet.Activities[0].Frequency);
            Assert.AreEqual(40, causalNet.Activities[1].Frequency);
            Assert.AreEqual(21, causalNet.Activities[2].Frequency);
            Assert.AreEqual(21, causalNet.Activities[3].Frequency);
            Assert.AreEqual(17, causalNet.Activities[4].Frequency);
            //Number of bindings
            Assert.AreEqual(0, causalNet.InputBindings[0].Count);
            //NEW ARC A->C
            Assert.AreEqual(5, causalNet.InputBindings[1].Count);
            Assert.AreEqual(1, causalNet.InputBindings[2].Count);
            Assert.AreEqual(1, causalNet.InputBindings[3].Count);
            //NEW ARC D->D
            Assert.AreEqual(2, causalNet.InputBindings[4].Count);
            //NEW ARC A->C
            Assert.AreEqual(5, causalNet.OutputBindings[0].Count);
            Assert.AreEqual(0, causalNet.OutputBindings[1].Count);
            Assert.AreEqual(1, causalNet.OutputBindings[2].Count);
            Assert.AreEqual(1, causalNet.OutputBindings[3].Count);
            //NEW ARC D->D
            Assert.AreEqual(2, causalNet.OutputBindings[4].Count);

            //A&B BIND FREQUENCY
            Assert.AreEqual(20, causalNet.OutputBindings[0].First(u => u.Activities.Count == 2).Frequency);
            Assert.AreEqual(20, causalNet.InputBindings[1].First(b => b.Activities.Count == 2).Frequency);
        }
Beispiel #5
0
        public void HardDependencyGraphNoL2LL1LWithoutAllTaskConnected()
        {
            // Arrange
            ImportedEventLog elog = CSVImport.MakeDataFrame(hardCsv);

            elog.SetActivity("act");
            elog.SetCaseId("id");
            WorkflowLog wlog            = new WorkflowLog(elog);
            var         successorMatrix = new SuccessorMatrix(wlog);

            // Act
            HeuristicMinerSettings settings = new HeuristicMinerSettings
            {
                L2LThreshold = 1, L1LThreshold = 1, AllTasksConnected = false
            };
            DependencyGraph dependencyGraph = new DependencyGraph(successorMatrix, settings);

            // Assert
            Assert.AreEqual(successorMatrix.Activities.Count, dependencyGraph.Activities.Count);
            var start = successorMatrix.ActivityIndices[successorMatrix.StartActivities.First()];
            var end   = successorMatrix.ActivityIndices[successorMatrix.EndActivities.First()];

            Assert.AreEqual(start, dependencyGraph.StartActivity);
            Assert.AreEqual(end, dependencyGraph.EndActivity);
            Assert.IsTrue(dependencyGraph.LongDependencies.Count == 0);
            //1 IN NO ARC A->A
            Assert.IsTrue(dependencyGraph.InputActivities[start].Count == 0);
            //NO OUTPUT FOR END ACT
            Assert.IsTrue(dependencyGraph.OutputActivities[end].Count == 0);
            //IN
            //NO BACK ARC FROM C->B and A->A
            Assert.IsTrue(dependencyGraph.InputActivities[1].SetEquals(new HashSet <int> {
                0
            }));
            //NO ARC FROM B->C
            Assert.IsTrue(dependencyGraph.InputActivities[2].SetEquals(new HashSet <int> {
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[3].SetEquals(new HashSet <int> {
                2
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[4].SetEquals(new HashSet <int> {
                3, 7
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[5].SetEquals(new HashSet <int> {
                4
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[6].SetEquals(new HashSet <int> {
                5, 8
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[7].SetEquals(new HashSet <int> {
                2
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[8].SetEquals(new HashSet <int> {
                4
            }));
            //OUT
            //NO ARC A->A
            Assert.IsTrue(dependencyGraph.OutputActivities[0].SetEquals(new HashSet <int> {
                1
            }));
            //NO ARC B->C
            Assert.IsTrue(dependencyGraph.OutputActivities[1].SetEquals(new HashSet <int> {
            }));
            //NO BACK ARC FROM C->B
            Assert.IsTrue(dependencyGraph.OutputActivities[2].SetEquals(new HashSet <int> {
                7, 3
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[3].SetEquals(new HashSet <int> {
                4
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[4].SetEquals(new HashSet <int> {
                5, 8
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[5].SetEquals(new HashSet <int> {
                6
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[7].SetEquals(new HashSet <int> {
                4
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[8].SetEquals(new HashSet <int> {
                6
            }));
        }
Beispiel #6
0
        public void HardDependencyGraphNoL1L()
        {
            // Arrange
            ImportedEventLog elog = CSVImport.MakeDataFrame(hardCsv);

            elog.SetActivity("act");
            elog.SetCaseId("id");
            WorkflowLog wlog            = new WorkflowLog(elog);
            var         successorMatrix = new SuccessorMatrix(wlog);

            // Act
            HeuristicMinerSettings settings = new HeuristicMinerSettings {
                L1LThreshold = 1
            };
            DependencyGraph dependencyGraph = new DependencyGraph(successorMatrix, settings);

            // Assert
            Assert.AreEqual(successorMatrix.Activities.Count, dependencyGraph.Activities.Count);
            var start = successorMatrix.ActivityIndices[successorMatrix.StartActivities.First()];
            var end   = successorMatrix.ActivityIndices[successorMatrix.EndActivities.First()];

            Assert.AreEqual(start, dependencyGraph.StartActivity);
            Assert.AreEqual(end, dependencyGraph.EndActivity);
            //1 NO SELF LOOP => 0
            Assert.AreEqual(0, dependencyGraph.InputActivities[start].Count);
            //NO OUTPUT FOR END ACT
            Assert.AreEqual(0, dependencyGraph.OutputActivities[end].Count);
            //IN
            Assert.IsTrue(dependencyGraph.InputActivities[1].SetEquals(new HashSet <int> {
                0, 2
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[2].SetEquals(new HashSet <int> {
                1
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[3].SetEquals(new HashSet <int> {
                2
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[4].SetEquals(new HashSet <int> {
                3, 7
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[5].SetEquals(new HashSet <int> {
                4
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[6].SetEquals(new HashSet <int> {
                5, 8
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[7].SetEquals(new HashSet <int> {
                2
            }));
            Assert.IsTrue(dependencyGraph.InputActivities[8].SetEquals(new HashSet <int> {
                4
            }));
            //OUT
            Assert.IsTrue(dependencyGraph.OutputActivities[0].SetEquals(new HashSet <int> {
                1
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[1].SetEquals(new HashSet <int> {
                2
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[2].SetEquals(new HashSet <int> {
                1, 7, 3
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[3].SetEquals(new HashSet <int> {
                4
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[4].SetEquals(new HashSet <int> {
                5, 8
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[5].SetEquals(new HashSet <int> {
                6
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[7].SetEquals(new HashSet <int> {
                4
            }));
            Assert.IsTrue(dependencyGraph.OutputActivities[8].SetEquals(new HashSet <int> {
                6
            }));
        }