Разработка экспертной системы для определения причины неисправности автомобиля по заданным отклонениям в его работе средствами CLIPS

Изучение теории продукционных моделей и экспертных систем, а также предметной области, необходимой для реализации экспертной системы. Проектирование и разработка экспертной системы определения неполадок в работе автомобиля по характерным признакам.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 24.04.2020
Размер файла 31,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru//

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Челябинский государственный педагогический университет»

Факультет информатики

Кафедра информатики информационных технологий и методики обучения информатике

Курсовая работа

Разработка экспертной системы для определения причины неисправности автомобиля по заданным отклонениям в его работе средствами CLIPS

Руководитель: к.п.н., доцент

Иванова М.И.

Автор работы: Петров А.Н.

Студент 44АА

Челябинск - 2014

Введение

экспертная система неполадка

Целью данной курсовой работы является изучение теории продукционных моделей и экспертных систем, а также предметной области, необходимой для реализации экспертной системы

Экспертные системы возникли как значительный практический результат в применении и развитии методов искусственного интеллекта - совокупности научных дисциплин, изучающих методы решения задач интеллектуального (творческого) характера с использованием ЭВМ.

Область искусственного интеллекта имеет более чем сорокалетнюю историю развития. С самого начала в ней рассматривался ряд весьма сложных задач, которые, наряду с другими, и до сих пор являются предметом исследований: автоматические доказательства теорем, машинный перевод, распознавание изображений и анализ сцен, планирование действий роботов, алгоритмы и стратегии игр.

Экспертная система - это набор программ, выполняющий функции эксперта при решении задач из некоторой предметной области. Экспертные системы выдают советы, проводят анализ, дают консультации, ставят диагноз. Практическое применение экспертных систем на предприятиях способствует эффективности работы и повышению квалификации специалистов.

Главным достоинством экспертных систем является возможность накопления знаний и сохранение их длительное время. В отличие от человека к любой информации экспертные системы подходят объективно, что улучшает качество проводимой экспертизы.

При создании экспертных систем возникает ряд затруднений. Это, прежде всего, связано с тем, что заказчик не всегда может точно сформулировать свои требования к разрабатываемой системе. Также возможно возникновение трудностей чисто психологического порядка: при создании базы знаний системы эксперт может препятствовать передаче своих знаний, опасаясь, что впоследствии его заменят «машиной». Но эти страхи не обоснованы, так как экспертные системы не способны обучаться, они не обладают здравым смыслом, интуицией. Но в настоящее время ведутся разработки экспертных систем, реализующих идею самообучения. Также экспертные системы неприменимы в больших предметных областях и в тех областях, где отсутствуют эксперты. Причиной повышенного интереса, который экспертные системы вызывают к себе на протяжении всего своего существования, является возможность их применения к решению задач из самых различных областей человеческой деятельности.

Задачей данной курсовой работы является разработка экспертной системы определения неполадок в работе автомобиля по характерным признакам. Данная экспертная система поможет пользователю определить поломку и способ её ремонта, но только в том случае, если он будет честно отвечать на поставленные вопросы. Данная система реализована в ознакомительных целях и имеет знания о небольшом количестве неисправностей и их симптомах. Проект с лёгкостью может быть доработан до высокого уровня обслуживания (высокой точности определения поломки) путем добавления в проект новых знаний о существующих неполадках.

Разработка модели

Продукционные модели можно считать наиболее распространенными моделями представления знаний. Продукционная модель - это модель, основанная на правилах, позволяющая представить знание в виде предложений типа:

«ЕСЛИ условие, ТО действие»

Продукционная модель обладает тем недостатком, что при накоплении достаточно большого числа (порядка нескольких сотен) продукций они начинают противоречить друг другу.

В общем случае продукционную модель можно представить в следующем виде:

i = < S; L; A -> B>

S - описание класса ситуаций;

L - условие, при котором правило активизируется

A -> B - ядро продукции

Системы обработки знаний, использующие продукционную модель, получили название «продукционных систем». В состав экспертных систем продукционного типа входят: база правил (знаний), рабочая память и интерпретатор правил (решатель), реализующий определенный механизм логического вывода. Любое продукционное правило, содержащееся в базе знаний, состоит из двух частей: антецедента и консеквента. Антецедент - это посылка правила (условная часть) и состоящая из элементарных предложений, соединенных логическими связками «и», «или». Консеквент (заключение) включает одно или несколько предложений, которые выражают либо некоторый факт, либо указание на определенное действие, подлежащее исполнению. Продукционные правила принято записывать в виде антецедент-консеквент.

Примеры продукционных правил:

ЕСЛИ

«Двигатель не заводится»

И

«Плохая искра»

ИЛИ

«Малая мощность»

ТО

