private XLog[] createdXFolds() { if (log.size() < fold) fold = log.size(); XLog[] logs = new XLog[fold]; for (int i = 0; i < fold; i++) { logs[i] = factory.createLog(log.getAttributes()); } if (log.size() == fold) { int pos = 0; for (XTrace t : log) { logs[pos].add(t); pos++; } } else { boolean finish = false; while (!finish) { finish = true; for (XTrace t : log) { int pos = r.nextInt(fold); logs[pos].add(t); } for (int i = 0; i < logs.length; i++) { if (logs[i].size() == 0) { finish = false; } } if (!finish) { for (int i = 0; i < fold; i++) { logs[i].clear(); } } } } return logs; }
@Override public Measure computeMeasurement( UIPluginContext pluginContext, XEventClassifier xEventClassifier, PetrinetWithMarking petrinetWithMarking, MiningAlgorithm miningAlgorithm, XLog log) { Measure measure = new Measure(); double fitness = 0.0; this.log = log; XLog[] logs = createdXFolds(); AlignmentBasedFitness alignmentBasedFitness = new AlignmentBasedFitness(); for (int i = 0; i < fold; i++) { XLog log1 = factory.createLog(log.getAttributes()); for (int j = 0; j < fold; j++) { if (j != i) { log1.addAll(logs[j]); } } try { petrinetWithMarking = miningAlgorithm.minePetrinet(pluginContext, log1, false); Double f = alignmentBasedFitness .computeMeasurement( pluginContext, xEventClassifier, petrinetWithMarking, miningAlgorithm, logs[i]) .getValue(); fitness += (f != null) ? f : 0.0; } catch (Exception e) { return measure; } } measure.setValue(fitness / (double) fold); return measure; }