Файл: Контрольная работа по дисциплине Системы искусственнного интеллекта Разработка экспертной системы.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 56
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ИНАЧЕ
-
ДОБАВИТЬ ФАКТ «Нет блюд подходящих по вашим критериям»
-
Результаты тестирования
Ниже представлены результаты тестирования, как видно программа последовательно задает вопросы, которые логически связаны и в результате работы программы выводится результат – информация о том, какая ИТ-профессия подходит вам.
Ответ на вопрос задаётся вручную (yes или no).
Рисунок 2 – Общий вид программы CLIPS
Рисунок 3 – Задание ответов на вопросы (yes или no)
Рисунок 4 – Полученный ответ подходящей профессии
-
Листинг реализации графического интерфейса
(deffunction ask-question (?question $?allowed-values) (printout t ?question) (bind ?answer (read)) (if (lexemep ?answer) then (bind ?answer (lowcase ?answer))) (while (not (member ?answer ?allowed-values)) do (printout t ?question) (bind ?answer (read)) (if (lexemep ?answer) then (bind ?answer (lowcase ?answer)))) ?answer ) (deffunction yes-or-no-p (?question) (bind ?response (ask-question ?question yes no y n)) (if (or (eq ?response yes) (eq ?response y)) then TRUE else FALSE)) (defrule determine-shto-poest "" => (if (yes-or-no-p "Вы хотите суп (yes/no)? ") then (assert (Potato1)) else (assert (hot)))) (defrule determine-potato1 "Картоха" (Potato1) => (if(yes-or-no-p "У вас есть картоха (yes/no)? ") then (assert (Onion1)) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-onion1 "лук" (Onion1) => (if(yes-or-no-p "У вас есть лук (yes/no)? ") then (assert (Carrot1)) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-carrot1 "морковь" (Carrot1) => (if(yes-or-no-p "У вас есть морковь (yes/no)? ") then (assert (Meat1)) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-meat1 "мясо" (Meat1) => (if(yes-or-no-p "У вас есть мясо (yes/no)? ") then (assert (cabbage)) else (assert (chicken1)))) (defrule determine-cabbage "капуста" (cabbage) => (if(yes-or-no-p "У вас есть капуста (yes/no)? ") then (assert (tomato1)) else (assert (chicken1)))) (defrule determine-tomato1 "помидоры" (tomato1) => (if(yes-or-no-p "У вас есть помидоры (yes/no)? ") then (assert (beet)) else (assert (chicken1)))) (defrule determine-beet "свекла" (beet) => (if(yes-or-no-p "У вас есть свекла (yes/no)? ") then (assert (cooking "Приготовьте Борщ: Для начала необходимо сварить бульон. Мясо вымойте, выложите в кастрюлю и залейте водой. После закипания уберите огонь до минимума и варите до мягкости мяса (время зависит от того, какое именно мясо вы выбрали). Аккуратно достаньте его из бульона после готовности. Бульон при желании процедите. Подсолите по вкусу и выложите нарезанный кубиками картофель. Варите около 10-12 минут. 4. Лук с морковью очистите, измельчите и обжарьте на сковороде с небольшим количеством растительного масла. 5. В кастрюлю с бульоном выложите обжаренные овощи и мелко нашинкованную капусту. 6. На сковороду тем временем налейте еще немного масла и выложите тертую свеклу. Обжарьте пару минут и добавьте уксус. Тушите еще минут 5, а после выложите томатную пасту или нарезанные помидоры. Томите на медленном огне еще 5-7 минут. 7. В бульон выложите мясо, предварительно нарезав его порционными кусочками, и свеклу. 8. По вкусу добавьте соль, перец, сахар и чеснок. Варите еще минут 7-10 до готовности картофеля. После снимите с огня, накройте крышкой и оставьте на полчасика настояться. Перед подачей можно добавить зелень и сметану.") (cooking "Приготовьте щи: Мясо помыть, выложить в кастрюлю. Залить холодной водой (2-2,5 л). Поставить кастрюлю на огонь, довести до кипения, снимать шумовкой пену по мере необходимости.Уменьшить огонь до небольшого, накрыть крышкой. Сварить мясной бульон до готовности мяса (около часа). Мясо можно вынуть, порезать на порционные кусочки, выложить в суп. Пока мясо варится, подготовить овощи. Почистить и помыть лук и морковь. Морковь натереть на крупной терке, лук нашинковать кубиками.Разогреть сковороду, налить растительное масло. В горячее масло выложить лук и морковь. Обжарить на масле до полуготовности, на среднем огне (1-2 минуты).Добавить томат-пасту. Если используются помидоры, то их нужно помыть, нарезать дольками. Добавить к зажарке дольки помидоров. Перемешать, продолжать обжаривать овощи еще 5—7 мин, помешивая. Тем временем нарезать капусту соломкой или квадратиками.Картофель почистить, помыть и нарезать дольками. В бульон положить нарезанную капусту, подготовленный картофель и довести до кипения. Затем положить зажарку в щи и варить классические щи из свежей капусты до готовности при слабом кипении, 15-20 минут.Перед окончанием варки можно добавить растертый с солью чеснок, перец и лавровый лист.")) else (assert (cooking "Приготовьте щи: Мясо помыть, выложить в кастрюлю. Залить холодной водой (2-2,5 л). Поставить кастрюлю на огонь, довести до кипения, снимать шумовкой пену по мере необходимости.Уменьшить огонь до небольшого, накрыть крышкой. Сварить мясной бульон до готовности мяса (около часа). Мясо можно вынуть, порезать на порционные кусочки, выложить в суп. Пока мясо варится, подготовить овощи. Почистить и помыть лук и морковь. Морковь натереть на крупной терке, лук нашинковать кубиками.Разогреть сковороду, налить растительное масло. В горячее масло выложить лук и морковь. Обжарить на масле до полуготовности, на среднем огне (1-2 минуты).Добавить томат-пасту. Если используются помидоры, то их нужно помыть, нарезать дольками. Добавить к зажарке дольки помидоров. Перемешать, продолжать обжаривать овощи еще 5—7 мин, помешивая. Тем временем нарезать капусту соломкой или квадратиками.Картофель почистить, помыть и нарезать дольками. В бульон положить нарезанную капусту, подготовленный картофель и довести до кипения. Затем положить зажарку в щи и варить классические щи из свежей капусты до готовности при слабом кипении, 15-20 минут.Перед окончанием варки можно добавить растертый с солью чеснок, перец и лавровый лист.")))) (defrule determine-chicken1 "курица" (chicken1) => (if(yes-or-no-p "У вас есть курица (yes/no)? ") then (assert (noodle)) else (assert (peas)))) (defrule determine-noodle "лапша" (noodle) => (if(yes-or-no-p "У вас есть лапша (yes/no)? ") then (assert (cooking "Приготовьте куринный суп: Выложите курицу в кастрюлю, залейте холодной водой, добавьте лавровые листья. Доведите до кипения и снимите пену. Варите куриное филе около 15 минут, после чего выложите кусочки филе на тарелку. Морковь натрите на крупной терке. Лук нарежьте мелкими кубиками. Разогрейте на сковороде растительное масло и обжарьте на нем нарезанный лук примерно 2-3 минуты. Добавьте к луку натертую морковь, перемешайте и обжаривайте лук и морковь еще 2 минуты. Картофель нарежьте средними кубиками или брусочками. Куриное филе нарежьте кусочками. Добавьте в кастрюлю с бульоном картофель и варите примерно 10 минут. После этого добавьте приготовленную зажарку. В суп с овощами добавьте куриное филе. Всыпьте в суп с курицей лапшу, аккуратно перемешайте, добавив соль и перец по вкусу. Варите куриный суп с лапшой 5-7 минут. По желанию можно добавить в суп промытую измельченную зелень петрушки.")) else (assert (peas)))) (defrule determine-peas "горох" (peas) => (if(yes-or-no-p "У вас есть горох (yes/no)? ") then (assert (cooking "Картофель очистить, помыть, нарезать кусочками. Морковь и лук репчатый очистить, помыть. Лук нарезать кубиками, морковь натереть на крупной терке. Разогреть сковороду, налить растительное масло. Выложить лук и морковь. Тушить на среднем огне, помешивая, 2-3 минуты. Поставить кастрюлю с горохом на огонь, довести до кипения. Варить на небольшом огне до готовности гороха (около часа). Горох должен развариться. В кастрюлю добавить картофель, зажарку, соль, перец и варить гороховый суп до готовности (около 20-25 минут).")) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-hot "горячее" (hot) => (if(yes-or-no-p "Вы хотите горячее (yes/no)? ") then (assert (potato2)) else (assert (salad)))) (defrule determine-potato2 "картоха2" (potato2) => (if(yes-or-no-p "У вас есть картоха (yes/no)? ") then (assert (onion2)) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-onion2 "лук2" (onion2) => (if(yes-or-no-p "У вас есть лук (yes/no)? ") then (assert (pork1)) else (assert (oven)))) (defrule determine-pork1 "свинина" (pork1) => (if(yes-or-no-p "У вас есть свинина (yes/no)? ") then (assert (cooking "Приготовьте жаренную картошку со свининой: Итак, свинину для жарки на сковороде сначала промоем, обсушим бумажным полотенцем. На разделочной поверхности с помощью ножика измельчим мясо кусочками в виде брусочков или кубиков. Перекладываем мясную нарезку на сковороду, в которой нужно разогреть растительное масло. Начинаем жарить мясо. Это время займем измельчением репчатого лука, очищенного от шелухи. Предлагаем нарезать лук тонкими полосками или полукольцами. Перекладываем луковую нарезку к мясу, продолжаем жарку. Подготовим картофель, пока мясо жарится на сковороде вместе с луком кстати, не забывайте перемешивать ингредиенты иногда. Очищаем картошку, нарезаем в форме крупной соломки или брусочков (на ваше усмотрение). Перекладываем нарезку из картофеля в сковороду. Ингредиенты перемешиваем. Сковороду накрываем крышкой, жарим так минут 5-7 на среднем огне. Затем ингредиенты солим, приправляем по вкусу перчиком. Продолжаем жарить, но стараемся часто не переворачивать ингредиенты, чтобы картофель не развалился. Хорошим дополнением к жареной картошке в конце приготовления будет свежая зелень. А саму подачу уже можно разнообразить огурчиками, овощами.")) else (assert (beef)))) (defrule determine-beef "говядина" (beef) => (if(yes-or-no-p "У вас есть говядина (yes/no)? ") then (assert (sourcream)) else (assert (mushroom)))) (defrule determine-sourcream "сметана" (sourcream) => (if(yes-or-no-p "У вас есть сметана (yes/no)? ") then (assert (cooking "Приготовьте бефстроганов: Мясо порезать на куски толщиной в два пальца. Отбить. Порезать вдоль волокон на кусочки длиной не более 4-5 см. Лук почистить, мелко порезать, обжарить на сковородке. Выложить в лук мясо. Жарить, помешивая, на большом огне 5-7 минут. Добавить муку, перемешать. Добавить 2/3 стакана горячей воды или бульона, тушить минут 10. Добавить сметану. Размешать и тушить 5 минут. Подавать бефстроганов с картофельным пюре, посыпать укропом. Гарниром может служить также рис, гречка.") (cooking "Приготовьте жаренную картошку с говядиной: Итак, говядину для жарки на сковороде сначала промоем, обсушим бумажным полотенцем. На разделочной поверхности с помощью ножика измельчим мясо кусочками в виде брусочков или кубиков. Перекладываем мясную нарезку на сковороду, в которой нужно разогреть растительное масло. Начинаем жарить мясо. Это время займем измельчением репчатого лука, очищенного от шелухи. Предлагаем нарезать лук тонкими полосками или полукольцами. Перекладываем луковую нарезку к мясу, продолжаем жарку. Подготовим картофель, пока мясо жарится на сковороде вместе с луком кстати, не забывайте перемешивать ингредиенты иногда. Очищаем картошку, нарезаем в форме крупной соломки или брусочков (на ваше усмотрение). Перекладываем нарезку из картофеля в сковороду. Ингредиенты перемешиваем. Сковороду накрываем крышкой, жарим так минут 5-7 на среднем огне. Затем ингредиенты солим, приправляем по вкусу перчиком. Продолжаем жарить, но стараемся часто не переворачивать ингредиенты, чтобы картофель не развалился. Хорошим дополнением к жареной картошке в конце приготовления будет свежая зелень. А саму подачу уже можно разнообразить огурчиками, овощами.")) else (assert (cooking "Приготовьте жаренную картошку с говядиной: Итак, говядину для жарки на сковороде сначала промоем, обсушим бумажным полотенцем. На разделочной поверхности с помощью ножика измельчим мясо кусочками в виде брусочков или кубиков. Перекладываем мясную нарезку на сковороду, в которой нужно разогреть растительное масло. Начинаем жарить мясо. Это время займем измельчением репчатого лука, очищенного от шелухи. Предлагаем нарезать лук тонкими полосками или полукольцами. Перекладываем луковую нарезку к мясу, продолжаем жарку. Подготовим картофель, пока мясо жарится на сковороде вместе с луком кстати, не забывайте перемешивать ингредиенты иногда. Очищаем картошку, нарезаем в форме крупной соломки или брусочков (на ваше усмотрение). Перекладываем нарезку из картофеля в сковороду. Ингредиенты перемешиваем. Сковороду накрываем крышкой, жарим так минут 5-7 на среднем огне. Затем ингредиенты солим, приправляем по вкусу перчиком. Продолжаем жарить, но стараемся часто не переворачивать ингредиенты, чтобы картофель не развалился. Хорошим дополнением к жареной картошке в конце приготовления будет свежая зелень. А саму подачу уже можно разнообразить огурчиками, овощами.")))) (defrule determine-mushroom "грибы" (mushroom) => (if(yes-or-no-p "У вас есть грибы (yes/no)? ") then (assert (cooking "Приготвьте жаренную картошку с грибами: Вымыть грибы, снять верхнюю пленку. Нарезать грибы удобным для вас способом. Очистить картофель от кожуры. Разрезать каждую картофелину пополам. И нарезать ее толщиной приблизительно 0,3 мм. Очистить лук, помыть. Нарезать полукольцами. На подсолнечном масле обжарить грибы, добавить к ним лук. Жарить до тех пор, пока не испарится жидкость от грибов. Снять с огня лук с грибами. Добавить картофель, посолить и поперчить. Жарить до готовности. К готовой картошке присоединить лук с грибами и чесноком, выдавленным через прессинг. Дать настояться минут 10.")) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-oven "духовка" (oven) => (if(yes-or-no-p "У вас есть духовка (yes/no)? ") then (assert (pork2)) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-pork2 "Свинина2" (pork2) => (if(yes-or-no-p "У вас есть свинина (yes/no)? ") then (assert (tomato2)) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-tomato2 "помидоры" (tomato2) => (if(yes-or-no-p "У вас есть помидоры (yes/no)? ") then (assert (mayonnaise)) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-mayonnaise "майонез" (mayonnaise) => (if(yes-or-no-p "У вас есть майонез (yes/no)? ") then (assert (cheese)) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-cheese "сыр" (cheese) => (if(yes-or-no-p "У вас есть сыр (yes/no)? ") then (assert (cooking "Приготовьте мясо по францзуски: Мясо моем и обсушиваем. Включаем духовку, разогреваем до 200 градусов. Свинину нарезаем порционными кусками толщиной 1 см. Немного отбиваем мясо, солим и перчим. Нарезаем помидоры и картошку кружочками. Натираем сыр. Дно противня немного смазываем подсолнечным маслом. Выкладываем слой картошки смазываем майонезом . На картошку - мясо. Сверху на мясо кладем помидоры. Посыпаем сыром. Помещаем мясо в разогретую духовку. Запекаем при 180 градусах примерно 40-50 минут (время зависит от толщины мяса и особенностей духовки).")) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-salad "салат" (salad) => (if(yes-or-no-p "Вы хотите салат (yes/no)? ") then (assert (chicken2)) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-chicken2 "Курица2" (chicken2) => (if(yes-or-no-p "У вас есть курица (yes/no)? ") then (assert (mayonnaise2)) else (assert (sausage)))) (defrule determine-mayonnaise2 "Майонез2" (mayonnaise2) => (if(yes-or-no-p "У вас есть майонез (yes/no)? ") then (assert (tomato3)) else (assert (sausage)))) (defrule determine-tomato3 "помидоры" (tomato3) => (if(yes-or-no-p "У вас есть помидоры (yes/no)? ") then (assert (salad2)) else (assert (sausage)))) (defrule determine-salad2 "Салат" (salad2) => (if(yes-or-no-p "У вас есть листья салата (yes/no)? ") then (assert (cheese2)) else (assert (sausage)))) (defrule determine-cheese2 "сыр" (cheese2) => (if(yes-or-no-p "У вас есть сыр (yes/no)? ") then (assert (rusks)) else (assert (sausage)))) (defrule determine-chicken2 "сухари" (rusks) => (if(yes-or-no-p "У вас есть сухари (yes/no)? ") then (assert (cooking "Приготовьте салат цезарь: Обжарить курицу на оливковом масле с добавлением небольшого количества соевого соуса. Салат нарезать и уложить на тарелки, добавить сухарики, а потом порезанные пополам помидорки черри. Полить майонезом. Затем натереть сыр и уложить сверху курицу. Подать.")) else (assert (sausage)))) (defrule determine-sausage "колбаса" (sausage) => (if(yes-or-no-p "У вас есть колбаса (yes/no)? ") then (assert (potato3)) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-potato3 "картоха" (potato3) => (if(yes-or-no-p "У вас есть картоха (yes/no)? ") then (assert (eggs)) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-eggs "яйца" (eggs) => (if(yes-or-no-p "У вас есть яйца (yes/no)? ") then (assert (carrot2)) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-carrot2 "морковь" (carrot2) => (if(yes-or-no-p "У вас есть морковь (yes/no)? ") then (assert (mayonnaise3)) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule determine-mayonnaise3 "майонез" (mayonnaise3) => (if(yes-or-no-p "У вас есть майонез (yes/no)? ") then (assert (peas2)) else (assert (repair "Нет блюд подходящих по вашим критериям")))) (defrule determine-peas2 "горох" (peas2) => (if(yes-or-no-p "У вас есть зелёный горошек (yes/no)? ") then (assert (cooking "Приготовьте оливье: Подготовьте все необходимые ингредиенты. Сварите вкрутую яйца (10 минут). Отварите картофель и морковь в подсоленной воде. Из консервированного горошка слейте жидкость. Порежьте средним кубиком морковь и картофель. Измельчить их также можно при помощи сеточки (винегретницы), которая ускорит процесс приготовления. Колбасу также порежьте кубиком и добавьте к остальным ингредиентам. Варёные яйца порежьте или тоже измельчите при помощи винегретницы. Добавьте маринованный горошек, посолите и перемешайте. Добавьте майонез. Хорошо перемешайте, чтобы все продукты были покрыты майонезом.")) else (assert (cooking "Нет блюд подходящих по вашим критериям")))) (defrule no-repairs "" (declare (salience -10)) (not (cooking ?)) => (assert (cooking "Закажите еду из кафе."))) (defrule print-cooking "" (declare (salience 10)) (cooking ?item) => (printout t crlf crlf) (printout t "Рекомендации по выбору еды:") (printout t crlf crlf) (format t " %s%n%n%n" ?item)) (defrule system-banner "" (declare (salience 10)) => (printout t crlf crlf) (printout t "Систем для выбора блюд "Что поесть" ") (printout t crlf crlf)) |
ЗАКЛЮЧЕНИЕ
В результате выполнения работы была создана экспертная система, направленная на помощь приготовления блюд из уже имеющихся продуктов. Получены навыки описания экспертных систем в среде CLIPS.