«Нужно оценить состояние контактов»

Любое правило состоит из одной или нескольких пар «атрибут-значение». В рабочей памяти систем, основанных на продукционных моделях, хранятся пары атрибут-значение, истинность которых установлена в процессе решения конкретной задачи к некоторому текущему моменту времени. Содержимое рабочей памяти изменяется в процессе решения задачи. Это происходит по мере срабатывания правил. Правило срабатывает, если при сопоставлении фактов, содержащихся в рабочей памяти, с антецедентом анализируемого правила имеет место совпадение, при этом заключение сработавшего правила заносится в рабочую память. Поэтому в процессе логического вывода объём фактов в рабочей памяти, как правило, увеличивается (уменьшаться он может в том случае, если действие какого-нибудь правила состоит в удалении фактов из рабочей памяти). В процессе логического вывода каждое правило из базы правил может сработать только один раз.

Существуют два типа продукционных систем - с «прямыми» и «обратными» выводами. Прямые выводы реализуют стратегию «от фактов к заключениям». При обратных выводах выдвигаются гипотезы вероятностных заключений, которые могут быть подтверждены или опровергнуты на основании фактов, поступающих в рабочую память. Существуют также системы с двунаправленными выводами.

Основные достоинства систем, основанных на продукционных моделях, связаны с простотой представления знаний и организации логического вывода. К недостаткам таких систем можно отнести неясность взаимных отношений правил, сложность оценки целостного образа знаний, низкую эффективность обработки знаний.

Идентификация предметной области

Разработку любой экспертной системы следует начинать с исследования предметной области и выделения основных сущностей, имеющих значение при решении конкретной задачи. В подавляющем большинстве случаев эту информацию получают при помощи эксперта - высококлассного специалиста в этой области.

Для решения нашей конкретной задачи предположим, что в результате бесед с экспертом в области установления неисправностей и ремонта автомобилей были установлены следующие эмпирические правила:

Двигатель обычно находится в одном из 3-х состояний: работать нормально, работать неудовлетворительно или не работать.

Если двигатель работает нормально, то это означает, что он нормально вращается, система зажигания и аккумулятор находятся в норме и ни какого ремонта не требуется.

Если двигатель запускается, но работает ненормально, то это говорит, по крайней мере, о том, что аккумулятор в порядке.

Если двигатель не запускается, то нужно узнать, пытается ли он вращаться. Если двигатель вращается, но при этом не заводится, то это может говорить о наличии плохой искры в системе зажигания. Если двигатель даже не пытается заводиться, то это говорит о том, что искры нет в принципе.

Если двигатель не заводится, но вращается, нужно проверить наличие топлива. Если топлива нет - то, скорей всего, для ремонта машины нужно просто заправиться.

Если двигатель не заводится, нужно также проверить, заряжен ли аккумулятор, если нет, то его следует зарядить.

Если двигатель не заводится, и существует вероятность плохой искры в системе зажигания, то необходимо проверить контакты. Контакты могут быть в одном из трех состояний - чистые, опаленные и грязные, в случае опаленных контактов их необходимо заменить, в случае если контакты грязные, их достаточно просто почистить.

Если двигатель не заводится, искры нет и аккумулятор заряжен, то нужно проверить катушку зажигания на электрическую проводимость. В случае если ток не проходит через катушку, то ее необходимо заменить. Если катушка зажигания в порядке, значит необходимо заменить распределительные провода.

Если двигатель запускается, но при этом ведет себя инертно, не сразу реагирует на подачу топлива, то необходимо прочистить топливную систему.

Если двигатель запускается, но происходят перебои с зажиганием, то это говорит о наличии плохой искры в системе зажигания, для устранения данной неисправности необходимо отрегулировать зазоры между контактами.

Если двигатель запускается и стучит, то необходимо отрегулировать зажигание.

Если двигатель запускается, но не развивает нормальной мощности, то это может говорить об опаленных или загрязненных контактах ( правило 7).

Возможны ситуации, когда состояние двигателя нельзя описать приведенными выше факторами и машине может потребоваться более детальный анализ состояния.

Если автомобиль во время движения тянет влево или вправо, нужно проверить наличие вибраций.

Если автомобиль во время движения тянет влево или вправо, но не наблюдаются вибрации, то нужно отрегулировать развал схождения колёс.

Если автомобиль во время движения тянет влево или вправо и наблюдаются вибрации, то нужно проверить состояние ступичных подшипников.

Если ступичные подшипники зажаты, то нужно отрегулировать их крепление.

Если ступичные подшипники повреждены, то нужно их заменить.

Если ступичные подшипники в норме, то нужно проверить гайки креплений колёс.

Если гайки креплений колёс закручены плохо, то нужно отрегулировать их.

