From: <jen...@us...> - 2008-12-22 13:18:43
|
Revision: 1564 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1564&view=rev Author: jenslehmann Date: 2008-12-22 13:18:39 +0000 (Mon, 22 Dec 2008) Log Message: ----------- - added performance monitoring to EL operator Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionNode.java trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionTree.java trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java trunk/src/dl-learner/org/dllearner/refinementoperators/ELDown2.java trunk/src/dl-learner/org/dllearner/test/junit/ELDownTests.java Modified: trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionNode.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionNode.java 2008-12-22 11:08:04 UTC (rev 1563) +++ trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionNode.java 2008-12-22 13:18:39 UTC (rev 1564) @@ -37,6 +37,9 @@ import org.dllearner.core.owl.Thing; import org.dllearner.utilities.Helper; +import com.jamonapi.Monitor; +import com.jamonapi.MonitorFactory; + /** * Represents an EL description tree, which corresponds to a * description in the EL description logic. Note that an EL description tree @@ -133,6 +136,7 @@ tree.addNodeToLevel(this, level); // simulation update + Monitor mon = MonitorFactory.start("simulation update"); // the nodes, which need to be updated Set<ELDescriptionNode> update = new HashSet<ELDescriptionNode>(); @@ -182,7 +186,8 @@ // System.out.println(update); // apply updates recursively top-down - tree.updateSimulation(update); + tree.updateSimulation(update); + mon.stop(); // add all classes in label for(NamedClass nc : label) { @@ -338,6 +343,7 @@ // simulation update when extending or refining label // (same in both cases) private void labelSimulationUpdate() { + Monitor mon = MonitorFactory.start("simulation update"); // compute the nodes, which need to be updated Set<ELDescriptionNode> update = new HashSet<ELDescriptionNode>(); @@ -397,12 +403,14 @@ */ // apply updates recursively top-down - tree.updateSimulation(update); + tree.updateSimulation(update); + mon.stop(); } public void refineEdge(int edgeNumber, ObjectProperty op) { edges.get(edgeNumber).setLabel(op); + Monitor mon = MonitorFactory.start("simulation update"); // compute the nodes, which need to be updated Set<ELDescriptionNode> update = new HashSet<ELDescriptionNode>(); update.add(this); @@ -435,7 +443,8 @@ // update.add(this.parent); // apply updates recursively top-down - tree.updateSimulation(update); + tree.updateSimulation(update); + mon.stop(); } /** Modified: trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionTree.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionTree.java 2008-12-22 11:08:04 UTC (rev 1563) +++ trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionTree.java 2008-12-22 13:18:39 UTC (rev 1564) @@ -40,6 +40,9 @@ import org.dllearner.core.owl.Thing; import org.dllearner.core.owl.UnsupportedLanguageException; +import com.jamonapi.Monitor; +import com.jamonapi.MonitorFactory; + /** * Represents an EL description tree. Unlike {@link ELDescriptionNode}, this is * a tree-wide structure, i.e. it does not implement the tree structure itself, @@ -455,6 +458,7 @@ @Override @SuppressWarnings("unchecked") public ELDescriptionTree clone() { + Monitor mon = MonitorFactory.start("EL tree clone"); // clone "global" tree ELDescriptionTree treeClone = new ELDescriptionTree(rs); @@ -539,6 +543,7 @@ treeClone.levelNodeMapping.put(i, newNodes); } + mon.stop(); return treeClone; } Modified: trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java 2008-12-22 11:08:04 UTC (rev 1563) +++ trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java 2008-12-22 13:18:39 UTC (rev 1564) @@ -71,6 +71,7 @@ import org.dllearner.parser.ParseException; import org.dllearner.utilities.Helper; import org.dllearner.utilities.owl.ConceptTransformation; +import org.semanticweb.owl.inference.OWLReasonerException; /** * Reasoner for fast instance checks. It works by completely dematerialising the @@ -726,6 +727,11 @@ } @Override + public boolean isSatisfiableImpl() { + return rc.isSatisfiable(); + } + + @Override public Set<Constant> getLabelImpl(Entity entity) throws ReasoningMethodUnsupportedException { return rc.getLabel(entity); } Modified: trunk/src/dl-learner/org/dllearner/refinementoperators/ELDown2.java =================================================================== --- trunk/src/dl-learner/org/dllearner/refinementoperators/ELDown2.java 2008-12-22 11:08:04 UTC (rev 1563) +++ trunk/src/dl-learner/org/dllearner/refinementoperators/ELDown2.java 2008-12-22 13:18:39 UTC (rev 1564) @@ -45,6 +45,9 @@ import org.dllearner.core.owl.ClassHierarchy; import org.dllearner.core.owl.Thing; +import com.jamonapi.Monitor; +import com.jamonapi.MonitorFactory; + /** * EL downward refinement operator constructed by Jens Lehmann * and Christoph Haase. It takes an EL description tree as input @@ -153,6 +156,7 @@ // operation 1: label extension private Set<ELDescriptionTree> extendLabel(ELDescriptionTree tree, ELDescriptionNode v, int[] position) { + Monitor mon = MonitorFactory.start("extend label"); Set<ELDescriptionTree> refinements = new HashSet<ELDescriptionTree>(); // the index is the range of role in the edge pointing to the parent of this node @@ -179,11 +183,13 @@ } } + mon.stop(); return refinements; } // operation 2: label refinement private Set<ELDescriptionTree> refineLabel(ELDescriptionTree tree, ELDescriptionNode v, int[] position) { + Monitor mon = MonitorFactory.start("refine label"); Set<ELDescriptionTree> refinements = new HashSet<ELDescriptionTree>(); // loop through all classes in label @@ -204,12 +210,13 @@ } } } - + mon.stop(); return refinements; } // operation 3: refine edge private Set<ELDescriptionTree> refineEdge(ELDescriptionTree tree, ELDescriptionNode v, int[] position) { + Monitor mon = MonitorFactory.start("refine edge"); Set<ELDescriptionTree> refinements = new HashSet<ELDescriptionTree>(); for(int edgeNumber = 0; edgeNumber < v.getEdges().size(); edgeNumber++) { @@ -234,12 +241,13 @@ } } } - + mon.stop(); return refinements; } // operation 4: attach tree private Set<ELDescriptionTree> attachSubtree(ELDescriptionTree tree, ELDescriptionNode v, int[] position) { + Monitor mon = MonitorFactory.start("attach tree"); Set<ELDescriptionTree> refinements = new HashSet<ELDescriptionTree>(); // compute the set of most general roles such that the domain of each role is not disjoint @@ -307,7 +315,10 @@ } // refine tree using recursive operator call logger.trace("Recursive Call"); + // do not monitor recursive calls (counts time twice or more) + mon.stop(); Set<ELDescriptionTree> recRefs = refine(tp); + mon.start(); logger.trace("Recursive Call Done"); for(ELDescriptionTree tpp : recRefs) { // System.out.println("aa " + tpp.toDescriptionString()); @@ -319,12 +330,13 @@ logger.trace("M: " + m); } } - + mon.stop(); return refinements; } // create a new tree which is obtained by attaching the new tree at the given node in the tree via role r private ELDescriptionTree mergeTrees(ELDescriptionTree tree, ELDescriptionNode node, int[] position, ObjectProperty r, ELDescriptionTree newTree) { + Monitor mon = MonitorFactory.start("merge trees"); // System.out.println("merge start"); // System.out.println(tree); // System.out.println(newTree); @@ -369,6 +381,7 @@ // System.out.println(mergedTree); // System.out.println("merge end"); + mon.stop(); return mergedTree; } Modified: trunk/src/dl-learner/org/dllearner/test/junit/ELDownTests.java =================================================================== --- trunk/src/dl-learner/org/dllearner/test/junit/ELDownTests.java 2008-12-22 11:08:04 UTC (rev 1563) +++ trunk/src/dl-learner/org/dllearner/test/junit/ELDownTests.java 2008-12-22 13:18:39 UTC (rev 1564) @@ -21,6 +21,7 @@ import static org.junit.Assert.*; +import java.io.File; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -29,17 +30,23 @@ import org.dllearner.core.ComponentInitException; import org.dllearner.core.ReasonerComponent; import org.dllearner.core.owl.Description; +import org.dllearner.kb.sparql.SparqlKnowledgeSource; import org.dllearner.parser.KBParser; import org.dllearner.parser.ParseException; import org.dllearner.refinementoperators.ELDown2; import org.dllearner.refinementoperators.RefinementOperator; import org.dllearner.test.junit.TestOntologies.TestOntology; +import org.dllearner.utilities.Files; import org.dllearner.utilities.Helper; +import org.dllearner.utilities.JamonMonitorLogger; import org.dllearner.utilities.owl.ConceptComparator; import org.dllearner.utilities.owl.ConceptTransformation; import org.dllearner.utilities.statistics.Stat; import org.junit.Test; +import com.jamonapi.Monitor; +import com.jamonapi.MonitorFactory; + /** * Tests related to the EL downward refinement operator. * @@ -98,14 +105,17 @@ Set<Description> refinements = operator.refine(input); long runTime = System.nanoTime() - startTime; logger.debug("Refinement step took " + Helper.prettyPrintNanoSeconds(runTime, true, true) + "."); - boolean runStats = false; + boolean runStats = true; if(runStats) { Stat stat = new Stat(); - int runs = 100; + int runs = 1000; for(int run=0; run<runs; run++) { + Monitor refinementTime = MonitorFactory.start("extraction time"); startTime = System.nanoTime(); refinements = operator.refine(input); runTime = System.nanoTime() - startTime; + refinementTime.stop(); + stat.addNumber(runTime/1000000); } // System.out.println("Identical 2nd refinement step took " + Helper.prettyPrintNanoSeconds(runTime, true, true) + "."); @@ -123,6 +133,8 @@ assertTrue(desired.contains(refinement)); } + File jamonlog = new File("log/jamontest.html"); + Files.createFile(jamonlog, MonitorFactory.getReport()); // generated by operator (and currently corresponding to its definition): // false (http://localhost/foo#human AND EXISTS http://localhost/foo#has.(http://localhost/foo#animal AND http://localhost/foo#human This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |