Разработка экспертной системы "Подбор сотовых телефонов"

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

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

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

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

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

Введение

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

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

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

1. База знаний (БЗ).

2. Механизм вывода (МВ).

3. Система пользовательского интерфейса (СПИ).

База знаний - центральная часть экспертной системы. Она содержит правила, описывающие отношения или явления, методы и знания для решения задач из области применения системы. Можно представлять базу знаний состоящей из фактических знаний и знаний, которые используются для вывода других знаний. Утверждение "Джон Ф. Кеннеди был 35-м президентом Соединенных Штатов" - пример фактического знания. "Если у вас болит голова, то примите две таблетки цитрамона" - пример знания для вывода. Сама база знаний обычно располагается на диске или другом носителе.

Механизм вывода содержит принципы и правила работы. Механизм вывода "знает", как использовать базу знаний так, чтобы можно было получать разумно согласующиеся заключения (выводы) из информации, находящейся в ней.

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

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

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

Хорошо разработанные оболочки экспертных систем обычно содержат механизм для добавления и обновления информации в базе знаний.

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

1. Анализ требований

экспертный система интерфейс программа

Необходимо разработать на языке Turbo Prolog экспертную систему с предметной областью «Подбор сотовых телефонов».

Разработанное программное средство должно:

содержать базу данных;

выдавать точное или приближенное решение (возможно с определенной вероятностью);

содержать удобный и понятный интерфейс.

Информационная система должна быть разработана в среде Turbo- Prolog 2.0. и функционировать в операционной системе MS-DOS 7.0.

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

Стандарт.

Виброзвонок.

Язык меню.

Имеется ли доступ в Интернет.

Тип корпуса (обычный или книжка).

Цена.

Количество строк на экране.

Количество мелодий.

Возможность программирования новых мелодий.

Наличие калькулятора.

Голосовой набор.

Наличие игр

Звуковая индикация клавиш

Сменные панели

Наличие будильника

Контроль времени разговора

Часы

Календарь

Диктофон

Время работы в режиме разговора

MP-3 плеер

Необходимо выделить следующие основные характеристики, для приближенного поиска:

Стандарт

Виброзвонок

Язык меню

Наличие доступа в Интернет

Тип корпуса

Цена

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

Если опрашиваемый отвечает на вопрос “да”, то программа продолжает перечислять характеристики текущего сотового телефона. При ответе “нет” программа переходит на следующий вид сотового телефона и начинает опрашивать его характеристики.

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

2. Проектирование

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

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

Conds(Признак, Значение_признака, Идентификатор_признака).

Правила же формируются так:

Rules(№ правила,Текст, Результат, Сочетание_основных_признаков, Сочетание_второстепенных_признаков).

База знаний программы представляет собой 2 файла:

1)Файл с описанием сотовых телефонов со списком характеристик (Baza.pro).

2)Файл с вопросами или с характеристиками(Vopros.pro).

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

Областью, исследуемой в данной курсовой работе, являются сотовые телефоны.

Задачи экспертной системы подобрать сотовый телефон для опрашиваемого по признакам.

Специфика предметной области состоит в том, что:

Имеется две группы вопросов, причем на первую группу вопросов возможно два варианта ответов (да , нет), а при ответе на вторую группу вопросов можно ответить (да, нет, не уверен).

Если не будет найден сотовый телефон с требуемыми характеристиками, то на экран будут выведены сотовые телефоны, соответствующие основным критериям

Если во второй группе вопросов опрашиваемый не уверен хотя бы при ответе на некоторые вопросы, на экран будут выведены сотовые телефоны, соответствующие основным критериям с вероятностью подхода к требованиям опрашиваемого. вероятность(R) равна: предыдущая вероятность(P) минус результат от деления предыдущей вероятности (P) на количество вопросов данного типа(K).Формула: R=P-P/K.

4. Кодирование

Кодирование осуществлено на языке Пролог. Результат кодирования приведен в приложении А.

Были использованы следующие домены:

Cond=integer*

GATE=Symbol

BNO,RNO,Nom=integer

Краткая спецификация предикатов:

