OWL HermiT проверка отладки

Я использую HermiT v1.3.8.4 с OWLAPI v3.5.6 и столкнуться с проблемой, когда reasoner.isSatisfiable(clazz) работает вечно

Есть ли способ проверить, что делает HermiT, то есть способ получить отладочную информацию?

Моя текущая настройка выглядит примерно так

OWLReasonerFactory reasonerFactory = new Reasoner.ReasonerFactory();
OWLReasonerConfiguration config;
if (this.verbose_output) {
    ConsoleProgressMonitor progressMonitor = new ConsoleProgressMonitor();
    config = new SimpleConfiguration(
        progressMonitor
    );
} else {
    config = new SimpleConfiguration();
}
OWLReasoner reasoner = reasonerFactory.createReasoner(this.ontology, config);

...

for (OWLClass c: this.ontology.getClassesInSignature(this.include_import_closure)) {
    if (!reasoner.isSatisfiable(c)) {  // This step takes forever
        continue;
    }

    ...
}

2 ответа

Решение

Не уверен, что это поможет, но есть некоторые классы, которые связаны с отладкой, хотя я никогда не использовал их. Вы можете попробовать использовать следующий параметр конфигурации

Configuration config=new Configuration();
// Lets make HermiT open a debugger window from which we can control the 
// further actions that HermiT performs. 
// DEBUGGER_HISTORY_ON will cause HermiT to save the deriviation tree for 
// each derived conclusion. 
// DEBUGGER_NO_HISTORY will not save the derivation tree, so no causes for a 
// clash can be given, but the memory requirement is smaller. 
config.tableauMonitorType=TableauMonitorType.DEBUGGER_HISTORY_ON;
// Now we can start and create the reasoner with the above created configuration.
Reasoner hermit = new Reasoner(config,ontology);
// This will open the debugger window at runtime and it should say:
// Good morning Dr. Chandra. This is HAL. I'm ready for my first lesson.
// Derivation history is on.
// Reasoning task started: ABox satisfiability
// > 
// you can press 'c' to make HermiT continue with checking whether the ontology 
// is consistent
hermit.isSatisfiable(c); // for a class 'c'
// HermiT should now have said 'Reasoning task finished: true' in the debugger window. 
// Now, you can type 'showModel' to see all the assertions in the ABox that HermiT generated. 

В противном случае, возможно, уровень журнала мог бы помочь.

Другой способ получить обратную связь - использовать профилировщик. jvisualvm включен во все последние версии Oracle JRE, и режим сэмплера даст вам хорошее представление о том, что делает HermiT. Это не монитор прогресса, но он помогает понять, замедляет ли это размер онтологии или конкретной конструкции.

Другие вопросы по тегам