показан сценарий такого взаимодействия:
На рис. 11- 4 показан сценарий такого взаимодействия:
Рис. 11-4. Взаимодействия с источником знаний.
Что такое правило? Для иллюстрации приведем (в формате Lisp) правило, касающееся знаний об общеупотребительных суффиксах:
((* I ? ?)(* I N G)(* I E S)(* I E D))
Это правило означает, что заданному шаблону
*I?? (условие -
antecedent) могут соответствовать суффиксы
ING,
IES и
IED (заключение -
consequent). В C++ можно определить следующий класс для представления правил:
class Rule {public:...
int bind(String<char>& antecedent, String<char>& consequent);int remove(Strlng<char>& antecedent);int remove(String<char>t antecedent, String<char>& conseiruent);int hasConflict(const String<char>& antecedent) const;
protected:
String<char> antecedent;List<String<char>> consequents;
};
Смысл приведенных операций полностью понятен из их наименований. Мы здесь повторно использовали некоторые классы из главы 9.
С точки зрения строения данного класса можно утверждать, что источники знаний являются разновидностью механизма вывода. Кроме того, они ассоциированы с объектами доски, поскольку находят там приложение своим усилиям. Наконец, каждый источник знаний связан с контроллером и посылает ему свои соображения. Контроллер, в свою очередь, может активизировать источники знаний.
Выразим все сказанное следующим образом:
class KnowledgeSource : public InferenceEngine, public Dependent {public:
KnowledgeSource(Blackboard*, Controller*);void reset();void evaluate();
protected:
Blackboard* blackboard;Controller* controller;UnboundedOrderedCollection<Assumption*> pastAssumptions;
};
В этот класс введен защищенный элемент данных
pastAssumptions, позволяющий сохранять всю историю предположений в целях самообучения.
Экземпляры класса
Blackboard служат для хранения объектов информационной доски. По схожим соображениям, необходим также класс
KnowledgeSources, охватывающий все источники знаний, относящиеся к решаемой задаче:
Содержание Назад Вперед