Рекомендуемая литература. Упражнения.
;;ПРАВИЛА РАБОТЫ С КОЭФФИЦИЕНТАМИ УВЕРЕННОСТИ ;;Если в модели среды существуют две структуры с ;;одними и теми же значениями для одних и тех же ;;атрибутов, но отличаются коэффициентами ;;уверенности, то правило ;;attribute-update создает из них третью ;;структуру с новым значением и удаляет две ;;исходные. ;;Новое значение коэффициента уверенности CF ;;вычисляется по формуле: ;;cf = cfl + с£2(1 – cfl) (defrule attribute-update (task attributes) ?winel < – (property?attribute) (is?value) (cert?certl))?wine2 < – (property?attribute) (is?value) (cert?cert2)) (<>?crtl?cert2) › (bind?newcert (+?certl (?cert2 (– 1?certl)))) (assert (wine (property?attribute) (is?value) (cert?newcert))) (retract?winel) (retract?wine2)) ;;Разработайте правило preference, к которому ;;следует обращаться только в том случае, если в ;;рабочей памяти существует больше одного ;;возможного значения для некоторого атрибута. ;;Это правило должно запросить у пользователя, ;;какое значение атрибута из существующих для ;;него предпочтительнее, соответственно ;;изменить коэффициент уверенности в выбранном ;;сочетании атрибут-значение, а другое значение ;;удалить из памяти. ;Разработайте правило choose-value, которое ;;будет активизироваться в том случае, если в ;;рабочей памяти существуют две структуры, ;;характеризуемые разными значениями одного и ;;того же атрибута. Правило должно ;;выбирать структуру, у которой коэффициент ;;уверенности больше, а другую удалять. ;Разработайте правило unique, которое будет ;;активизироваться в том случае, если существует ;;только одна структура с определенным значением ;;атрибута. Это правило объявляет, что атрибут ;;окончательно определен. ;Разработайте правило unity, которое будет ;;активизироваться в том случае, если существует ;;структура, обладающая коэффициентом ;;уверенности, равным 1. ;;Это правило объявляет, что атрибут ;;окончательно определен. ;;Если все атрибуты вина определены, вывести отчет, (defrule all-attributes-done?task. < – (task attributes)?col < – (color done)?bod < – (body done)?fla < – (flavor done) (wine (property color) (is?color)) (wine (property body) (is?body)) (wine (property flavor) (is?flavor)) › (printout t crlf "Try a "?flavor " "?color " wine with a "?body " body" ;; "Попробуйте "?f lavor " "?color " вино с ;; "?body " консистенцией." t crlf) (retract?col) (retract?bod) (retract?fla) (retract?task) (assert (task brand))) ;;ПРАВИЛА, ИМЕЮЩИЕ ОТНОШЕНИЕ К ВИНУ. ;;Выбор вина по заданному описанию значений;атрибутов. ;;Правила этой группы соответствуют этапу ;;"конкретизация решения". ;;Прежде чем предложить пользователю выбрать ;;желаемый продукт, нужно сформировать список ;;кандидатов. ;;Разработайте правило go-choose, которое ;;выбирает вино с наивысшим рейтингом, если не ;;активизируются никакие другие правила, ;;дополняющие список вин. ;;Правило soave является примером правила ;;дополнения списка новым названием вина ;;(в данном случае "soave"). ;;Разработайте другие аналогичные правила. (defrule soave (task brand) (wine (property color) (is white)) (wine (property flavor) (is dry) (cert?certl)) (wine (property body) (is fine) (cert?cert2)) › (assert (wine (property brand) (is soave) (cert (min?certl?cert2)))) ) ;; ПРАВИЛА, ОРГАНИЗУЮЩИЕ ВЫБОР ПОЛЬЗОВАТЕЛЕМ ИЗ ;; СПИСКА. Пользователь отвечает на выводимый запрос вводом "yes" или "по". Разработайте правило selection, которое выбирает вино с наивысшим рейтингом и предлагает его пользователю. Разработайте правило rejection, которое активизируется после ввода пользователем отрицательного ответа на текущее предложение. Правило acceptance завершает текущий сеанс работы с программой, (defrule acceptance (task choice) (decision (re?candidate) (is yes)) › (printout t crlf "Sir/Madam has impeccable taste " ;; "Сэр/Мадам! У вас исключительно тонкий вкус! " t crlf) (halt))
II) Как можно изменить стратегию поиска, например не формировать сначала весь список, а предлагать пользователю вина сразу же после формирования очередного кандидата, причем создавать их в порядке "качества" вина?