Nachalo - главный предикат он предназначен для вызова предиката реализующего меню.

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

ReadKey, ReadKey 1, ReadKey 2 - предикаты анализа нажатой клавиши

KeySelect - в зависимости от нажатой клавиши выделяет активный пункт меню

Nach_cur - устанавливает курсор в исходное положение (1-й пункт меню)

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

Consult(GATE) - промежуточный предикат реализации самого процесса выбора решения. Параметр задает, по какой предметной области будем работать, если их несколько. В нашем случае предметная область одна.

Clear - предикат очистки баз знаний.

Init(integer,integer,integer,integer) - предикат для инициализации, какая клавиша нажата и если это клавиша вверх или вниз, то выполнение соответствующих действий. Первый параметр содержит код нажатой клавиши, второй содержит текущий пункт, третий возвращает следующий пункт, последний параметр содержит количество пунктов в меню.

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

Zapis_No(BNO) - промежуточный предикат для вызова, следующего предиката. Параметр содержит номер вопроса, на который было отвечено “да”.

Zapis_Yes(Nom,BNO) - предикат предназначен, для того чтобы поместить в динамическую базу yes () номера вопросов типа nom кроме вопроса с номером BNO. Параметр первый содержит тип вопроса, на который отвечено “да”, второй параметр содержит номер вопроса, на который отвечено “да”.

Neuveren_1is(BNO) - промежуточный предикат для вызова, следующего предиката. Параметр содержит номер вопроса, на который было отвечено “неуверен”.

Zapis_number(Nom) - предикат предназначен, для того чтобы поместить в динамическую базу neuveren() номера вопросов типа nom. Параметр содержит тип вопроса, на который отвечено “неуверен”.

Rabota(Cond,GATE,real) - начинает работать с базой знаний и перебирает все возможные варианты ответа, а также выводит результат поиска и опроса на экран. Параметр первый содержит список перебранных вариантов, но в данном случае он содержит только один номер ответа, второй содержит ответ или название гриба, третий вероятность ответа.

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

Vopros(Cond,RNO,BNO,String) - выводит текст вопроса на экран и ждет выбора ответа и передаёт свои полномочия предикату OTVET(). Первый параметр содержит список перебранных вариантов ответов, второй номер текущего варианта ответа, третий номер текущего вопроса

Otvet(Cond,RNO,String,BNO,integer,real,real) - проверят какой выбран ответ и в соответствии с этим выполнят некоторые действия. Первый параметр содержит список перебранных вариантов ответов, второй номер текущего варианта ответа, третий текст вопроса, четвёртый номер текущего вопроса, пятый номер варианта ответа, 5 и 6 содержит вероятности, причём 5 текущую, а 6 результирующую.

Proverka_crit(RNO,Cond,Condl) - проверяет, был ли задан вопрос с текущим номером и в какой базе он находится и делает соответствующие действия если его ни водной базе, то он задаёт это вопрос. Первый параметр содержит номер текущего варианта ответа, второй должен содержать список перебранных вариантов, но в данном случае не задействован, третий содержит список оставшихся не выясненных характеристик,4 и 5 содержит вероятности, причём 4 текущую, а 5 результирующую.

Vopros_crit(Cond,RNO,BNO,String,real,real) - выводит текст вопроса на экран и ждет выбора ответа и передаёт свои полномочия предикату OTVET(). Первый параметр содержит список перебранных вариантов ответов, второй номер текущего варианта ответа, третий номер текущего вопроса, четвёртый текст вопроса, 5 и 6 содержит вероятности, причём 5 текущую, а 6 результирующую.

Otvet_crit(Cond,RNO,String,BNO,integer,real,real) - проверят какой выбран ответ и в соответствии с этим выполнят некоторые действия. Первый параметр содержит список перебранных вариантов ответов, второй номер текущего варианта ответа, третий текст вопроса, четвёртый номер текущего вопроса, пятый номер варианта ответа, 5 и 6 содержит вероятности, причём 5 текущую, а 6 результирующую.

Opred_Kolva_Cond(integer,integer) - промежуточный предикат для подсчёта количества вопросов одного типа. Первый параметр номер текущего вопроса, второй возвращает количество вопросов.

