Есть ли у кого-нибудь пример наследования правил с помощью PyKE?

Я пытаюсь понять, как работает наследование с PyKE. Единственная информация, которую я нашел о том, как это работает, находится :

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

Как ни странно, похоже, что примеров нет, поэтому я думаю, что я упускаю что-то очевидное. Итак, теперь я столкнулся с этой проблемой: у меня есть родительская база правил bc_rules_fields_abstract_base.krb и база правил, унаследованная от этого bc_rules_fields_problem_report.krb. Все правила находятся в родительской базе правил, а 1 дополнительное правило находится в bc_rules_fields_problem_report.krb.

Независимо от того, что я делаю, Пайк всегда заявляет

      File "C:...\Python38\lib\site-packages\pyke\knowledge_engine.py", line 244, in get_kb
else: raise KeyError("knowledge_base %s not found" % kb_name)
KeyError: 'knowledge_base bc_rules_fields_problem_report not found'

Хотя вроде обнаруживает для компиляции:

      writing [compiled_krb]/compiler_bc.py
writing [compiled_krb]/allowed_states.fbc
writing [compiled_krb]/bc_rules_fields_abstract_base_bc.py
writing [compiled_krb]/bc_rules_fields_problem_report_bc.py
writing [compiled_krb]/compiled_pyke_files.py

Первая строка bc_rules_fields_problem_report.krb указана в здесьдокументации :

      extending bc_rules_fields_abstract_base

Если я напишу какой-нибудь треп вроде «расширение non_existent_rule_base_jibberish_bla_bla», я получу следующую ошибку (которая показывает, что по крайней мере синтаксис кажется правильным):

      KeyError: 'rule_base bc_rules_fields_problem_report: parent non_existent_rule_base_jibberish_bla_bla not found'

Для начала оценки я написал:

      # Compile and load .krb files in same directory that I'm in (recursively).
self.engine = knowledge_engine.engine(__file__)
self.engine.activate('bc_rules_fields_problem_report')

# Routine to populate the factbase
self._add_facts_actual_state_fields()

goal_string = 'bc_rules_fields_problem_report.ticketcheck_field_ok($field, $comment)'
with self.engine.prove_goal(goal_string, args={}) as gen: # <- This is where the error occurs.
    for vars, plan in gen:
        raw_check_results[vars['field']] = vars['comment']

По сути, я хочу, чтобы правила в bc_rules_fields_ abstract_base .krb применялись всегда, а также некоторые особые правила, например, в bc_rules_fields_ problem_report .krb. У кого-нибудь есть подсказка или хотя бы пример того, как это сделать?

0 ответов

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