/// <param name="trace">Workflow trace</param> /// <param name="pNet">Petri net</param> /// <param name="worstCostOnModel">Worst cost on the model</param> /// <param name="traceMoveCost">Trace move cost</param> /// <param name="modelMoveCost">Model move cost</param> public AlignmentOnTrace(WorkflowTrace trace, PetriNet pNet, double worstCostOnModel, int traceMoveCost = 1, int modelMoveCost = 1) { InitCosts(traceMoveCost, modelMoveCost); InitTransitionsAndOptimalCost(trace, pNet, traceMoveCost, modelMoveCost); WorstCost = worstCostOnModel + AlignmentUtils.ComputeWorstCostOfTrace(trace, traceMoveCost); ComputeFitness(); }
/// <param name="workflowLog">Workflow log</param> /// <param name="pNet">Petri net</param> /// <param name="traceMoveCost">Trace move cost</param> /// <param name="modelMoveCost">Model move cost</param> public AlignmentOnLog(WorkflowLog workflowLog, PetriNet pNet, int traceMoveCost = 1, int modelMoveCost = 1) { TraceMoveCost = traceMoveCost; ModelMoveCost = modelMoveCost; AlignmentsOnLog = AlignmentUtils.OptimalAlignmentsOnLog(workflowLog, pNet, traceMoveCost, modelMoveCost); ComputeFitness(); }
/// <param name="pNet1">Petri net</param> /// <param name="pNet2">Petri net</param> /// <param name="pNet1MoveCost">Trace move cost</param> /// <param name="pNet2MoveCost">Model move cost</param> public AlignmentOnNets(PetriNet pNet1, PetriNet pNet2, int pNet1MoveCost = 1, int pNet2MoveCost = 1) { DistinguishPlacesAndTransitions(pNet1); InitCosts(pNet1MoveCost, pNet2MoveCost); InitTransitionsAndOptimalCost(pNet1, pNet2, pNet1MoveCost, pNet2MoveCost); WorstCost = AlignmentUtils.ComputeWorstCostOfModel(pNet1, pNet1MoveCost) + AlignmentUtils.ComputeWorstCostOfModel(pNet2, pNet2MoveCost); ComputeFitness(); }
/// <summary> /// Initialize Transitions and OptimalCost /// </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> private void InitTransitionsAndOptimalCost(WorkflowTrace trace, PetriNet pNet, int traceMoveCost, int modelMoveCost) { Transitions = AlignmentUtils.OptimalAlignmentOnTrace(trace, pNet, traceMoveCost, modelMoveCost); OptimalCost = AlignmentUtils.ComputeCostOfAlignment(Transitions); }
/// <summary> /// Initialize Transitions and OptimalCost /// </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> private void InitTransitionsAndOptimalCost(PetriNet pNet1, PetriNet pNet2, int pNet1MoveCost, int pNet2MoveCost) { Transitions = AlignmentUtils.OptimalAlignmentOnNets(pNet1, pNet2, pNet1MoveCost, pNet2MoveCost); OptimalCost = AlignmentUtils.ComputeCostOfAlignment(Transitions); }