Kolvo(Cond,integer,integer) - подсчитывает количество вопросов заданного типа. Первый параметр содержит список вопросов одного типа, второй текущее количество, третий возвращает результат.

Vivod_Yes - предикат помещает в данных базу данных OTV() единицу если был выбран хотя бы один вариант ответа.

In_Cond(BNO,Cond) - проверяет, находится ли «да» критерий в списке свойств

Param_Rule(Cond,Cond) - проверяет, находится ли все «да» критерии в списке свойств

Otvet_y(Cond,Cond) - выбирает изо всех критериев те, на которые ответили «да»

Pol_Param(Cond) - возвращает «да» критерии.

Pol_Other_Rule - Подбор сотового телефона по основным параметрам.

5. Тестирование

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

При тестировании при различных вариантах ответов на те или иные вопросы были получены соответствующие результаты. При сравнении результатов работы программы с исходными результатами ошибок обнаружено не было.

Заключение

В данной курсовой работе была поставлена задача разработки и программной реализации экспертной системы “Сотовые телефоны”.

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

Список использованных источников

1. Малпас Дж. Реляционный язык Пролог и его применение.- М.: Наука, 1990.-464 с.

2. Братко И. Программирование на языке Пролог для искусственного интеллекта. - Мир, 1990.-560 с.

3. Курс лекций по предмету “Системы искусственного интеллекта” Михалев А.Г.

4. «Встроенные предикаты Турбо- Пролога»: методические указания часть 1,2,3/ Б.В. Казаков, И.А. Казакова, А.Г. Михалёв, О.С. Дорофеева; под редакцией проф. Б.Г. Хмелевского. - Пенза: издательство ПГУ, 1998 г.

Приложение А

Baza.pro

include "Vopros.pro"

Domains

Cond=integer*

GATE=Symbol

Predicates

rule(RNO,GATE,GATE,Cond,Cond)

Clauses

rule(1,"ТЕЛЕФОН","Alcatel One Touch 512",[10,20,30,40,111,120],[53,64,70,80,90,100,130,140,151,160,171,181,191,201,211]).

rule(2,"ТЕЛЕФОН","Alcatel One Touch 512i",[10,20,30,40,111,120],[53,64,70,80,90,100,130,140,151,160,171,181,191,201,210]).

rule(3,"ТЕЛЕФОН","Motorolla T190",[10,20,31,41,110,120],[51,63,70,80,91,100,131,140,150,160,170,181,191,201,211]).

rule(4,"ТЕЛЕФОН","Ericsson T65",[11,21,30,40,111,120],[53,62,70,81,90,101,130,141,151,160,170,180,191,204,211]).

rule(5,"ТЕЛЕФОН","LG W7000",[10,20,30,40,113,121],[54,65,71,80,91,101,130,140,150,160,170,181,190,204,211]).

rule(6,"ТЕЛЕФОН","LG W5200",[12,20,30,40,113,121],[50,65,71,80,91,100,130,141,150,161,170,180,190,204,211]).

rule(7,"ТЕЛЕФОН","Motorolla T720",[10,20,30,40,113,121],[52,64,71,80,90,100,131,140,150,160,170,181,190,201,210]).

rule(8,"ТЕЛЕФОН","Nokia 6100",[12,20,31,40,113,120],[52,66,70,80,90,100,130,140,150,160,170,180,190,203,210]).

rule(9,"ТЕЛЕФОН","Sony CMP-J70",[10,21,30,41,110,120],[53,61,71,80,91,100,131,141,151,160,170,181,191,202,211]).

rule(10,"ТЕЛЕФОН","Siemens C55",[10,21,30,41,111,120],[52,60,71,81,91,100,131,140,151,161,170,181,191,200,211]).

rule(11,"ТЕЛЕФОН","Ericsson R520",[10,21,30,41,110,120],[52,62,70,81,91,101,130,140,151,160,171,180,191,203,211]).

rule(12,"ТЕЛЕФОН","Alcatel One Touch 715",[11,20,31,40,112,120],[52,61,71,80,90,100,131,141,150,161,170,181,190,202,211]).

