23671

Системы искусственного интеллекта. Изучение базовых команд и конструкций CLIPS

Лабораторная работа

Информатика, кибернетика и программирование

Решение: defrule datainput initialfact = printout t crlf Vvedite chislo dnei do zacheta tseloe znachenie: bind days read assert days days printout t crlf Vvedite chislo nesdelannyh laboratornyh rabot v bind works read assert works works printout t crlf Vvedite temperaturu na ulitse: bind temper read assert temper temper printout t crlf Est\' li na ulitse osadki da 1 net 0: bind rain read assert rain rain printout t crlf Is there any white rabbit da 1 net...

Русский

2015-01-29

91.5 KB

30 чел.

Федеральное агентство по образованию.

Санкт-Петербургский ордена Ленина и ордена Октябрьской Революции

Государственный Электротехнический Университет «ЛЭТИ»

Кафедра Вычислительной Техники

Лабораторная работа № 1

по дисциплине

«Системы искусственного интеллекта»

Выполнили:

тов. Гладилин Г.

тов. Гречухин М.

группа 3371

Проверил:

Пантелеев Михаил

Георгиевич

Санкт-Петербург, 2007


Задание

1. Изучение базовых команд и конструкций CLIPS.

1.1. Запустить систему CLIPS (файл clipswin.exe). Активизировать окно просмотра текущего списка фактов (подпункт “Facts Window” пункта “Windows” главного меню). Выполнить следующую последовательность действий, фиксируя после каждого шага состояние списка фактов:

  1.  сбросить систему в исходное состояние командой (clear);
  2.  выполнить начальную установку командой (reset) или комбинацией клавиш Ctrl-U;
  3.  ввести 3 любых упорядоченных факта командой (assert), например: CLIPS> (assert (n n) (m m) (p p));
  4.  повторно выполнить сброс командой (reset);
  5.  установить 3 ранее вводимых упорядоченных факта в качестве исходных фактов, используя конструкцию (deffacts);
  6.  выполнить сброс командой (reset).

1.2. Активизировать дополнительно окно просмотра агенды (подпункт “Agenda Window” пункта “Windows” главного меню). Выполнить следующую последовательность действий, фиксируя после каждого шага состояния списка фактов и агенды:

  1.  используя конструкцию (defrule), ввести три правила, такие, что антецеденты первых двух правил сопоставляются с комбинацией фактов, заданных ранее конструкцией (deffacts), а консеквенты этих правил добавляют новые факты, сопоставляемые с антецедентом третьего правила. Пусть, например, X, Y и Z – факты, заданные конструкцией (deffacts). Тогда структура вводимых правил может быть представлена следующим образом:

X & Y => V;

Y & Z  => W;

V & W => U;

  1.  выполнить по шагам активизацию правил (используя «горячую» комбинацию Ctrl-T).

2. Разработка демонстрационной экспертной системы.

2.1. Сформировать, пользуясь редактором clipsedt.exe, базу знаний демонстрационной ЭС и сохранить ее в файле rulebase.clp. ЭС должна вырабатывать рекомендации студенту накануне зачета и иметь четыре входные переменные («число дней до зачета», «количество несделанных лабораторных работ (в %)», «температура на улице» и «наличие осадков»), две промежуточные («свободное время» и «погода») и выходную переменную («рекомендуемые действия»). Диаграмма зависимости переменных показана на рисунке, в скобках указаны возможные имена переменных:

Общее количество правил в БЗ должно быть не менее 25. Количество значений переменных должно выбираться таким образом, чтобы БЗ отвечала требованию полноты, т.е. содержала правила, соответствующие любым сочетаниям значений переменных в левых частях правил. Например, если переменная «свободное время» имеет 3 значения («отсутствует», «мало» и «много»), а переменная «погода» – 2 значения («плохая» и «хорошая»), то максимальное число правил для определения переменной «действие» будет равно 6.

Решение:

(defrule data-input

 (initial-fact)

=>

 (printout t crlf "Vvedite chislo dnei do zacheta (tseloe znachenie): ")

 (bind ?days (read))

 (assert (days ?days))

 (printout t crlf "Vvedite chislo nesdelannyh laboratornyh rabot (v %) ")

 (bind ?works (read))

 (assert (works ?works))

 (printout t crlf "Vvedite temperaturu na ulitse: ")

 (bind ?temper (read))

 (assert (temper ?temper))

 (printout t crlf "Est' li na ulitse osadki? (da - 1/net - 0): ")

 (bind ?rain (read))

 (assert (rain ?rain))  

 (printout t crlf "Is there any white rabbit? (da - 1/net - 0) //HASN'T Realized: "))

(defrule R1

(days ?days)

(works ?works)

(test (= ?works 0))

=>

(printout t crlf crlf "Vse uzhe sdelano." crlf)

(assert (freetime "infinity"))

(assert (freetimecnst 0)))

(defrule R2

(days ?days)

(works ?works)

(test (and (and(> ?days 5) (<= ?days 7)) (and (<= ?works 50) (> ?works 0) )))

=>

(printout t crlf crlf "Svobodnogo vremeni mnogo" crlf)

(assert (freetime "mnogo"))

(assert (freetimecnst 1)))

