Оценить производительность алгоритма, который использует аргумент
Я разработал алгоритм (фрагмент кода Java), который находит конкретные пути (цепочки свойств) между двумя заданными классами в онтологии OWL-DL. Вот онтология
На самом деле, рассудитель Пелле тратит слишком много времени, чтобы ответить на мои запросы, около 5-7 секунд, чтобы проверить, является ли класс F
относится к одному к классу D
через собственность r
и этот запрос повторяется в моем алгоритме, однако, если я перезапущу его на похожих классах, он будет выполняться намного быстрее (я думаю, что это связано с моделью в памяти или кешированием памяти RAM)... Однако в первый раз это занимает около 4-5 минут (в зависимости от количества выполненных проверок).
F ⊑ =1 r.D
Эта горлышко бутылки связано с онтологией и самим мыслителем: (Если я запускаю его без мыслителя, он выполняется немедленно!)
Вопросы:
1- Могу ли я оценить производительность без учета времени рассуждения? то есть что-то вроде: его выполнение происходит немедленно, если мы игнорируем время, затраченное мыслителем!
2- Есть ли способ улучшить производительность в этой ситуации?
1 ответ
Моя догадка за дополнительное время, необходимое по первому зову, что Пелле делает другие задачи, а также (например, это может потребоваться для классификации онтологии первого).
Для того, чтобы отделить время рассуждения от вашего алгоритма, вы можете запустить свой код дважды (в одной и той же VM) и рассматривать только время, использованное во второй раз вокруг - что будет удалять любые расходы инициализации от общей суммы.