コード例 #1
0
        /// <summary>
        /// Compute optimal alignment based on a trace and a Petri net
        /// </summary>
        /// <param name="trace">Workflow trace</param>
        /// <param name="pNet">Petri net</param>
        /// <param name="traceMoveCost">Trace move cost</param>
        /// <param name="modelMoveCost">Model move cost</param>
        /// <returns>Alignment on trace</returns>
        public static List <STransition> OptimalAlignmentOnNets(PetriNet pNet1, PetriNet pNet2, int traceMoveCost = 1,
                                                                int modelMoveCost = 1)
        {
            var syncNet = new SynchronousProductNet(pNet1, pNet2, traceMoveCost, modelMoveCost);

            return(FindOptimalAlignment(syncNet));
        }
コード例 #2
0
        /// <summary>
        /// Compute optimal alignment based on a trace and a Petri net
        /// </summary>
        /// <param name="trace">Workflow trace</param>
        /// <param name="pNet">Petri net</param>
        /// <param name="traceMoveCost">Trace move cost</param>
        /// <param name="modelMoveCost">Model move cost</param>
        /// <returns>Alignment on trace</returns>
        public static List <STransition> OptimalAlignmentOnTrace(WorkflowTrace trace, PetriNet pNet, int traceMoveCost = 1,
                                                                 int modelMoveCost = 1)
        {
            var tracePNet = MakePNetFromTrace(trace);
            var syncNet   = new SynchronousProductNet(tracePNet, pNet, traceMoveCost, modelMoveCost);

            return(FindOptimalAlignment(syncNet));
        }
コード例 #3
0
        public void SyncNetHard()
        {
            // Arrange
            ImportedEventLog elog = CSVImport.MakeDataFrame(hardCsv);

            elog.SetActivity("act");
            elog.SetCaseId("id");
            WorkflowLog wlog = new WorkflowLog(elog);
            var         tNet = AlignmentUtils.MakePNetFromTrace(wlog.WorkflowTraces[23]);
            var         pNet = CNetUtils.ConvertCNetToPetriNet(HeuristicMiner.MineCNet(wlog));

            // Act
            var syncNet = new SynchronousProductNet(tNet, pNet);

            // Assert
            Assert.AreEqual(syncNet.Places.Count, pNet.Places.Count + tNet.Places.Count);
            Assert.AreEqual(pNet.Transitions.Count + 2 * tNet.Transitions.Count, syncNet.Transitions.Count);
            Assert.IsTrue(syncNet.EndPlaces.SetEquals(new HashSet <IPlace> {
                tNet.EndPlace, pNet.EndPlace
            }));
            Assert.IsTrue(syncNet.StartPlaces.SetEquals(new HashSet <IPlace> {
                tNet.StartPlace, pNet.StartPlace
            }));
        }