Экспертная система. Анализ передачи телеметрических данных со спутника

Введение

экспертный эвристический телеметрический спутник

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

К числу областей, в которых применяются экспертные системы, относятся следующие:

	Идентификация и ликвидация неполадок в локомотивах;

	Анализ передачи телеметрических данных со спутника


Экспертная система. Анализ передачи телеметрических данных со спутника



В данном курсовом проекте анализируются сигналы полученные со спутника. Проявление их влечет за собой типы сигналов. Можно выделить возможные:

Ветер

Воздушные массы

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

База знаний представлена в виде записей двух типов – это 1) записи, хранящие типы сигналов и 2) записи, характеризующие расшифровку База симптомов представлена в виде полей, имеющих свой номер и название симптома:



signalip(Номер_сигнала, Номер_описания, Название)



Номер является уникальным идентификатором сигнала и база знаний не может иметь двух сигналов с одинаковыми номерами.

Номер_описания хранит ссылку на номер сигнала, которая могла вызвать данный эффект.

Название представляет собой поле, которое содержит текст самого сигнала.

База типов сигнала представляет собой предикат типа:



decodip(Номер_типа сигнала, Название, Метод_расшифровки)


Поля Номер и Название имеют тот же смысл, что и для симптома, а – Метод_расшифровки это указание пользователю, как можно выявить нужную информацию.

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







	Разработка процедур

Главная процедура Main

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

Процедура вывода информации о программе Zastavka

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






Процедура главного меню Start

Эта процедура выводит на экран список следующих режимов, каждый из которых реализован с помощью отдельной процедуры. Меню представляет собой окно, в котором обозначены пункты. Чтобы зайти в нужный пункт, нужно поставить курсор на надпись и нажать Enter. После этого происходит выполнение вспомогательной процедуры Select(Ch), где Ch – целочисленная переменная, которая определяется положением курсора в окне меню. Выбирая один из пунктов меню, пользователь вызывает соответствующую ему процедуру:

	

	

	

	Процедуры загрузки и сохранения БД LoadBDFile и SaveBD

	Загрузка и сохранение БД осуществляются через стандартные процедуры для работы с БД: consult и save. Доступ к файлам на диске производится через предикат dir, возвращающий в качестве параметра имя файла и путь к нему.

	Процедура анализа Diagnostic

	

	

	
Производит проверку наличия признаков и описаний в базе данных. Затем с помощью вспомогательной процедуры ResearchNode открывается диалог между пользователем и экспертной системой. Параллельно с помощью процедуры KeySelect на основе ответов пользователя формируется специальный код неисправности с помощью которого производится поиск описания в БД. С помощью предиката FaultFound выводится сообщение о нахождении неисправностей и рекомендации по ее устранению.

	Процедура меню правки EditBD

	Выводит на экран подменю правки БД. Выбирая один из пунктов меню, пользователь вызывает соответствующую ему процедуру:

	

	

	

	Здесь также используются процедуры добавления признаков и описаний AddFault и AddRepair, процедуры просмотра признаков и описаний ShowFault и ShowRepair, процедуры удаления признаков и описаний DeleteFault и DeleteRepair и процедура выхода из программы ExitProg.

	

	
Заключение

	

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

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

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

	

	
Список литературы

	

		Емельянов В.А., Емельянов Б.В. курсовое проектирование: разработка экспертных систем и систем принятия решений. Чебоксары: Чувашский университет, 2006.

		Л. Стерлинг, Э. Шапиро "Искусство программирования на языке Пролог",1999

		Бабаев И.О., Герасимов М.А. интеллектуальное программирование. Санкт-Петербург: СПбГУ, 1992.

		Янсон А. "Турбо-Пролог в сжатом изложении", 2000

		Соломин Н., Ин Д. Использование Турбо-Пролога. М.: Мир, 1993.

		Логическое программирование. - М.: Знание, 1988. (Новое в жизни, науке, технике. Сер."Вычислительная техника и ее применение"; N9))

	

	
Приложение

	

	Текст программы:

code=3000

include "tdoms.pro"

include "tpreds.pro"

include "menu2.pro"

domains

IDType=integer

TTitle=string

Int=integer

Str=string

predicates

Main

ExitProg

Start

CreateTitle

Zastavka

Select(Int)

Diagnostic

LoadBDFile

EditBD

ResearchNode(IDType)

KeySelect(Char,IDType)

FaultFound(IDType)

EditSelect(Char)

AddFault

ShowFaults

DeleteFault

AddRepair

Showrepairs

DeleteRepair

ShowFault(IDType,Int)

ShowRepair(IDType,Int)

SaveBD

LoadBD(Str)

UnloadBD

ErrorExitProg(String)

database - FaultBD

signalip (IDType,IDType,TTitle)