rule(13,"ТЕЛЕФОН","Alcatel One Touch 310",[10,20,30,41,110,120],[52,61,70,80,91,101,130,141,151,160,171,181,191,200,211]).

Ex.pro

include "Baza.pro"

Domains

file = myfile

Database

yes(BNO)

no(BNO)

veroyat(Integer)

neuveren(BNO)

otv(Integer)

tel(String)

Predicates

Consultat(GATE)

Clear

Zapis_No(BNO)

Zapis_Yes(Nom,BNO)

Neuveren_1(BNO)

Zapis_number(Nom)

Rabota(Cond,GATE,integer)

Proverka(RNO,Cond,Cond,integer,integer)

Vopros(Cond,RNO,BNO,String,integer,integer)

Otvet(Cond,RNO,String,BNO,integer,integer,integer)

Opred_Kolva_Cond(integer,integer)

Kolvo(Cond,integer,integer)

Vivod_Yes

%------------------Предикаты критерия

Proverka_crit(RNO,Cond,Cond)

Vopros_crit(Cond,RNO,BNO,String)

Otvet_crit(Cond,RNO,String,BNO,integer)

% Приближенный поиск

In_Cond(BNO,Cond)

Param_Rule(Cond,Cond)

Otvet_y(Cond,Cond)

Pol_Param(Cond)

Pol_Other_Param

Clauses

Consultat(X):-not(Rabota([],X,100)),otv(1),!.

Consultat(_):-otv(2),nl,

write("В точности таких телефонов у нас нет, но можем предложить Вам\n наиболее подходящие по основным критериям\n"),nl,/*нажмите кнопку*/

openappend(myfile,"List.txt"),

writedevice(myfile),

write("В точности таких телефонов у нас нет, но можем предложить Вам \n наиболее подходящие по основным критериям\n"),nl,

closefile(myfile),Pol_Other_Param,fail.

Consultat(_).

%--------------------------------------------

Rabota(_,X,Y):-

not(rule(_,X,_,_,_)),!,not(tel(X)),

nl,write("Ваш выбор это - ",X," с уверенностью - ",Y,"%"),

openappend(myfile,"List.txt"),

writedevice(myfile),

nl,write("Ваш выбор это - ",X," с уверенностью - ",Y,"%"),

closefile(myfile),

asserta(tel(X)),nl.

Rabota(History,X,_):-rule(RNO,X,Ny,Cond1,Cond),

Proverka_crit(RNO,History,Cond1),

Proverka(RNO,History,Cond,100,Z),

Vivod_Yes,

Rabota([RNO|History],Ny,Z),fail.

Rabota(_,_,_):-fail.

%--------------------------------------------

Proverka_crit(RNO,History,[BNO|Rest]):-yes(BNO),!,

Proverka_crit(RNO,History,Rest).

Proverka_crit(_,_,[BNO|_]):-No(BNO),!,fail.

Proverka_crit(RNO,History,[BNO|Rest]):-otv(2),Cond(BNO,TEXT,_),

Vopros_crit(History,RNO,BNO,TEXT),

Proverka_crit(RNO,History,Rest).

Proverka_crit(_,_,[]).

Proverka(RNO,History,[BNO|Rest],P,Z):-yes(BNO),!,

Proverka(RNO,History,Rest,P,Z).

Proverka(RNO,HISTORY,[BNO|REST],P,Z):-Neuveren(BNO),!,

Opred_Kolva_Cond(BNO,I),

P1=P-P/I,

Proverka(RNO,History,Rest,P1,Z).

Proverka(_,_,[BNO|_],_,_):-No(BNO),!,fail.

Proverka(RNO,History,[BNO|Rest],P,Z):-otv(2),Cond(BNO,TEXT,_),

P<>0,

Vopros(History,RNO,BNO,TEXT,P,P1),

Proverka(RNO,History,Rest,P1,Z).

Proverka(_,_,[],P,P):-P<>0.

%--------------------------------------------

Vopros_crit(History,RNO,BNO,TEXT):-Write("Вопрос: ",TEXT,"?"),