(defrule R3

(days ?days)

(works ?works)

(test (and (and(> ?days 5) (<= ?days 7)) (and (<= ?works 100) (> ?works 50) )))

=>

(printout t crlf crlf "Svobodnogo vremeni ne ochen' mnogo" crlf)

(assert (freetime "ne_ochen"))

(assert (freetimecnst 2)))

(defrule R4

(days ?days)

(works ?works)

(test (and (and(> ?days 3) (<= ?days 5)) (and (<= ?works 50) (> ?works 0) )))

=>

(printout t crlf crlf "Svobodnogo vremeni mnogo" crlf)

(assert (freetime "mnogo"))

(assert (freetimecnst 1)))

(defrule R5

(days ?days)

(works ?works)

(test (and (and(> ?days 3) (<= ?days 5)) (and (<= ?works 100) (> ?works 50) )))

=>

(printout t crlf crlf "Svobodnogo vremeni ne ochen' mnogo" crlf)

(assert (freetime "ne_ochen"))

(assert (freetimecnst 2)))

(defrule R6

(days ?days)

(works ?works)

(test (and (= ?days 3) (and ( > ?works 0 ) (<= ?works 50) )))

=>

(printout t crlf crlf "Svobodnogo vremeni ne ochen' mnogo" crlf)

(assert (freetime "ne_ochen"))

(assert (freetimecnst 2)))

(defrule R7

(days ?days)

(works ?works)

(test (and (= ?days 3) (and ( > ?works 50 ) (<= ?works 100) )))

=>

(printout t crlf crlf "Svobodnogo vremeni sovsem nemnogo. Pora delat'" crlf)

(assert (freetime "pora_dalat"))

(assert (freetimecnst 3)))

(defrule R8

(days ?days)

(works ?works)

(test (and (= ?days 2) (and ( > ?works 0 ) (<= ?works 33) )))

=>

(printout t crlf crlf "Svobodnogo vremeni ne ochen' mnogo" crlf)

(assert (freetime "ne_ochen"))

(assert (freetimecnst 2)))

(defrule R9

(days ?days)

(works ?works)

(test (and (= ?days 2) (and ( > ?works 33 ) (<= ?works 66) )))

=>

(printout t crlf crlf "Svobodnogo vremeni sovsem nemnogo. Pora delat'" crlf)

(assert (freetime "pora_dalat"))

(assert (freetimecnst 3)))

(defrule R10

(days ?days)

(works ?works)

(test (and (= ?days 2) (and ( > ?works 66 ) (<= ?works 100) )))

=>

(printout t crlf crlf "Svobodnogo vremeni net -- ne uspevaem" crlf)

(assert (freetime "finish"))

(assert (freetimecnst 4)))

(defrule R11

(days ?days)

 (works ?works)

(test (and (= ?days 1) (and ( > ?works 0 ) (<= ?works 25) )))

=>

(printout t crlf crlf "Svobodnogo vremeni ne ochen' mnogo" crlf)

(assert (freetime "ne_ochen"))

(assert (freetimecnst 2)))

(defrule R12

(days ?days)

 (works ?works)

(test (and (= ?days 1) (and ( > ?works 25 ) (<= ?works 50) )))

=>

(printout t crlf crlf "Svobodnogo vremeni sovsem nemnogo. Pora delat'" crlf)

(assert (freetime "pora_dalat"))

(assert (freetimecnst 3)))

(defrule R13

(days ?days)

 (works ?works)

(test (and (= ?days 1) (and ( > ?works 50 ) (<= ?works 100) )))

=>

(printout t crlf crlf "Svobodnogo vremeni net -- ne uspevaem" crlf)

(assert (freetime "finish"))

(assert (freetimecnst 4)))

(defrule R14

 (days ?days)

(works ?works)

(test (and (= ?days 0) ( > ?works 0 )))

=>

(printout t crlf crlf "Nu kogda-to ono bylo. A seichas uzhe ne vazhno" crlf)

(assert (freetime "ppc"))

(assert (freetimecnst 5)))

(defrule R15

(temper ?temper)

(rain ?rain)

(test (> ?temper 25))

=>

(printout t crlf crlf "Pogoda ochen' horoshaya " crlf)

(assert (weather "v-good"))

(assert (weathercnst 1)))

(defrule R16

(temper ?temper)

 (rain ?rain)

(test (and(and(>= ?temper 5)(< ?temper 25)) (= ?rain 0)) )

=>

(printout t crlf crlf "Pogoda horoshaya " crlf)

(assert (weather "good"))

(assert (weathercnst 2)))

(defrule R17

 (temper ?temper)

(rain ?rain)

(test (and(and(>= ?temper 5)(< ?temper 25)) (<> ?rain 0)) )

=>

(printout t crlf crlf "Pogoda plohaya " crlf)

(assert (weather "bad"))

(assert (weathercnst 3)))