Если гайки креплений колёс закручены хорошо, то нужно проверить давление в шинах.

Если давление в шинах удовлетворительное, то нужно обратиться в сервис

Если давление в шинах неудовлетворительное, то нужно отрегулировать его.

Если автомобиль во время движения не тянет влево или вправо, то нужно проверить, раскачивает ли его на поворотах и при торможении.

Если автомобиль раскачивает на поворотах и при торможении, то нужно проверить состояние амортизаторов.

Если состояние амортизаторов удовлетворительное, то нужно обратиться в сервис

Если состояние амортизаторов неудовлетворительное, то нужно заменить их.

Если автомобиль не раскачивает на поворотах и при торможении, то нужно проверить, стучит ли подвеска.

Если подвеска не стучит, то нужно обратиться в сервис

Если подвеска стучит, нужно отрегулировать крепления стоек стабилизаторов поперечной устойчивости.

Создаваемая экспертная система должна пре¬доставлять пользователю рекомендации, позволяющие устранить найденную неисправность. Из приведенных выше правил можно выделить рекомендации и представить их в виде фактов:

repair "Добавить топливо." (правило 5);

repair "Зарядите аккумулятор." (правило 6);

repair "Замените контакты." (правило 7 или правило 12);

repair "Почистите контакты." (правило 7 или правило 12);

repair "Замените распределительные провода." (правило 8);

repair "Замените катушку зажигания." (правило 8);

repair "Прочистите систему подачи топлива." (правило 9);

repair "Отрегулируйте зазоры между контактами." (правило 10);

repair "Отрегулируйте зажигание." (правило 11)

repair "Отрегулируйте развал схождения колёс." (правило 15);

repair "Замените амортизаторы." (правило 27);

repair "Отрегулируйте крепление стоек стабилизаторов поперечной устойчивости." (правило 30);

repair "Отрегулируйте подшипники в пазу." (правило 17);

repair "Замените подшипники." (правило 18);

repair "Крепче закрутите гайки на креплениях колёс." (правило 20);

repair "Отрегулируйте давление в шинах." (правило 21);

Если ремонт не требуется в принципе, будет выдана рекомендация:

repair "Ремонт не нужен."

Если же экспертная система не смогла поставить диагноз, то:

repair "Обратитесь в сервисную службу."

Реализация экспертной системы

Для получения необходимой информации от пользователя создадим правила диагностики, которые в зависимости от той или иной ситуации будут задавать пользователю необходимые вопросы и получать ответ в строго заданной форме. Дальнейшая диагностика будет производиться с учетом предыдущих ответов на вопросы, заданные пользователю. Эти ответы будут формировать описание текущей ситуации с помощью фактов, приведенных выше.

Для этого создадим функцию ask-question, задающую пользователю произвольный вопрос и получающую ответ из заданного набора корректных ответов.

(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

)

Функция имеет два аргумента: простую переменную question, которая содержит текст вопроса, и составную переменную allowed-values с набором допустимых ответов. Сразу после своего вызова функция выводит на экран соответствующий вопрос и читает ответ пользователя в переменную answer. Если переменная answer содержит текст, то она будет принудительно приведена к прописному алфавиту. После этого функция проверяет, является ли полученный ответ одним из заданных корректных ответов. Если нет, то процесс повторится до получения корректного ответа, иначе функция вернет ответ, введенный пользователем.

Будет также очень полезно определить логическую функцию yes-or-no-p, задающую пользователю вопрос и допускающую ответ в виде да/нет. С учетом реализации функции ask-question эта функция примет следующий вид:

(deffunction yes-or-no-p (?question)

(bind ?response (ask-question ?question yes no у n))

(if (or (eq ?response yes) (eq ?response y))

then TRUE

Else FALSE)

)

Функция yes-or-no-p вызывает функцию ask-question с постоянным набором допустимых ответов: yes, no, у и n. В случае если пользователь ввел утвердительный ответ (yes или у), функция возвращает значение TRUE, иначе - FALSE. Обратите внимание, что поскольку функция yes-or-no-p использует функцию ask-question, то она должна быть определена после нее.

Для упрощения реализации экспертной системы введем следующее ограничение: за один запуск система может предоставить пользователю только одну рекомендацию по исправлению неисправности. В случае если в машине несколько неисправностей, то систему нужно будет последовательно вызывать несколько раз, удаляя обнаруженную на каждом новом шаге неисправность. Таким образом, одним из образцов всех диагностических правил будет (not (repair ?)), гарантирующий, что диагноз еще не поставлен.

Первым реализуем правило, определяющее в какой из частей автомобиля мы ищем неполадку

(defrule starting-state ""

(not (start choose ?))

(not (repair ?))

=>

(bind ?reply

(ask-question "Требуется ремонт двигателя или ходовой (engin/chassi)? "

engine chassis))

(if (eq ?reply engine)

then (assert (start choose engin))

else (assert (start choose chassi)))

)