Write(" (1-Да;2-Нет) "),

openappend(myfile,"List.txt"),

writedevice(myfile),

Write("Вопрос: ",TEXT,"?"),

Write(" (1-Да;2-Нет) "),

closefile(myfile),

Readint(Resp),

Otvet_crit(History,RNO,TEXT,BNO,Resp).

Vopros(History,RNO,BNO,TEXT,P,P1):-

Write("Вопрос: ",TEXT,"?"),

Write(" (1-да;2-нет;3-не уверен.) "),

openappend(myfile,"List.txt"),

writedevice(myfile),

Write("Вопрос: ",TEXT,"?"),

Write(" (1-да;2-нет;3-не уверен.) "),

closefile(myfile),

Readint(Resp),

Otvet(History,RNO,TEXT,BNO,Resp,P,P1).

%______________________________________________

Otvet_crit(_,_,_,_,0):-exit.

Otvet_crit(_,_,_,BNO,1):-!,Asserta(yes(BNO)),Zapis_No(BNO),

write("<ДА>"),nl,

openappend(myfile,"List.txt"),

writedevice(myfile),

write("<ДА>"),nl,

closefile(myfile).

Otvet_crit(_,_,_,BNO,2):-!,Asserta(no(BNO)),

write("<НЕТ>"),nl,

openappend(myfile,"List.txt"),

writedevice(myfile),

write("<НЕТ>"),nl,

closefile(myfile),

Fail.

Otvet_crit(History,RNO,Text,BNO,_):-Vopros_crit(History,RNO,BNO,TEXT),!.

Otvet(_,_,_,_,0,P,P):-exit.

Otvet(_,_,_,BNO,1,P,P):-

!,Asserta(yes(BNO)),Zapis_No(BNO),

write("<ДА>"),nl,

openappend(myfile,"List.txt"),

writedevice(myfile),

write("<ДА>"),nl,

closefile(myfile).

Otvet(_,_,_,BNO,2,P,P):-

!,Asserta(no(BNO)),

write("<НЕТ>"),nl,

openappend(myfile,"List.txt"),

writedevice(myfile),

write("<НЕТ>"),nl,

closefile(myfile),

Fail.

Otvet(_,_,_,BNO,3,P,P1):-

!,Neuveren_1(BNO),

Opred_Kolva_Cond(BNO,I),

write("<НЕ УВЕРЕН>"),nl,

P1=P-P/I,

openappend(myfile,"List.txt"),

writedevice(myfile),

write("<НЕУВЕРЕН>"),nl,

closefile(myfile).

Otvet(History,RNO,Text,BNO,_,P,P1):-Vopros(History,RNO,BNO,TEXT,P,P1),!.

%--------------------------------------------

Vivod_Yes:-otv(2),asserta(otv(1)),Retract(otv(2)),!.

Vivod_Yes:-!.

%--------------------------------------------

Opred_Kolva_Cond(B,K):-Cond(B,_,T),findall(X,cond(X,_,T),L),

Kolvo(L,0,I),K=I.

%--------------------------------------------

Neuveren_1(Bn):-Cond(BN,_,T),Zapis_number(T).

%--------------------------------------------

Zapis_number(T):-Cond(B,_,T),not(asserta(neuveren(B))).

Zapis_number(_).

%--------------------------------------------

Zapis_No(Bn):-Cond(BN,_,T),Zapis_Yes(T,Bn).

%--------------------------------------------

Zapis_Yes(T,Bn):-Cond(B,_,T),Bn<>B,not(asserta(no(B))).

Zapis_Yes(_,_).

%--------------------------------------------

Kolvo([],I,I):-!.

Kolvo([_|T],J,I):-J1=J+1,Kolvo(T,J1,I).

%--------------------------------------------

Clear:-retract(yes(_)),fail.

Clear:-retract(no(_)),fail.

Clear:-retract(neuveren(_)),fail.

Clear:-retract(otv(_)),fail.

Clear:-retract(veroyat(_)),fail.

Clear:-retract(tel(_)),fail.

Clear.

In_Cond(X,[X|_]) :- !.