(defrule R18

(temper ?temper)

(rain ?rain)

(test (<= ?temper 5) )

=>

(printout t crlf crlf "Pogoda ochen' plohaya " crlf)

(assert (weather "v-bad "))

(assert (weathercnst 4)))

(defrule R19

(weathercnst ?weathercnst)

(freetimecnst ?freetimecnst)

(test (and(< ?freetimecnst 3)(= ?weathercnst 1)))

=>

(printout t crlf crlf "Mozhno idti gulyat'" crlf)

(assert (act "go")))

(defrule R20

(weathercnst ?weathercnst)

(freetimecnst ?freetimecnst)

(test (= ?freetimecnst 5))

=>

(printout t crlf crlf "Po povodu pogodi ne znayu, no uchit' uje pozdno" crlf)

(assert (act "nth")))

(defrule R21

(weathercnst ?weathercnst)

(freetimecnst ?freetimecnst)

(test (= ?freetimecnst 0))

=>

(printout t crlf crlf "Po povodu pogodi ne znayu -- gotovsya k sleduyuchey sessii..." crlf)

(assert (act "botan")))

(defrule R22

(weathercnst ?weathercnst)

(freetimecnst ?freetimecnst)

(test (and(= ?freetimecnst 4)(<> ?weathercnst 5)))

=>

(printout t crlf crlf "Nado uchit'!" crlf)

(assert (act "learn")))

(defrule R23

(weathercnst ?weathercnst)

(freetimecnst ?freetimecnst)

 (test (and(= ?freetimecnst 3)(= ?weathercnst 2)))

=>

(printout t crlf crlf "Luchshe uchit'sya" crlf)

(assert (act "learn")))

(defrule R24

(weathercnst ?weathercnst)

(freetimecnst ?freetimecnst)

(test (and(= ?freetimecnst 2)(= ?weathercnst 2)))

=>

(printout t crlf crlf "As u wish" crlf)

(assert (act "auw")))

(defrule R25

(weathercnst ?weathercnst)

(freetimecnst ?freetimecnst)

(test (and(= ?freetimecnst 1)(= ?weathercnst 2)))

=>

(printout t crlf crlf "As u wish" crlf)

(assert (act "auw")))

(defrule R26

(weathercnst ?weathercnst)

(freetimecnst ?freetimecnst)

(test (and( or (= ?freetimecnst 2)( = ?freetimecnst 1))(= ?weathercnst 3)))

=>

(printout t crlf crlf "Luchshe uchit'" crlf)

(assert (act "glearn")))

(defrule R27

(weathercnst ?weathercnst)

(freetimecnst ?freetimecnst)

(test (and(= ?freetimecnst 3)(= ?weathercnst 3)))

=>

(printout t crlf crlf "Luchshe uchit'" crlf)

(assert (act "glearn")))

(defrule R28

(weathercnst ?weathercnst)

(freetimecnst ?freetimecnst)

(test (and(> ?freetimecnst 0) (= ?weathercnst 4)))

=>

(printout t crlf crlf "Luchshe uchit'" crlf)

(assert (act "glearn")))


Пример выполнения программы:

Вывод:

  1.  Основные возможности и базовые команды среды CLIPS изучены.
  2.  Разработана рабочая экспертная система.

  1.  

 

А также другие работы, которые могут Вас заинтересовать

49662. Основы метрологии 3.47 MB
  В подвижных соединениях применяют только посадки с зазором в неподвижных – все три типа посадок. В ЕСДП рекомендуются к применению посадки образованные либо в системе отверстия либо в системе вала. Аналогично образуются посадки в системе вала. Любая посадка определяется следующими числовыми характеристиками: наибольшими и наименьшими предельными величинами зазоров Smx Smin или натягов Nmx Nmin средним зазором Sm или натягом Nm допуском посадки TS или TN доверительным допуском посадки TSP или TNP с доверительной вероятностью...
49664. Підвищення ефективності організації транспортного процесу при перевезенні партіонних вантажів 1.1 MB
  Мета курсового проекту – закріплення знань, отриманих в процесі вивчення дисципліни «Основи теорії транспортних процесів і систем», набуття навиків самостійної роботи та вирішення питань, повязаних із організацією транспортного процесу при вантажних автомобільних перевезеннях.
49665. Нарахування відрядної заробітної платні на підприємстві 1.06 MB
  У проекті показана робота підприємства по нарахуванню відрядної заробітної платні співробітникам цього підприємства. Нарахування заробітної платні виконується з урахуванням окладу співробітника, кількості днів перебування його у відряджені та податків.
49668. Построение модели оценки кредитоспособности заемщика 161.5 KB
  Зачастую коммерческие банки сталкиваются с проблемами неплатежей по кредиту изза того что еще на начальной стадии принятия решений о выдаче или невыдаче кредита неправильно оценили потенциальные риски что и привело к негативным результатам. На основе имеющихся данных о финансовых показателях компаний и наличия отсутствия последующих проблем с выплатой кредита мы обучим компьютерную программу только на основе данных о финансовых характеристиках компании выдавать прогноз о том сможет ли компания погасить кредит без проблем или это будет...