Hermit Debugging

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Hermit Debugging

Mehmed
This post was updated on .
Dear JiBa,

I have a question regarding the reasoner Hermit. I have different ontologies, some are simple constructed (less number of axios/classes/individuals), some are complex and they are including other ontologies.  I use owlready to read these ontologies and reason them with the Hermit. Similar to Protege the reasoning with Hermit over owlready takes for some ontologies a very long time (> minute(s)) due to complexities of ontology or may existing mistakes in the ontology.

To debug it I use the Debugger on Protege and  by hermit created the temp file or export file or log file.
The Debugger finds no problem (e.g. ontology is coherent and consistent),  by Hermit created log data is not comprehensive information to understand the problem, if the reasoner gets stuck.  You can recognize that it is a problem, but you don't know what is exact the problem or why it is occurring and how you can deal with it. Do you have any suggestions, how I have to debug the reasoner?

Another phenomenal point is the time consuming of the hermit on owlready. I tested the same ontology many times and I got different time consumption under the same conditions.  Do you have an explanation why it was so different?

Owlready2 * HermiT took 133.1376292705536 seconds
Owlready2 * HermiT took 62.45776987075806 seconds
Owlready2 * HermiT took 90.68753051757812 seconds
Owlready2 * HermiT took 46.87136745452881 seconds
Owlready2 * HermiT took 40.390302658081055 seconds
Owlready2 * HermiT took 63.536184787750244 seconds

Last point, if I use "only" by the restriction for equivalent_to the reasoning gets much worse. Maybe the missing closer axioms cause a huge solution space.  But if I only use the "some" expression the  time consumption drops drastically.

Regards, 
Mehmed
Reply | Threaded
Open this post in threaded view
|

Re: Helmet Debugging

Jiba
Administrator
Hi,

Ontology reasoning is a very complex task and I fear I have no real solution to offer... It highly depends on the content of the ontology. You may try to simplify it, i.e. to limit the number of OWL contructs used in the ontology. For instance, if you do not use the negation, reasoning is simpler. If you add even just one negation, it becomes much complex. There are several "OWL profile" (i.e. combinations of contructs) that are efficient to use, but I am not a specialist on that topic.

Regarding the variation in reasoning time, I may depend on the other programs running concurrently on your computer.

Jiba
Reply | Threaded
Open this post in threaded view
|

Re: Helmet Debugging

Mehmed
Dear JiBa,

Thank you very much for your reply. I indeed try to test my ontology in a simple form as possible, but sometimes it is difficult to get the ontology more simple. Maybe the problem arises from the complexity of the ontology. But I have to deal with them.

 Apart from that, I have another question about Hermit reasoning and the reasoning results.  I reason my ontology on Protege and Owlready2 with Hermit and get different three results.  

I have a static test class Test7 in my ontology, which is defined as equivalent_to "hasGraspingCategory some Power_Grasp".

Reasoner result on Protege

 I created another test class dynamically on owlready with the same axiom to compare the reasoner results and functionality.

Two identical classes, static and dynamically created

  The reasoner results are different from each other. Can you explain me where the differences come from or what I am doing wrong?

Reasoner results on owlready

Thank you in advance!
Reply | Threaded
Open this post in threaded view
|

Re: Helmet Debugging

Jiba
Administrator
Hi,

It seems that some individuals are missing in the second class.

This might be related to the fact that the two classes Test7 and test_class are also equivalent. This implies that inferring that X is a test_class can be considered as a trivial inferrence by the reasoner if X is already a Test7.

However, .instances() do not take equivalent classes into account -- this is a problem I fixed a few days ago in the development version of Owlready (on Bitbucket). Could you try the development version and see if you obtain the same results?

Jiba