In_Cond(X,[_|L]) :-

In_Cond(X,L), !.

Param_Rule([H|C],R) :-

!,

In_Cond(H,R),

Param_Rule(C,R), !.

Param_Rule(_,_).

Otvet_y([H|L],[H|R]) :-

yes(H),

Otvet_y(L,R), !.

Otvet_y([_|L],R) :-

Otvet_y(L,R), !.

Otvet_y(_,[]).

Pol_Param(R) :-

findall(X,Crit(X),L),

Otvet_y(L,R).

Pol_Other_Param:-Pol_Param(C),

Rule(_,_,T,R,_),

Param_Rule(C,R),

nl,

write(T),

openappend(myfile,"List.txt"),

writedevice(myfile),

write(T),nl,

closefile(myfile),

asserta(tel(T)),fail.

Pol_Other_Param:-not(tel(_)),!.

Pol_Other_Param:-Vivod_Yes.

Menu.pro

code=15000

include "ex.pro"

Domains

P=integer

KEY = other; esc; up ; down; enter; fkey(integer); char(integer)

Predicates

Nachalo

My_menu

Nach_cur(integer)

KeySelect(KEY,integer,integer)

Vozwrat(integer,integer)

Default(integer)

ReadKey(KEY)

ReadKey1(KEY,char,integer)

ReadKey2(KEY,integer)

Proces(integer)

Clauses

%--------------------------------------------------------------

Nachalo :-

makewindow(1,7,32,"Экспертная система",0,0,25,80),

My_menu,

clear,

exit.

%--------------------------------------------------------------

My_menu:-

makewindow(4,30,47," КОНСУЛЬТАНТ ПО СОТОВЫМ ТЕЛЕФОНАМ ",9,21,9,38),nl,

write(" 1 Консультация"),nl,

write(" 2 Редактирование (Vopros.pro)"),nl,

write(" 3 Редактирование (Baza.pro)"),nl,

write(" 4 Помощь"),nl,

write(" 5 Выход"),

Default(1).

%--------------------------------------------------------------

Default(Pos):-

Nach_cur(Pos),

ReadKey(KEY),

KeySelect(KEY,Pos,Pos_a),

Default(Pos_a).

%--------------------------------------------------------------

Nach_cur(Pos):-

Pos=1,

field_attr(1,1,33,112),

cursor(1,1); Pos<>0,!.

%--------------------------------------------------------------

Vozwrat(A,B):- A>4,B=0,!;A<1,B=5,!;B=A,!.

%--------------------------------------------------------------

ReadKey(KEY):-

readchar(T),

char_int(T,VAL),

ReadKey1(KEY,T,VAL).

%--------------------------------------------------------------

ReadKey1(KEY,_,0):-

!,readchar(T),

char_int(T,VAL),

ReadKey2(KEY,VAL).

ReadKey1(esc,_,27):-!.

ReadKey1(enter,_,13):-!.

ReadKey1(char(T),T,_).

%--------------------------------------------------------------

ReadKey2(up,72):-!.

ReadKey2(down,80):-!.

ReadKey2(other,77):-!.

ReadKey2(other,75):-!.

%--------------------------------------------------------------

KeySelect(KEY,P,P):-

KEY=esc,

clear,

exit.

KeySelect(KEY,P,P):-

KEY=enter,

Proces(P),!.

KeySelect(KEY,Pos_e,Pos_a):-

KEY=down,

field_attr(Pos_e,1,33,30),

Vozwrat(Pos_e,S),

M=S+1,

cursor(M,1),

field_attr(M,1,33,112),

Pos_a=M,!.

KeySelect(KEY,Pos_e,Pos_a):-

KEY=up,

field_attr(Pos_e,1,33,30),

Stop=Pos_e-1,

Vozwrat(Stop,S),

cursor(S,1),

field_attr(S,1,33,112),

Pos_a=S,!.

KeySelect(_,P,P):- !.

%--------------------------------------------

Proces(1):-

removewindow,

openwrite(myfile,"List.txt"),

writedevice(myfile),

write(""),

closefile(myfile),

Consultat("ТЕЛЕФОН"), %ex.pro

clear,

asserta(otv(2)),

readchar(_),

clearwindow,

My_menu.

Proces(2):-

removewindow,

file_str("Vopros.pro", S),

edit(S,A,"","Vopros.pro","",1,"",1,0,1,0,_,_),

openwrite(myfile,"Vopros.pro"),

writedevice(myfile),

write(A),

closefile(myfile),

clearwindow,

My_Menu.

Proces(3):-

removewindow,

file_str("Baza.pro", S),

edit(S,A,"","Baza.pro","",1,"",1,0,1,0,_,_),

openwrite(myfile,"Baza.pro"),

writedevice(myfile),

write(A),

closefile(myfile),

clearwindow,

My_menu.

Proces(4):-

removewindow,

makewindow(4,75,47," ПОМОЩЬ ",1,5,23,70),nl,

file_str("Help.txt",S),

display(S),

removewindow,

My_menu.

Proces(5):-

clear, exit.

Goal

Clear,

asserta(otv(2)),

Nachalo.

Vopros.pro

domains

BNO,RNO,Nom=integer

Predicates

Cond(BNO,STRING,Nom)

Crit(BNO) % основные параметры отбора в случае неудачи поиска

Clauses

Cond(10,"Стандарт GSM",1).

Cond(11,"Стандарт EGSM",1).

Cond(12,"Стандарт Mobile",1).

Cond(20,"С виброзвонком",2).

Cond(21,"Без виброзвонка",2).

Cond(30,"Русский язык",3).

Cond(31,"Английский язык",3).

Cond(40,"С доступом в Интернет",4).

Cond(41,"Без доступа в Интернет",4).

Cond(50,"3 строки",5).

Cond(51,"4 строк",5).

Cond(52,"5 строк",5).

Cond(53,"6 строк",5).

Cond(54,"10 строк",5).

Cond(60,"5 мелодий",6).

Cond(61,"16 мелодий",6).

Cond(62,"20 мелодий",6).

Cond(63,"27 мелодий",6).

Cond(64,"30 мелодий",6).

Cond(65,"40 мелодий",6).

Cond(66,"> 40 мелодий",6).

Cond(70,"С программиованием мелодий",7).

Cond(71,"Без программирования мелодий",7).

Cond(80,"С калькулятором",8).

Cond(81,"Без калькулятора",8).

Cond(90,"С голосовым набором",9).

Cond(91,"Без голосового набора",9).

Cond(100,"Игры",10).

Cond(101,"Без игр",10).

cond(110,"100$ < Цена < 150$",11).

cond(111,"150$ < Цена < 200$",11).

cond(112,"200$ < Цена < 250$",11).

cond(113,"Цена > 250$",11).

cond(120,"Обычный корпус",12).

cond(121,"Корпус: книжка",12).

cond(130,"Со звуковой индикацией кнопок",13).

cond(131,"Без звуковой индикации кнопок",13).

cond(140,"Сменные панели",14).

cond(141,"Без сменных панелей",14).

cond(150,"С будильником",15).

cond(151,"Без будильника",15).

cond(160,"Имеется контроль времени",16).

cond(161,"Контроля времени нет",16).

cond(170,"Часы",17).

cond(171,"Часов нет",17).

cond(180,"Календарь",18).

cond(181,"Без календаря",18).

cond(190,"Диктофон",19).

cond(191,"Без диктофона",19).

cond(200,"Время работы в режиме разговора до 3 часов",20).

cond(201,"Время работы в режиме разговора до 5 часов",20).

cond(202,"Время работы в режиме разговора до 6 часов",20).

cond(203,"Время работы в режиме разговора до 10 часов",20).

cond(204,"Время работы в режиме разговора более 10 часов",20).

cond(210,"MP-3 плеер",21).

cond(211,"Без MP-3 плеера",21).

% Основной Параметр - Стандарт

Crit(10).

Crit(11).

Crit(12).

% Основной Параметр - Вибро

Crit(20).

Crit(21).

% Основной параметр - язык

Crit(30).

Crit(31).

%Основной параметр - цена