Условный элемент (not (start choose ?)) гарантирует, что выбор еще не сделан. Если это так, то пользователю задаются соответствующие вопросы и в систему добавляется факт, описывающий текущий выбор. Следом реализуем правило, определяющее общее состояние двигателя (правило 1).

(defrule determine-engine-state ""

(not (working-state engine ?))

(not (repair ?))

=>

(if (yes-or-no-p " Двигатель запускается (yes/no)?")

then

(if (yes-or-no-p " Двигатель работает нормально? (yes/no)?

then

(assert (working-state engine normal))

else

assert (working-state engine unsatisfactory)))

else

(assert (working-state engine does-not-start)))

)

Условный элемент (not (working-state engine ?)) гарантирует, что общее состояние двигателя еще не определено. Если это так, то пользователю задаются соответствующие вопросы и в систему добавляется факт, описывающий текущее общее состояние двигателя.

Теперь реализуем правило, определяющее, пытается ли двигатель вращаться, в случае если он не заводится.

(defrule determine-rotation-state ""

(working-state engine does-not-start)

(not (rotation-state engine ?))

(not (repair ?))

=>

(if (yes-or-no-p " Двигатель вращается (yes/no)? ")

then

(assert (rotation-state engine rotates))

(assert (spark-state engine irregular-spark))

(assert (rotation-state engine does-not-rotate))

(assert (spark-state engine does-not-spark)))

)

Это правило выполняется, в случае если общее состояние двигателя определено и известно, что он не заводится. Кроме того, условный элемент (not (rotation-state engine ?)) гарантирует, что это правило еще не вызывалось. В зависимости от того или иного ответа пользователя правило добавляет соответствующий набор фактов (правило 4).

Далее реализуем правило, определяющее наличие топлива в бак.