decodip(IDType,TTitle,TTitle)

goal

Main.

clauses

/*Вывод информации о программе*/

Zastavka:-

makewindow(1,10,31,"",0,0,25,80),

nl,nl,nl,

write(" Курсовая работа: Экспертная система "),nl,nl,

write(" Тема: Анализ передачи телеметрических данных со спутника "),nl,

nl,nl,nl,nl,nl,nl,nl,

write(" Студент: Афанасьев В.А."),nl,

write(" Руководитель: Пичугин В.Н."),nl,

write(" Група АФТ 61-04"),nl,

write(" АФЧГУ"),nl,

nl,nl,nl,nl,nl,nl,

write(""),nl,nl,

readchar(_),removewindow(1,1).

/*Создание заголовка*/

CreateTitle:-

makewindow(1,10,0,"",0,0,25,80),

attribute(113),

write("Анализ передачи телеметрических данных со спутника").

LoadBD(FileName):-

consult(FileName,FaultBD),!,

write(" (База данных загружена- )").

LoadBD(_):-

ErrorExitProg("Ошибка загрузки базы данных").

UnloadBD:-

retractall(_,FaultBD).

/*Вызов главного меню*/

Start:-

menu(5,24,90,95,["Анализ","Загрузка БД", "Сохранение БД", "Редактирование БД", "О программе","Выход"],"Основное меню программы",0,Ch),

Select(Ch),fail.

Start:-

Start.

/*Выбор пункта меню*/

Select(Ch):-

Ch=0,ExitProg;

Ch=1,Diagnostic;

Ch=2,LoadBDFile;

Ch=3,SaveBD;

Ch=4,EditBD;

Ch=5,Zastavka;

CH=6,ExitProg.

/*Диагностика*/

Diagnostic:-

makewindow(20,90,90,"Описание:",1,0,6,80,1,2," "),

makewindow(21,90,95,"Анализ:",7,0,14,80,1,2," "),

makewindow(22,90,90,"Виды сигналов",21,0,4,80,1,2," "),

signalip(FirstID,_,_),!,

ResearchNode(FirstID),

removewindow(22,1),

removewindow(21,1),

removewindow(20,1).

Diagnostic:-

removewindow(22,1),

removewindow(21,1),

removewindow(20,1).

/*Диалог с пользователем о наличии признаков*/

ResearchNode(NodeID):-

signalip(NodeId,RepID,Title),!,

decodip(RepID,RepStr,_),!,

shiftwindow(20),clearwindow,

attribute(OldAttr),attribute(90),

write(" ",Title,":"),nl,

attribute(OldAttr),

write(" ",RepStr),

shiftwindow(21),%clearwindow,

write("присутствует ли в сводке сигнал ",Title),nl,

attribute(OldAttr),attribute(95),

write("Нажмите Enter-да, Esc-нет ... "),

attribute(OldAttr),

readchar(Key),

KeySelect(Key,NodeID).

/*Поиск описания*/

KeySelect(Key,NodeID):-

Key=0,readchar(NewKey);

Key=27,shiftwindow(21),write("-?в"),nl,nl,

ParentID=NodeID div 100,

signalip(NewNode,_,_),

ParentID=NewNode div 100,NewNode > NodeID,!,

ResearchNode(NewNode);

Key=13,shiftwindow(21),write("да"),nl,nl,

signalip(NewNode,_,Title),

shiftwindow(22),write(Title,"; "),

NodeID=NewNode div 100,!,

ResearchNode(NewNode);

Key=13,FaultFound(NodeID).

/*Обнаружение*/

FaultFound(NodeID):-

makewindow(23,31,26,"Сигнал расшифрован",5,10,9,60,1,2," "),nl,

signalip(NodeID,RepID,Title),

decodip(RepID,_,RepText),!,

attribute(OldAttr),attribute(30),

write("Сигнал: "),attribute(OldAttr),write(Title),nl,

attribute(30),

write("Расшифровка: "),attribute(OldAttr),write(RepText),nl,

readchar(_),

removewindow(23,1).

/*Сохранение БД*/

SaveBD:-

makewindow(10,90,91,"Сохранение БД",5,10,10,60,1,2," "),

write("\n\n Введите имя файла:"),

readln(Filename),

save(FileName,FaultBD),

removewindow(31,1).

/*Загрузка БД*/

LoadBDFile:-

makewindow(10,90,91,"",5,10,10,60,1,2," "),

dir("","*.*",FileName),

LoadBD(FileName),

fail.

LoadBDFile:-

removewindow(30,1).

/*Создание меню справки*/

EditBD:-

menu(5,24,90,95,["Добавление сигнала","Типы сигнала","Просмотр сигналов","Просмотр типа сигнала","Удаление сигнала","Удаление типа сигнала","Назад"],"Редактирование базы данных",0,Ch),