Crit(110).

Crit(111).

Crit(112).

Crit(113).

%Основной параметр - корпус

Crit(120).

Crit(121).

%Основной параметр - доступ в интернет

Crit(40).

Crit(41).

Приложение Б

Опрос №1

Вопрос: Стандарт GSM? (1-Да;2-Нет) <НЕТ>

Вопрос: Стандарт EGSM? (1-Да;2-Нет) <ДА>

Вопрос: Без виброзвонка? (1-Да;2-Нет) <НЕТ>

Вопрос: С виброзвонком? (1-Да;2-Нет) <ДА>

Вопрос: Английский язык? (1-Да;2-Нет) <ДА>

Вопрос: С доступом в Интернет? (1-Да;2-Нет) <ДА>

Вопрос: 200$ < Цена < 250$? (1-Да;2-Нет) <ДА>

Вопрос: Обычный корпус? (1-Да;2-Нет) <ДА>

Вопрос: 5 строк? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Вопрос: 16 мелодий? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Вопрос: Без программирования мелодий? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: С калькулятором? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Вопрос: С голосовым набором? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Игры? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Вопрос: Без звуковой индикации кнопок? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Вопрос: Без сменных панелей? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Вопрос: С будильником? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Вопрос: Контроля времени нет? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Вопрос: Часы? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Вопрос: Без календаря? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Диктофон? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Вопрос: Время работы в режиме разговора до 6 часов? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Вопрос: Без MP-3 плеера? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Ваш выбор это - Alcatel One Touch 715 с уверенностью - 1%

Опрос№2

Вопрос: Стандарт GSM? (1-Да;2-Нет) <ДА>

Вопрос: С виброзвонком? (1-Да;2-Нет) <ДА>

Вопрос: Русский язык? (1-Да;2-Нет) <ДА>

Вопрос: С доступом в Интернет? (1-Да;2-Нет) <ДА>

Вопрос: 150$ < Цена < 200$? (1-Да;2-Нет) <ДА>

Вопрос: Обычный корпус? (1-Да;2-Нет) <ДА>

Вопрос: 6 строк? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: 30 мелодий? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: С программиованием мелодий? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: С калькулятором? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: С голосовым набором? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Игры? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Со звуковой индикацией кнопок? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Сменные панели? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Без будильника? (1-да;2-нет;3-не уверен.) <НЕТ>

В точности таких телефонов у нас нет, но можем предложить Вам наиболее подходящие по основным критериям

Alcatel One Touch 512

Alcatel One Touch 512i

Опрос №3

Вопрос: Стандарт GSM? (1-Да;2-Нет) <ДА>

Вопрос: С виброзвонком? (1-Да;2-Нет) <ДА>

Вопрос: Русский язык? (1-Да;2-Нет) <ДА>

Вопрос: С доступом в Интернет? (1-Да;2-Нет) <ДА>

Вопрос: 150$ < Цена < 200$? (1-Да;2-Нет) <ДА>

Вопрос: Обычный корпус? (1-Да;2-Нет) <ДА>

Вопрос: 6 строк? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Вопрос: 30 мелодий? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: С программиованием мелодий? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: С калькулятором? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: С голосовым набором? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Игры? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Со звуковой индикацией кнопок? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Сменные панели? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Без будильника? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Имеется контроль времени? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Вопрос: Часов нет? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Без календаря? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Без диктофона? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Время работы в режиме разговора до 5 часов? (1-да;2-нет;3-не уверен.) <ДА>

Вопрос: Без MP-3 плеера? (1-да;2-нет;3-не уверен.) <НЕУВЕРЕН>

Ваш выбор это - Alcatel One Touch 512 с уверенностью - 20%

Ваш выбор это - Alcatel One Touch 512i с уверенностью - 20%

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


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

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

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

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

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

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

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

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

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

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

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

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

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

  • Конфигурация сервиса ремонта сотовых телефонов. Автоматизированные модули учета движения товара, склада, справочников, клиентской базы. Документация совершенных операций. Формирование отчетов и итоговых данных с помощью программы 1С: Предприятие 8.2.

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

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