(defrule determine-gas-level ""

(working-state engine does-not-start)

(rotation-state engine rotates)

(not (repair ?))

=>

(if (not (yes-or-no-p " В баке имеется топливо (yes/no)? ")) ;?

then

(assert (repair " Добавить топливо.")))

(defrule determine-battery-state ""

(rotation-state engine does-not-rotate)

(not (charge-state battery ?))

(not (repair ?))

=>

(if (yes-or-no-p " Аккумулятор заряжен (yes/no)? ") ;?

Then

(assert (charge-state battery charged))

else

(assert (repair " Зарядить аккумулятор."))

(assert (charge-state battery dead)))

)

Правило determine-battery-state, помимо определения возможной неисправности, также применяется для добавления в систему факта, описывающего текущее состояние аккумулятора, который может быть использован другими правилами.

При реализации правила 7 необходимо обратить внимание на то, что рекомендации, предоставляемые этим правилом, подходят для двух в корне отличающихся ситуаций. Во-первых, в случае если двигатель не заводится, и существует вероятность плохой искры в системе зажигания (правило 7). Во-вторых, в случае если двигатель запускается, но не развивает нормальной мощности (правило 12). Поэтому выполним реализацию этих правил следующим образом:

(defrule determine-low-output ""

(working-state engine unsatisfactory)

(not (symptom engine low-output | not-low-output))

(not (repair ?))

=>

(if (yes-or-no-p " Выходная мощность двигателя низкая (yes/no)? ")

Then

(assert (symptom engine low-output))

Else иначе добавляется факт

(assert (symptom engine not-low-output))) «нормальная мощность»

)

Правило determine-low-output определяет, имеет ли место низкая мощность двигателя или нет.

(defrule determine-point-surface-state ""

(or (and (working-state engine does-not-start)

(spark-state engine irregular-spark))

(symptom engine low-output))

(not (repair ?))

=>

(bind ?response

(ask-question "Каково состояние контактов (norm/opal/zagr)? "

norm opal zagr))

(if (eq ?response opal)

then

(assert (repair "Замените контакты."))

else (if (eq ?response zagr)

then

(assert (repair "Почистите контакты."))))

)

Правило determine-point-surface-state адекватно реагирует на условия, заданные в правилах 7 и 12. Обратите внимание на использование условных элементов or и and, которые обеспечивают одинаковое поведение правила в двух абсолютно разных ситуациях. Кроме того, правило determine-point-surface-state отличается от приведенных ранее правил тем, что непосредственно использует функцию ask-question, вместо yes-or-no-p, т.к. в данный момент пользователю задается вопрос, подразумевающий три варианта ответа.

Реализация оставшихся диагностических правил (8-11).

Правило determine-conductivity-test по ответу пользователя определяет, пропускает ли ток катушка зажигания. Если нет, то ее следует заменить. Если пропускает, то причина неисправности - распределительные провода. Для нормальной работы правила необходимо убедиться, что аккумулятор заряжен и искры нет (правило 8).

(defrule determine-conductivity-test ""

(working-state engine does-not-start)

(spark-state engine does-not-spark)

(charge-state battery charged)

(not (repair ?))

=>

(if (yes-or-no-p "Катушка зажигания пропускает ток (yes/no)? ")

then

(assert (repair "Замените распределительные провода."))

else

(assert (repair "Замените катушку зажигания.")))

)

Правило determine-sluggishness спрашивает пользователя, не ведет ли себя машина инертно (не сразу реагирует на подачу топлива). Если такой факт обнаружен, то необходимо, прочистить топливную систему (правило 9) и выполнение диагностических правил прекращается.

(defrule determine-sluggishness ""

(working-state engine unsatisfactory)

(not (repair ?))

=>

(if (yes-or-no-p "Машина ведет себя инертно (yes/no)? ")

then; рекомендация

(assert (repair "Прочистите систему подачи топлива.")))

)

Правило determine-misfiring узнает - нет ли перебоев с зажиганием. Если это так, то необходимо отрегулировать зазоры между контактами (правило 10).

(defrule determine-misfiring ""

(working-state engine unsatisfactory)

(not (repair ?))

=>

(if (yes-or-no-p "Перебои с зажиганием есть(yes/no)? ")

then; рекомендация

(assert (repair "Отрегулируйте зазоры между контактами."))

(assert (spark-state engine irregular-spark)))

)

Правило determine-knocking узнает - не стучит ли двигатель. Если это так, то необходимо отрегулировать зажигание (правило 1)

(defrule determine-knocking ""

(working-state engine unsatisfactory)

(not (repair ?))

=>

(if (yes-or-no-p "Двигатель стучит (yes/no)? ")

then; рекомендация

(assert (repair "Отрегулируйте зажигание.")))

)

В качестве реализации правила 13 используем правило no-repairs:

(defrule no-repairs ""

(declare (salience -10))

(not (repair ?))

=>

(assert (repair "Обратитесь в сервисную службу."))

)

Обратите внимание на использование приоритета при определении этого правила. Все правила, приведенные в предыдущем разделе, определялись с приоритетом, по умолчанию равным нулю. Использование для правила no-repairs приоритета, равного -10, гарантирует, что правило не будет выполнено, пока в плане решения задачи находится, по крайней мере, одно из диагностических правил.

Если все активированные диагностические правила отработали и ни одно из них не смогло подобрать подходящую рекомендацию по устранению неисправности, то CLIPS запустит правило no-repairs, которое просто порекомендует пользователю обратиться к более опытному механику.

Правило normal-engine-state-conclusions реализует правило 2:

(defrule normal-engine-state-conclusions ""

(declare (salience 10))

(working-state engine normal)

=>

(assert (repair "Ремонт не нужен."))

(assert (spark-state engine normal))

(assert (charge-state battery charged))

(assert (rotation-state engine rotates))

)

Правило unsatisfactory-engine-state-conclusions реализует правило 3:

(defrule unsatisfactory-engine-state-conclusions ""

(declare (salience 10))

(working-state engine unsatisfactory)

=>

(assert (charge-state battery charged))

(assert (rotation-state engine rotates))

)

Аналогично предыдущим, реализуются правила 14-30. Если все активированные диагностические правила отработали и ни одно из них не смогло подобрать подходящую рекомендацию по устранению неисправности, то CLIPS запустит правило no-repairs, которое просто порекомендует пользователю обратиться к более опытному механику.

Экспертная система фактически готова к работе. Единственное, чего ей не хватает -- это метода вывода итоговой информации и правила, сообщающего пользователю о начале работы. Ниже приведена реализация этих правил.

(defrule system-banner ""

(declare (salience 10))

=>

(printout t crlf crlf)

(printout t "ЭКСПЕРТНАЯ СИСТЕМА AUTOEXPERT")

(printout t crlf crlf)

)

Правило print-repair выводит на экран диагностическое сообщение по устранению найденной неисправности.

(defrule print-repair ""

(declare (salience 10))

(repair ?item)

=>

(printout t crlf crlf)

(printout t "Рекомендации по ремонту:")

(printout t crlf crlf)

(format t " %s%n%n%n" ?item)

)

Заключение

В результате выполнения курсовой работы была изучена предметная область, на её основе разработаны правила для продукционной модели и реализована экспертная система определения неисправности автомобиля по характерным неполадкам на объектно-ориентированном языке CLIPS. Созданная система осуществляет определение неисправности по признакам, которые были получены путем анализа ответов пользователя на вопросы системы.

При тестировании система не показала никаких сбоев. Эффективность работы системы напрямую зависит от честности пользователя. Чем точнее он будет отвечать на вопросы - тем выше вероятность правильного диагноза.

Все поставленные задачи были выполнены, таким образом цель курсовой работы может считаться достигнутой

Список использованной литературы

1.CLIPS: A Tool for Building Expert Systems/ Официальный сайт среды разработки. Режим доступа: http://clipsrules.sourceforge.net/

2.Интуит - Методология построения экспертных систем / Национальный открытый университет. Режим доступа: http://www.intuit.ru/studies/ courses/46/46/lecture/1378

3. Козырёва Г.Ф. Проектирование экспертных систем средствами CLIPS - АГПУ, Армавир, 2011

4. Прохоров А. М. Большая советская энциклопедия -- 3-е изд. -- М. : Советская энциклопедия, 1969--1978.

5. Аксёнова М.А. Энциклопедия для детей. Техника. -- Том 14, Аванта+, 2012

6. Гаврилова Т. А., Хорошевский В. Ф. Базы знаний интеллектуальных систем. Учебник. -- СПб.: Питер, 2000

Приложение

Листинг программы

(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 starting-state ""

(not (start choose ?))

(not (repair ?))

=>

(bind ?reply

(ask-question "Требуется ремонт двигателя или ходовой (engin/chassi)? "

engine chassis))

(if (eq ?reply engine)

then (assert (start choose engin))

else (assert (start choose chassi)))

)

(defrule determine-engine-state ""

(start choose engin)

(not (working-state engine ?))

(not (repair ?))

=>

(if (yes-or-no-p "Двигатель запускается (yes/no)? ")

then

(if (yes-or-no-p "Двигатель работает нормально (yes/no)? ")

then (assert (working-state engine normal))

else (assert (working-state engine unsatisfactory)))

else

(assert (working-state engine does-not-start)))

)

(defrule determine-rotation-state ""

(working-state engine does-not-start)

(not (rotation-state engine ?))

(not (repair ?))

=>

(if (yes-or-no-p "Двигатель вращается (yes/no)? ")

then(assert (rotation-state engine rotates))

(assert (spark-state engine irregular-spark))

Else (assert (rotation-state engine does-not-rotate))

(assert (spark-state engine does-not-spark)))

)

(defrule determine-gas-level ""

(working-state engine does-not-start)

(rotation-state engine rotates)

(not (repair ?))

=>

(if (not (yes-or-no-p "В баке имеется топливо (yes/no)? "))

then (assert (repair "Добавить топливо.")))

)

(defrule determine-battery-state ""

(rotation-state engine does-not-rotate)

(not (charge-state battery ?))

(not (repair ?))

=>

(if (yes-or-no-p "Аккумулятор заряжен (yes/no)? ")

then

(assert (charge-state battery charged))

else

(assert (repair "Зарядите аккумулятор."))

(assert (charge-state battery dead))))

(defrule determine-low-output ""

(working-state engine unsatisfactory)

(not (symptom engine low-output | not-low-output))

(not (repair ?))

=>

(if (yes-or-no-p "Выходная мощность двигателя низкая(yes/no)? ")

then

(assert (symptom engine low-output))

else

(assert (symptom engine not-low-output))))

(defrule determine-point-surface-state ""

(or (and (working-state engine does-not-start)

(spark-state engine irregular-spark))

(symptom engine low-output))

(not (repair ?))

=>

(bind ?response

(ask-question "Каково состояние контактов (norm/opal/zagr)? "

norm opal zagr))

(if (eq ?response opal)

then

(assert (repair "Замените контакты."))

else (if (eq ?response zagr)

then

(assert (repair "Почистите контакты.")))))

(defrule determine-conductivity-test ""

(working-state engine does-not-start)

(spark-state engine does-not-spark)

(charge-state battery charged)

(not (repair ?))

=>

(if (yes-or-no-p "Катушка зажигания пропускает ток (yes/no)? ")

then

(assert (repair "Замените распределительные провода."))

else

(assert (repair "Замените катушку зажигания."))))

(defrule determine-sluggishness ""

(working-state engine unsatisfactory)

(not (repair ?))

=>

(if (yes-or-no-p "Машина ведет себя инертно (yes/no)? ")

then

(assert (repair "Прочистите систему подачи топлива."))))

(defrule determine-misfiring ""

(working-state engine unsatisfactory)

(not (repair ?))

=>

(if (yes-or-no-p "Перебои с зажиганием есть(yes/no)? ")

then

(assert (repair "Отрегулируйте зазоры между контактами."))

(assert (spark-state engine irregular-spark))))

(defrule determine-knocking ""

(working-state engine unsatisfactory)

(not (repair ?))

=>

(if (yes-or-no-p "Двигатель стучит (yes/no)? ")

then

(assert (repair "Отрегулируйте зажигание."))))

(defrule normal-engine-state-conclusions ""

(declare (salience 10))

(working-state engine normal)

=>

(assert (repair "Ремонт не нужен."))

(assert (spark-state engine normal))

(assert (charge-state battery charged))

(assert (rotation-state engine rotates)))

(defrule unsatisfactory-engine-state-conclusions ""

(declare (salience 10))

(working-state engine unsatisfactory)

=>

(assert (charge-state battery charged))

(assert (rotation-state engine rotates)))

(defrule determine-chassis-state ""

(start choose chassi)

(not (repair ?))

=>

(if (yes-or-no-p "Автомобиль во время движения тянет вправо или влево (yes/no)? ")

then (assert (chassis-state maybe vibration))

else (assert (chassis-state maybe sway)))

)

(defrule determine-vibration-state ""

(chassis-state maybe vibration)

(not (vibration-state vibrate here ?))

(not (repair ?))

=>

(if (yes-or-no-p "В ходовой ощущаются вибрации при движении (yes/no)? ")

then (assert (vibration-state vibrate here))

else (assert(repair "Отрегулируйте развал схождения колёс.")))

)

(defrule determine-sway-state ""

(chassis-state maybe sway)

(not (sway-state sways ?))

(not (repair ?))

=>

(if (yes-or-no-p "Автомобиль раскачивает на поворотах и при торможении (yes/no)? ")

then (assert (sway-state sways here))

else (assert (sway-state sways sways not-here))

)

(defrule determine-amortizing-state ""

(sway-state sways here)

(not (repair ?))

=>

(if (yes-or-no-p "Состояние амортизаторов удовлетворительное (yes/no)? ")

then (assert (repair "Обратитесь в сервисную службу"))

else (assert (repair "Замените амортизаторы.")))

)

(defrule determine-knock-state ""

(sway-state sways not-here)

(not (repair ?))

=>

(if (yes-or-no-p "Слышны стуки и шумы подвески во время движения автомобиля (yes/no)? ")

then (assert (repair "Отрегулируйте крепление стоек стабилизаторов поперечной устойчивости."))

else (assert (repair "Обратитесь в сервисную службу.")))

)

(defrule determine-bearing-state ""

(vibration-state vibrate here)

(not (repair ?))

=>

(bind ?return

(ask-question "Каково состояние ступичных подшипников (norm/zazhat/povrezh)? "

norm zazhat povrezh))

(if (eq ?return norm)

then

(assert (bearing-state pillow okey))

else (if (eq ?return zazhat)

then (assert (repair "Отрегулируйте подшипники в пазу."))

else (assert (repair "Замените подшипники."))))

)

(defrule determine-mounts-state ""

(bearing-state pillow okey)

(not (mounts-state screw ?))

(not (repair ?))

=>

(if (yes-or-no-p "Гайки креплений колёс закручены хорошо (yes/no)? ")

then (assert (mounts-state screw good))

else (assert(repair "Крепче закрутите гайки на креплениях колёс.")))

)

(defrule determine-wheels-state ""

(mounts-state screw good)

(not (repair ?))

=>

(if (yes-or-no-p "Давление в шинах удовлетворительное (yes/no)? ")

then (assert (repair "Обратитесь в сервисную службу."))

else (assert (repair "Отрегулируйте давление в шинах.")))

)

(defrule no-repairs ""

(declare (salience -10))

(not (repair ?))

=>

(assert (repair "Обратитесь в сервисную службу.")))

(defrule print-repair ""

(declare (salience 10))

(repair ?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)

)

Размещено на Allbest.ru

...

Подобные документы

  • Разработка программного комплекса, нацеленного на предоставление информации о комплектации персонального компьютера. Входные и выходные данные системы. Описание предметной области. Краткая информация о языке Clips. Проектирование экспертной системы.

    курсовая работа [36,0 K], добавлен 23.06.2011

  • Назначение экспертной системы. Разработка экспертной системы путем самостоятельного программирования в полном объеме простейшей ЭС в "GURU". Листинг экспертной системы по прогнозированию на бирже уровня цен, если валютный курс доллара падает или растет.

    лабораторная работа [17,8 K], добавлен 15.01.2011

  • Структура типичной экспертной системы. База данных (рабочая память), её назначение. Функция getsport как экземпляр класса cSport. Алгоритм работы экспертной системы. Реализация пользовательского интерфейса. Результаты тестирования системы пользователем.

    курсовая работа [1018,8 K], добавлен 13.06.2012

  • Технология экспертных систем на основе искусственного интеллекта: разработка и внедрение компьютерных программ, способных имитировать, воспроизводить области деятельности человека, требующих мышления, определенного мастерства и накопленного опыта.

    курсовая работа [264,8 K], добавлен 22.12.2008

  • Сущность и назначение экспертной системы, ее основные элементы и предъявляемые требования, обоснование важности и области применения. Методика получения объяснений в результате действия экспертной системы, их виды. Построение модели гибкого интерфейса.

    курсовая работа [202,4 K], добавлен 10.11.2009

  • История появления первой экспертной системы DENDRAL. Проектирование и разработка программной экспертной системы, предназначенной для анализа финансового состояния предприятия. Основные предикаты и секции приложения: domains, predicates, clauses, goal.

    курсовая работа [1,5 M], добавлен 21.05.2016

  • Общая характеристика киноиндустрии как предметной области работы. Разработка базы данных и дерева вопросов для получения информации для выбора фильма. Программная реализация экспертной системы. Тестирование системы и создание руководства пользователя.

    курсовая работа [1,9 M], добавлен 19.05.2014

  • Требования к спецодежде. Материалы и ткани для ее изготовления. Разработка экспертной системы для определения вероятности использования спецодежды определенного вида с использованием метода Байеса. Реализация демонстрационной версии системы в MS Excel.

    курсовая работа [616,5 K], добавлен 18.06.2015

  • Виды и основные функции интеллектуальных систем. Выбор инструментального средства для создания экспертной системы. Физическое проектирование базы данных. Использование среды EsWin 2.1 для разработки и тестирования экспертной системы выбора должности.

    курсовая работа [615,8 K], добавлен 22.03.2016

  • Этапы разработки экспертных систем. Требования к организации-разработчику. Правильный выбор подходящей проблемы, работа с экспертом. Разработка прототипной системы. Развитие прототипа до промышленной экспертной системы. Особенности оценки системы.

    презентация [169,1 K], добавлен 14.08.2013

  • История развития, применение искусственных нейронных сетей. Распознавание образов в сети. Сжатие данных и ассоциативная память. Проектирование экспертной системы, позволяющей диагностировать заболевания органов пищеварения. Программная реализация системы.

    курсовая работа [744,0 K], добавлен 05.02.2016

  • Структура экспертной системы: база знаний, механизм вывода, система пользовательского интерфейса. Анализ требований, проектирование системы "Подбор сотовых телефонов". Спецификация области, кодирование. Листинг программы, результаты тестирования.

    курсовая работа [24,5 K], добавлен 12.05.2013

  • Проектирование экспертной системы выбора нейронной сети. Сущность семантических сетей и фреймов. MatLab и системы Фаззи-регулирования. Реализация программы с использованием пакета fuzzy logic toolbox системы MatLab 7. Составление продукционных правил.

    курсовая работа [904,4 K], добавлен 17.03.2016

  • Постановка задачи и принятие решений, связанных со строительством бани на дачном участке. Структура экспертной системы: блоки и алгоритм функционирования. Понятийно-объектная и концептуальная модель предметной области: структура, состав, база знаний.

    дипломная работа [867,9 K], добавлен 26.08.2012

  • Фреймовые модели представления знаний. Разработка структуры фреймов для реализации экспертной системы. Разработка экспертной системы с фреймовой моделью представления знаний. Редактирование базы фактов кандидатов и описание режима консультации.

    курсовая работа [1,3 M], добавлен 13.10.2012

  • Аналитический обзор системы управления курсами Moodle, программное построение ее модулей. Разработка структурной схемы и базы знаний экспертной системы. Создание дерева вопросов и выбор алгоритма поиска решений. Анализ возможных угроз и защита информации.

    дипломная работа [534,7 K], добавлен 14.12.2013

  • Разработка прототипа экспертной системы на языке программирования Prolog, позволяющий идентифицировать тип лекарства по заданным параметрам. Перечень идентифицируемых лекарств. Основные концепции и взаимосвязи между понятиями предметной области.

    курсовая работа [336,9 K], добавлен 21.02.2012

  • Описание экспертной системы по подбору кадров. Требования к функциональным характеристикам программы. Состав и параметры технических средств ЭВМ. Структура входных данных. Руководство программиста и пользователя. Тестирование программного средства.

    курсовая работа [897,0 K], добавлен 13.11.2016

  • Структура экспертных систем, их классификация и характеристики. Выбор среды разработки программирования. Этапы создания экспертных систем. Алгоритм формирования базы знаний с прямой цепочкой рассуждений. Особенности интерфейса модулей "Expert" и "Klient".

    курсовая работа [1,1 M], добавлен 18.08.2009

  • Сущность интеллектуальных систем. Запись математического выражения в виде ориентированного графа. Особенности разработки генетического алгоритма для решения задачи аппроксимации логического вывода экспертной системы на основе метода сетевого оператора.

    дипломная работа [1,0 M], добавлен 17.09.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.