@Override public int compare(EvaluatedDescription<? extends Score> ed1, EvaluatedDescription<? extends Score> ed2) { return ComparisonChain.start() .compare(ed1.getAccuracy(), ed2.getAccuracy()) // higher accuracy is better .compare(getLength(ed2), getLength(ed1)) // shorter is better .compare(ed1.getDescription(), ed2.getDescription()) // syntactic sorting .result(); }
@Override public String toString() { return "subs/equivs: "+subClasses.size()+"|"+equivalents.size()+" \n"+getEvalDesc().toString()+"\n"+subClasses; }
public EvaluatedDescription asEvaluatedDescription(){ if(description == null){ description = new EvaluatedDescription(getTree().asOWLClassExpression(LiteralNodeConversionStrategy.MIN_MAX), score); } return description; }
@Override public OWLClassExpression getCurrentlyBestDescription() { return currentBestSolution.getDescription(); }
partialDescription = partialSolution.asEvaluatedDescription().getDescription(); disjuncts.add(partialDescription); posCovered.addAll(partialSolution.getTreeScore().getCoveredPositives()); combinedSolution = new EvaluatedDescription(unionDescription, score); if(combinedSolution.getAccuracy() > bestScore){ bestCombinedSolution = combinedSolution; bestCurrentScore = combinedSolution.getAccuracy();
logger.info("combined accuracy: " + dFormat.format(currentBestSolution.getAccuracy())); } else { String message = "No partial tree found which satisfies the minimal criteria."; if(currentBestSolution != null) { message += "- the best was: " + currentBestSolution.getDescription() + " with score " + currentBestSolution.getScore(); logger.info(expressionTests +" descriptions tested"); if(currentBestSolution != null) { logger.info("Combined solution:" + currentBestSolution.getDescription().toString().replace("\n", "")); logger.info(currentBestSolution.getScore().toString()); } else { logger.info("Could not find a solution in the given time.");
if(!isCandidate) { EvaluatedDescription<? extends Score> worst = bestEvaluatedDescriptions.getWorst(); double accThreshold = worst.getAccuracy(); isCandidate = (accuracy > accThreshold || (accuracy >= accThreshold && OWLClassExpressionUtils.getLength(description) < worst.getDescriptionLength())); if(forceMutualDifference) { for(EvaluatedDescription<? extends Score> ed : bestEvaluatedDescriptions.getSet()) { if(Math.abs(ed.getAccuracy()-accuracy) <= 0.00001 && ConceptTransformation.isSubdescription(niceDescription, ed.getDescription())) {
if(ed.getAccuracy() < accuracyThreshold) { return returnList; if(!filterNonMinimalDescriptions || ConceptTransformation.isDescriptionMinimal(ed.getDescription())) { OWLClassExpression d = duplicator.duplicateObject(ed.getDescription()); ed.setDescription(d);
public Node(EvaluatedDescription<? extends Score> ed, boolean root) { this.root = root; if (this.root) { accuracy = 0.0d; }else{ equivalents.add(ed); accuracy = ed.getAccuracy(); } }
if(!bestEvaluatedDescriptions.isFull() || bestEvaluatedDescriptions.getWorst().getAccuracy() < node.getAccuracy()) { EvaluatedDescription<Score> ed = new EvaluatedDescription<>(classExpression, score); bestEvaluatedDescriptions.add(ed);
/** * Returns a list of JSON encoded description including extra information * (which partially depends on the learning problem) such as the accuracy * of the learned description. * * @param id The session ID. * @param limit Maximum number of results desired. * @return A JSON string encoding learned descriptions. * @throws ClientNotKnownException Thrown if client (session ID) is not known. */ @WebMethod public String learnDescriptionsEvaluatedLimit(int id, int limit) throws ClientNotKnownException { ClientState state = getState(id); state.getLearningAlgorithm().start(); List<? extends EvaluatedDescription> descriptions = state.getLearningAlgorithm().getCurrentlyBestEvaluatedDescriptions(limit); String json = "{"; int count = 1; for(EvaluatedDescription description : descriptions) { if (count>1) json += ",\"solution" + count + "\" : " + description.asJSON(); else json += "\"solution" + count + "\" : " + description.asJSON(); count++; } json+="}"; return json; }
EvaluatedDescription bestPartialSolution = bestPartialSolutionTree.asEvaluatedDescription(); logger.info("Best partial solution: " + solutionAsString(bestPartialSolution) + "\n(" + bestPartialSolution.getScore() + ")");
@Override public int compare(EvaluatedDescription<? extends Score> o1, EvaluatedDescription<? extends Score> o2) { int ret = o2.getDescriptionLength() - o1.getDescriptionLength(); return (ret == 0) ? -1 : 0; } });
@Override public OWLClassExpression getCurrentlyBestDescription() { return currentBestSolution.getDescription(); }
partialDescription = partialSolution.asEvaluatedDescription().getDescription(); disjuncts.add(partialDescription); posCovered.addAll(partialSolution.getTreeScore().getCoveredPositives()); combinedSolution = new EvaluatedDescription(unionDescription, score); if(combinedSolution.getAccuracy() > bestScore){ bestCombinedSolution = combinedSolution; bestCurrentScore = combinedSolution.getAccuracy();
logger.info("combined accuracy: " + dFormat.format(currentBestSolution.getAccuracy())); } else { String message = "No partial tree found which satisfies the minimal criteria."; if(currentBestSolution != null) { message += "- the best was: " + currentBestSolution.getDescription() + " with score " + currentBestSolution.getScore(); logger.info("{} descriptions tested", expressionTests); if(currentBestSolution != null) { logger.info("Combined solution:{}", currentBestSolution.getDescription().toString().replace("\n", "")); logger.info(currentBestSolution.getScore().toString()); } else { logger.info("Could not find a solution in the given time.");
if(!isCandidate) { EvaluatedDescription worst = bestEvaluatedDescriptions.getWorst(); double accThreshold = worst.getAccuracy(); isCandidate = (accuracy > accThreshold || (accuracy >= accThreshold && OWLClassExpressionUtils.getLength(description) < worst.getDescriptionLength())); if(forceMutualDifference) { for(EvaluatedDescription<? extends Score> ed : bestEvaluatedDescriptions.getSet()) { if(Math.abs(ed.getAccuracy()-accuracy) <= 0.00001 && ConceptTransformation.isSubdescription(niceDescription, ed.getDescription())) {
public double getCurrentlyBestAccuracy() { return bestEvaluatedDescriptions.getBest().getAccuracy(); }
EvaluatedDescription bestPartialSolution = bestPartialSolutionTree.asEvaluatedDescription(); logger.info("Best partial solution: " + solutionAsString(bestPartialSolution) + "\n(" + bestPartialSolution.getScore() + ")");