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.
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.
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".
I created another test class dynamically on owlready with the same axiom to compare the reasoner results and functionality.
The reasoner results are different from each other. Can you explain me where the differences come from or what I am doing wrong?
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?