22.1.1.
Программа CHEF
Для демонстрации
возможностей экспертной системы, базирующейся на прецедентах, рассмотрим систему
CHEF, которая предназначалась для формирования кулинарных рецептов [Hammond,
1986]. Эта программа принимает информацию о целевых характеристиках блюда
(тип, вкусовые качества, своеобразие) и формирует подходящий рецепт. Например,
программа может получить следующий "заказ":
блюдо из
баранины (beef);
включает
брокколи (broccoli);
использует
поджаривание (stir-fry);
блюдо должно
получиться хрустящим (crisp).
Заказ оформляется
в виде выражения на специальном формальном языке:
dish(beef),
include(broccoli), method(stir-frv), texture(crisp)
Результатом
работы программы должен быть рецепт— последовательность операций, позволяющая
приготовить такое блюдо.
Получив заказ,
программа просматривает свою базу прецедентов, отыскивает в ней рецепт приготовления
аналогичного блюда и адаптирует его в соответствии с особенностями текущего
заказа (проблемы). Например, если в базе уже имеется рецепт для баранины с зеленым
горошком, его можно скопировать и вместо горошка вставить брокколи. Этим, правда,
адаптация не исчерпывается, поскольку горошек варится, а не жарится, как указано
в заказе. Раз блюдо будет жариться, значит, брокколи придется сначала измельчить
(если бы нужно было варить, то качанчики брокколи можно было бросать в воду
целиком), следовательно, первоначальный план придется дополнить еще одной операцией.
Кроме того, если кусочки баранины и броколли жарить вместе, то броколли, вероятно,
пропитается соком. Значит, в системе нужно иметь правило, которое определит
этот факт и изменит первоначальный простой план, — предложит сначала обжарить
брокколи, а затем вынуть их.
На рис. 22.1
представлена упрощенная схема той части программы CHEF, которая имеет отношение
к манипуляциям с базой прецедентов.
Рис. 22.1.
Архитектура программы CHEF
Модель извлечения
отыскивает в базе прецедентов рецепты, наиболее близкие к текущему заказу. Очевидно,
что этот модуль должен обладать способностью обращаться к базе прецедентов как
к памяти, адресуемой по содержанию, оценивать степень соответствия между набором
входных спецификаций и характеристиками выбранного прецедента и ранжировать
отобранные прецеденты на основании этой оценки.
Модуль модификации
затем копирует и переименовывает выбранный прецедент и пытается скорректировать
его в соответствии с полученной целевой спецификацией. В приведенном выше примере
подстановка "брокколи" вместо "зеленый горошек" и модификация
плана выполняются именно этим модулем.
После выполнения
всех необходимых коррекций новый рецепт записывается модулем сохранения в базу
прецедентов.
В программе CHEF корректировка неудачного плана (рецепта) в действительности выполняется отдельным модулем, который имеет доступ к специальному словарю термов, описывающих отказы, и индексированному множеству стратегий восстановления. Имеется также и специальный "симулятор", который позволяет "проиграть" сформированный рецепт и выявить в нем подводные камни, не заметные на первый взгляд. По основные модули работы с прецедентами выполняют именно те функции, которые мы описали выше.