EditSelect(Ch).

/*Выбор пункта меню*/

EditSelect(Ch):-

Ch=0;

Ch=7;

Ch=1,AddFault;

Ch=3,ShowFaults;

Ch=5,DeleteFault;

Ch=2,AddRepair;

Ch=4,ShowRepairs;

Ch=6,DeleteRepair.

/*Добавление сигнала*/

AddFault:-

makewindow(40,90,95,"Добавление сигнала",4,5,14,70,1,2," "),

write("сигналы в БД хранятся в виде:\n signalip(Номер_сигнала, Номер_описания, Название)"),nl,

write("Номер сигнала - номер предсигнала\n"),

write("Номер_типа сигнала - номер записи типа сигнала \n"),

write("Название - краткое описание сигнала\n "),

attribute(OldAttr),attribute(95),

write("Новый сигнал\n"),

write("Номер_сигнала:"),readint(NewID),

write("Номер_типа сигнала:"),readint(NewRep),

write("Название:"),readln(NewTitle),

attribute(OldAttr),

assertz(signalip(NewID,NewRep,NewTitle),FaultBD),

write("Запись добавлена- "),readchar(_),

removewindow(40,1).

AddFault:-

removewindow(40,1).

/*Вызов просмотра сигналов*/

ShowFaults:-

makewindow(40,90,95,"Просмотр сигналов:",1,0,24,80,1,2," "),

ShowFault(0,0),!,

removewindow(40,1).

/*Просмотр сигналов*/

ShowFault(_,_):-

signalip(NewID,RepID,Title),

write(" ",NewID,"\t|",RepID,"\t|",Title),nl,

fail.

ShowFault(_,_):-

attribute(OldAttr),attribute(95),

write("Просмотр закончен. Нажмите любую клавишу"),readchar(_),

attribute(OldAttr).

/*Удаление сигнала*/

DeleteFault:-

makewindow(40,90,95,"Удаление сигнала:",4,5,14,70,1,2," "),

write("Введите номер удаляемого сигнала :"),readint(DelID),

signalip(DelID,_,_),!,

retractall(signalip(DelID,_,_),FaultBD),!,

attribute(OldAttr),attribute(95),

write("Запись удалена "),readchar(_),

attribute(OldAttr),

removewindow(40,1).

/*Добавление типа сигнала*/

AddRepair:-

makewindow(40,90,95,"Добавление типаа сигнала",4,5,14,70,1,2,""),

write("Типа сигнала в БД хранятся в виде:\n decodip(Номер_типа сигнала, Название, Метод_расшифровки)"),nl,

write("Номер_типа сигнала - Номер записи типа сигнала\n"),

write("Название - краткое описание данных расшифровки\n"),

write("Метод_расшифровки - метод расшифровки данных\n"),

attribute(OldAttr),attribute(95),

write("Новое описание\n"),

write("Номер_типа сигнала:"),readint(NewID),

write("Название:"),readln(NewDescr),

write("Метод_расшифровки:"),readln(NewAdvice),

attribute(OldAttr),

assertz(decodip(NewID,NewDescr,NewAdvice),FaultBD),

write("Запись добавлена "),readchar(_),

removewindow(40,1).

AddRepair:-

removewindow(40,1).

/*Просмотр описаний*/

Showrepairs:-

makewindow(40,90,95,"Просмотр описаний:",1,0,24,80,1,2," "),

ShowRepair(0,0),!,

removewindow(40,1).

ShowRepair(_,_):-

decodip(NewID,Descr,Advice),

write(" ",NewID,"\t|",Descr,"\t|",Advice),nl,fail.

ShowRepair(_,_):-

attribute(OldAttr),attribute(30),

write("Нажмите любую клавишу"),readchar(_),

attribute(OldAttr).

/*Удаление типа сигнала*/

DeleteRepair:-

makewindow(40,90,95,"Удаление типа сигнала",4,5,14,70,1,2," "),

write("Введите номер удаляемого типа сигнала:"),readint(DelID),

decodip(DelID,_,_),!,

retractall(decodip(DelID,_,_),FaultBD),!,

attribute(OldAttr),attribute(30),

write("Запись удалена"),readchar(_),

attribute(OldAttr),

removewindow(40,1).

/*Создание окна ошибок*/

ErrorExitProg(Msg):-

ExitProg.

/*Выход из программы*/

ExitProg:-

UnLoadBD,

exit(0).

/*Главная функция Main*/

Main:-

Zastavka,

CreateTitle,

LoadBD("valekbd.dat"),

Start,

ExitProg.



Результат работы программы:

	

	Загрузка БД:



	

Добавление:





	Анализ:

	



Сохранение БД: