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

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

     Как и в системе, основанной на фреймах, в семантической сети  могут быть представлены  родовидовые отношения, которые позволяют реализовать наследование свойств от объектов-родителей. Это обстоятельство приводит к тому, что  семантические  сети  приобретают большинство недостатков и достоинств представления знаний в виде фреймов. Но основное преимущество семантических сетей заключается в их наглядности и непосредственной связанности понятий через сеть, которая позволяет быстро находить связи понятий и  на этой основе управлять принимаемыми решениями. Именно этот формализм был использован в данной работе в  качестве  формализма  для представления знаний в БЗ. Основной  недостаток  сетей — сложность обработки исключений. Таким образом, используя данные понятия, наша ПО на языке microLISP представляется следующим образом:

((1 «общее недомогание»)

 (2 «сухость, першение, саднение»)

 (3 «кашель сначала сухой, затем с мокротой»)

 (4 «голос хриплый или беззвучный»)

 (5 «иногда боль при глотании»)

 (6 «головная боль»)

 (7 «повышение температуры тела»)

 (8 «быстрая утомляемость голоса»)

 (9 «периодический кашель с мокротой»)

 (10 «охриплость с афонией»)

 (11 «ощущение неловкости»)

 (12 «жжение в горле»)

 (13 «кашель при обострении»)

 (14 «сухой кашель»)

 (15 «слизистая покрыта густой слизью „)

 (16 “откашливание с прожилками крови»))

((«ларингит острый» (1 2 3 4 5 6 7))

 («ларингит хронический катаральный» (1 2 4 8 9))

 («ларингит хронический гипертрофический» (1 10 11 12 13))

 («ларингит хронический атрофический» (1 2 4 14 15 16)))
4. Разработка меню экспертной системы

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

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

      1. Обработка данных, полученных с клавиатуры, и высвечивание водимых и выводимых данных на экране.

      2. Поддержка диалога между пользователем и системой.

   3.  Распознавание ситуации непонимания между пользователем       и системой.

      4. Обеспечение   «дружественности»   по   отношению   к        пользователю.

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

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

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

  Структурная схема системы меню представлена на рис.1
                                    

<img width=«175» height=«59» src=«ref-1_1947985224-305.coolpic» v:shapes="_x0000_s1037">                                              Главное меню   

<img width=«3» height=«41» src=«ref-1_1947985529-76.coolpic» v:shapes="_x0000_s1165"> <img width=«2» height=«40» src=«ref-1_1947985605-76.coolpic» v:shapes="_x0000_s1148"> <img width=«2» height=«40» src=«ref-1_1947985681-76.coolpic» v:shapes="_x0000_s1156">



                                 

<img width=«396» height=«41» src=«ref-1_1947985757-312.coolpic» v:shapes="_x0000_s1140"><img width=«69» height=«40» src=«ref-1_1947986069-191.coolpic» v:shapes="_x0000_s1073"><img width=«137» height=«40» src=«ref-1_1947986260-227.coolpic» v:shapes="_x0000_s1064"><img width=«108» height=«40» src=«ref-1_1947986487-217.coolpic» v:shapes="_x0000_s1055"><img width=«108» height=«40» src=«ref-1_1947986704-216.coolpic» v:shapes="_x0000_s1046">     

              1.Files          2.DataBase       3.Diagnosticka         4.Quit

<img width=«453» height=«502» src=«ref-1_1947986920-2311.coolpic» v:shapes="_x0000_s1026"><img width=«98» height=«116» src=«ref-1_1947989231-437.coolpic» v:shapes="_x0000_s1174 _x0000_s1183"> <img width=«329» height=«117» src=«ref-1_1947989668-872.coolpic» v:shapes="_x0000_s1190 _x0000_s1196 _x0000_s1201 _x0000_s1206">



<img width=«68» height=«31» src=«ref-1_1947990540-169.coolpic» v:shapes="_x0000_s1091"><img width=«79» height=«31» src=«ref-1_1947990709-174.coolpic» v:shapes="_x0000_s1113"><img width=«98» height=«31» src=«ref-1_1947990883-186.coolpic» v:shapes="_x0000_s1109"><img width=«98» height=«31» src=«ref-1_1947991069-187.coolpic» v:shapes="_x0000_s1104"><img width=«79» height=«31» src=«ref-1_1947990709-174.coolpic» v:shapes="_x0000_s1098"><img width=«89» height=«31» src=«ref-1_1947991430-180.coolpic» v:shapes="_x0000_s1082">

     1. LOAD        2. SAVE         1. ADD         2. DELETE       3. REDACT        4. VIEW

<img width=«195» height=«123» src=«ref-1_1947991610-666.coolpic» v:shapes="_x0000_s1139 _x0000_s1210"> <img width=«2» height=«98» src=«ref-1_1947992276-79.coolpic» v:shapes="_x0000_s1213"> <img width=«108» height=«98» src=«ref-1_1947992355-449.coolpic» v:shapes="_x0000_s1215">



<img width=«118» height=«41» src=«ref-1_1947992804-219.coolpic» v:shapes="_x0000_s1129"><img width=«98» height=«40» src=«ref-1_1947993023-216.coolpic» v:shapes="_x0000_s1132"><img width=«108» height=«40» src=«ref-1_1947993239-218.coolpic» v:shapes="_x0000_s1126"><img width=«127» height=«40» src=«ref-1_1947993457-228.coolpic» v:shapes="_x0000_s1134">

<img width=«128» height=«31» src=«ref-1_1947993685-195.coolpic» v:shapes="_x0000_s1027"><img width=«79» height=«31» src=«ref-1_1947993880-171.coolpic» v:shapes="_x0000_s1029"><img width=«108» height=«40» src=«ref-1_1947994051-220.coolpic» v:shapes="_x0000_s1122"><img width=«88» height=«40» src=«ref-1_1947994271-208.coolpic» v:shapes="_x0000_s1118">    Добавление       Добавление        Удаление              Удаление             Редактирование    Редактирование

симптомов         болезней             симптомов         неисправностей      симптомов        неисправностей
<img width=«137» height=«99» src=«ref-1_1947994479-368.coolpic» v:shapes="_x0000_s1136">

                                        Объяснение 

                                        логического

                                          вывода   
                                    рис.1  Структурная схема  меню
5. Разработка процедур оболочки
     1. Процедура «Загрузка» (loading):  загрузка БД производится путем загрузки  файла  с именем, указанным пользователем, в оперативную память для использования его содержимого в программе.

<img width=«70» height=«51» src=«ref-1_1947994847-276.coolpic» v:shapes="_x0000_s1038"> 

                                 Вход

<img width=«2» height=«21» src=«ref-1_1947995123-75.coolpic» v:shapes="_x0000_s1141">                               

<img width=«245» height=«69» src=«ref-1_1947995198-488.coolpic» v:shapes="_x0000_s1047">

                       Ввод имени файла

                          для загрузки

<img width=«2» height=«40» src=«ref-1_1947995686-76.coolpic» v:shapes="_x0000_s1149">


                             

<img width=«166» height=«69» src=«ref-1_1947995762-323.coolpic» v:shapes="_x0000_s1056">                      

                        Загрузка файла

                        с этим именем 

<img width=«2» height=«40» src=«ref-1_1947985681-76.coolpic» v:shapes="_x0000_s1157">


                               

<img width=«79» height=«51» src=«ref-1_1947996161-289.coolpic» v:shapes="_x0000_s1065">

                                  Выход
     2. Процедура «Сохранение» (saving):  сохранение БД означает запись

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

<img width=«70» height=«60» src=«ref-1_1947996450-301.coolpic» v:shapes="_x0000_s1074">

                                 Вход

<img width=«7» height=«22» src=«ref-1_1947996751-101.coolpic» v:shapes="_x0000_s1166">                              

<img width=«216» height=«60» src=«ref-1_1947996852-403.coolpic» v:shapes="_x0000_s1083">                       

                         Ввод имени файла

                             для записи

<img width=«2» height=«51» src=«ref-1_1947997255-77.coolpic» v:shapes="_x0000_s1175">                      

                               

<img width=«184» height=«60» src=«ref-1_1947997332-309.coolpic» v:shapes="_x0000_s1092">                    

                       Запись БД в файл

                          с этим именем  

<img width=«2» height=«22» src=«ref-1_1947997641-75.coolpic» v:shapes="_x0000_s1184">


<img width=«108» height=«60» src=«ref-1_1947997716-350.coolpic» v:shapes="_x0000_s1099">                            

                               Выход

 
    3. Процедура «Добавление» (adding):  добавление делится на добавление симптомов и добавление болезней. В первом случае запрашивается название болезни, к  которой  нужно  добавить симптом, затем вводится симптом,  и  происходит добавление.

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

<img width=«89» height=«60» src=«ref-1_1947998066-332.coolpic» v:shapes="_x0000_s1039">
                               Вход

<img width=«3» height=«31» src=«ref-1_1947998398-76.coolpic» v:shapes="_x0000_s1150">


<img width=«331» height=«70» src=«ref-1_1947998474-506.coolpic» v:shapes="_x0000_s1048">                               
                    Ввод названия болезни

                

<img width=«3» height=«50» src=«ref-1_1947998980-77.coolpic» v:shapes="_x0000_s1158">


<img width=«204» height=«377» src=«ref-1_1947999057-973.coolpic» v:shapes="_x0000_s1033">

<img width=«235» height=«60» src=«ref-1_1948000030-421.coolpic» v:shapes="_x0000_s1057">

                         Ввод симптома

                 

<img width=«3» height=«60» src=«ref-1_1948000451-77.coolpic» v:shapes="_x0000_s1167">




<img width=«329» height=«60» src=«ref-1_1948000528-374.coolpic» v:shapes="_x0000_s1066">               

                    Добавление симптома к        

             введенной ранее болезни

<img width=«2» height=«51» src=«ref-1_1948000902-77.coolpic» v:shapes="_x0000_s1176">



                                             - 

<img width=«51» height=«70» src=«ref-1_1948000979-289.coolpic» v:shapes="_x0000_s1142"><img width=«112» height=«81» src=«ref-1_1948001268-438.coolpic» v:shapes="_x0000_s1084">                              Еще                                     
                                   

<img width=«108» height=«50» src=«ref-1_1948001706-325.coolpic» v:shapes="_x0000_s1075">

                         +                       Выход
     Добавление болезни осуществляется путем введения с клавиатуры нового названия болезни и ее симптомов (для окончания ввода симптомов необходимо набрать 'end'). Добавление происходит в конец БД.
<img width=«108» height=«69» src=«ref-1_1948002031-398.coolpic» v:shapes="_x0000_s1040">                               Вход

                                

<img width=«8» height=«42» src=«ref-1_1948002429-116.coolpic» v:shapes="_x0000_s1168">      

      

   

                   Ввод названия болезни

<img width=«291» height=«70» src=«ref-1_1948002545-493.coolpic» v:shapes="_x0000_s1049">                

<img width=«3» height=«50» src=«ref-1_1948003038-77.coolpic» v:shapes="_x0000_s1177">                     

<img width=«195» height=«271» src=«ref-1_1948003115-808.coolpic» v:shapes="_x0000_s1034">      

              

                         Ввод симптома

<img width=«5» height=«52» src=«ref-1_1948003923-100.coolpic» v:shapes="_x0000_s1185"><img width=«226» height=«50» src=«ref-1_1948004023-398.coolpic» v:shapes="_x0000_s1058">                     

                  

                   

                                                _

<img width=«70» height=«71» src=«ref-1_1948004421-319.coolpic» v:shapes="_x0000_s1159"><img width=«101» height=«75» src=«ref-1_1948004740-401.coolpic» v:shapes="_x0000_s1067">                               end

                     

                     

<img width=«195» height=«50» src=«ref-1_1948005141-282.coolpic» v:shapes="_x0000_s1076">                               +

                                               Добавление болезни

                                               и всех ее симптомов   

<img width=«2» height=«31» src=«ref-1_1948005423-76.coolpic» v:shapes="_x0000_s1151">                                     

<img width=«89» height=«50» src=«ref-1_1948005499-296.coolpic» v:shapes="_x0000_s1085">                                            

                                                      Выход
4. Процедура  «Просмотр» (viewing):  осуществляется просмотр всей БД, содержащейся в данный момент в оперативной памяти.

<img width=«51» height=«41» src=«ref-1_1948005795-228.coolpic» v:shapes="_x0000_s1093">

                                      Вход

<img width=«3» height=«24» src=«ref-1_1948006023-87.coolpic» v:shapes="_x0000_s1197"><img width=«213» height=«300» src=«ref-1_1948006110-1016.coolpic» v:shapes="_x0000_s1030">                  

                    

                         Вывод названия болезни

<img width=«2» height=«31» src=«ref-1_1948007126-76.coolpic» v:shapes="_x0000_s1202"><img width=«264» height=«41» src=«ref-1_1948007202-336.coolpic» v:shapes="_x0000_s1100">                    

                    

<img width=«206» height=«50» src=«ref-1_1948007538-363.coolpic» v:shapes="_x0000_s1114">                    

                            Вывод симптомов этой

                                      болезни

<img width=«2» height=«21» src=«ref-1_1948007901-75.coolpic» v:shapes="_x0000_s1207">                     

                       

                                                        +

<img width=«60» height=«51» src=«ref-1_1948007976-250.coolpic» v:shapes="_x0000_s1191"><img width=«110» height=«81» src=«ref-1_1948008226-432.coolpic» v:shapes="_x0000_s1119">                                      Пуста

                                        БД?    

                                      

<img width=«79» height=«40» src=«ref-1_1948008658-260.coolpic» v:shapes="_x0000_s1123">                                      _

                                                                Выход
5.  Процедура  «Логический вывод» (expert):  консультация осуществляется следующим образом:  с помощью задания вопросов пользователю  о том, есть ли у него какой-то симптом, программа  определяет диагноз. В процессе работы процедура в оперативной  памяти формирует  временные  динамические базы данных:  БД-YES (БД, содержащая симптомы, на которые пользователь ответил «Да») и БД-NO  (БД, содержащая симптомы, на  которые пользователь ответил «Нет»). Для того, чтобы процедура вывела диагноз, необходимо,  чтобы пользователь  ответил «Да» на все вопросы о симптомах, характеризующих эту болезнь. Схема алгоритма данной процедуры представлена ниже.
<img width=«70» height=«41» src=«ref-1_1948008918-248.coolpic» v:shapes="_x0000_s1041">    продолжение
--PAGE_BREAK--

                                          Вход

<img width=«2» height=«22» src=«ref-1_1948009166-75.coolpic» v:shapes="_x0000_s1160">


<img width=«281» height=«492» src=«ref-1_1948009241-2113.coolpic» v:shapes="_x0000_s1031">
              конец                  Выбор                      

<img width=«89» height=«22» src=«ref-1_1948011354-178.coolpic» v:shapes="_x0000_s1143"><img width=«110» height=«90» src=«ref-1_1948011532-461.coolpic» v:shapes="_x0000_s1050">                                          болезни

<img width=«69» height=«31» src=«ref-1_1948011993-219.coolpic» v:shapes="_x0000_s1059">                                            из БД

  Выход 

<img width=«2» height=«41» src=«ref-1_1948012212-76.coolpic» v:shapes="_x0000_s1169">                                                        

<img width=«117» height=«387» src=«ref-1_1948012288-1205.coolpic» v:shapes="_x0000_s1035">
                                         Выбор              конец             

                                       симптома

<img width=«79» height=«11» src=«ref-1_1948013493-138.coolpic» v:shapes="_x0000_s1178"><img width=«110» height=«129» src=«ref-1_1948013631-567.coolpic» v:shapes="_x0000_s1068">                                           этой

<img width=«131» height=«41» src=«ref-1_1948014198-293.coolpic» v:shapes="_x0000_s1077">                                       болезни                    Вывод этой    

                                                                         болезни

<img width=«2» height=«31» src=«ref-1_1948014491-76.coolpic» v:shapes="_x0000_s1094">                 

<img width=«2» height=«21» src=«ref-1_1947995123-75.coolpic» v:shapes="_x0000_s1186">


<img width=«69» height=«40» src=«ref-1_1948014642-250.coolpic» v:shapes="_x0000_s1086"><img width=«90» height=«110» src=«ref-1_1948014892-491.coolpic» v:shapes="_x0000_s1127">

                                              Он          _           Выход

<img width=«50» height=«40» src=«ref-1_1948015383-206.coolpic» v:shapes="_x0000_s1192">                                             есть

                                             в БД-  

                                             YES    

                 

                                                                           Он             +

<img width=«137» height=«2» src=«ref-1_1948015589-81.coolpic» v:shapes="_x0000_s1216"><img width=«117» height=«41» src=«ref-1_1948015670-261.coolpic» v:shapes="_x0000_s1130"><img width=«100» height=«100» src=«ref-1_1948015931-464.coolpic» v:shapes="_x0000_s1105">                                           +                             есть

                                                                         в БД-                

                                                                            NO                

                                                                                    _

<img width=«2» height=«12» src=«ref-1_1948016395-74.coolpic» v:shapes="_x0000_s1198"><img width=«226» height=«60» src=«ref-1_1948016469-439.coolpic» v:shapes="_x0000_s1110">                                                                                 

                                                           Вывод вопроса о том,

                                                         есть ли у пользователя

<img width=«118» height=«41» src=«ref-1_1948016908-222.coolpic» v:shapes="_x0000_s1124"><img width=«108» height=«60» src=«ref-1_1948017130-258.coolpic» v:shapes="_x0000_s1120">                                                               этот симптом     

<img width=«2» height=«22» src=«ref-1_1948009166-75.coolpic» v:shapes="_x0000_s1203">      Добавить его  в                                                                                          Добавить его

      БД-YES                                                                                                           в БД-NO  

<img width=«213» height=«79» src=«ref-1_1948017463-491.coolpic» v:shapes="_x0000_s1211"><img width=«147» height=«12» src=«ref-1_1948017954-159.coolpic» v:shapes="_x0000_s1208">                                                                                          _

<img width=«82» height=«62» src=«ref-1_1948018113-326.coolpic» v:shapes="_x0000_s1115">                                                                           Да?

                                                         + 
6. Процедура «Объяснение  логического  вывода»  (logout):  данная процедура выводит список симптомов болезни, которая была получена с помощью процедуры логического вывода, объясняя этим ее диагноз.
<img width=«108» height=«50» src=«ref-1_1948018439-323.coolpic» v:shapes="_x0000_s1042">                        

                                             Вход

<img width=«2» height=«40» src=«ref-1_1947985681-76.coolpic» v:shapes="_x0000_s1144">




<img width=«386» height=«50» src=«ref-1_1948018838-365.coolpic» v:shapes="_x0000_s1060">

              Выбор определенной болезни из БД

<img width=«2» height=«60» src=«ref-1_1948019203-77.coolpic» v:shapes="_x0000_s1152">




 

<img width=«436» height=«50» src=«ref-1_1948019280-450.coolpic» v:shapes="_x0000_s1051">

                   Вывод симптомов этой болезни

<img width=«2» height=«69» src=«ref-1_1948019730-78.coolpic» v:shapes="_x0000_s1161">




                  

<img width=«98» height=«41» src=«ref-1_1948019808-274.coolpic» v:shapes="_x0000_s1069">                                      

                                           Выход
7. Процедура «Удаление» (deleting):  удаление делится на удаление симптомов и  удаление  болезней. При удалении симптома необходимо ввести название болезни,  которой  принадлежит  симптом, подлежащий удалению, а также название самого симптома. Имеется возможность  удалить несколько симптомов у болезни  (для  окончания  ввода  удаляемых признаков необходимо набрать 'end').

<img width=«50» height=«41» src=«ref-1_1948020082-228.coolpic» v:shapes="_x0000_s1078">

                                    Вход

<img width=«3» height=«22» src=«ref-1_1948020310-75.coolpic» v:shapes="_x0000_s1170">                              

                        

<img width=«216» height=«31» src=«ref-1_1948020385-279.coolpic» v:shapes="_x0000_s1087">                           Ввод названия болезни

<img width=«4» height=«41» src=«ref-1_1948020664-76.coolpic» v:shapes="_x0000_s1179">                     
<img width=«175» height=«194» src=«ref-1_1948020740-703.coolpic» v:shapes="_x0000_s1036"><img width=«216» height=«50» src=«ref-1_1948021443-348.coolpic» v:shapes="_x0000_s1095">

                           Ввод симптома, под-

                            лежащего удалению

<img width=«3» height=«22» src=«ref-1_1948020310-75.coolpic» v:shapes="_x0000_s1187">                  

<img width=«91» height=«71» src=«ref-1_1948021866-373.coolpic» v:shapes="_x0000_s1101">

                                                    +

<img width=«80» height=«2» src=«ref-1_1948022239-78.coolpic» v:shapes="_x0000_s1193"><img width=«70» height=«41» src=«ref-1_1948022317-248.coolpic» v:shapes="_x0000_s1106">                                       End

                                                                    Выход

                              -
     При удалении болезни запрашивается ее название. Вместе с ней из БД удаляются и все ее симптомы.
<img width=«89» height=«60» src=«ref-1_1948022565-329.coolpic» v:shapes="_x0000_s1107">

                                              Вход

<img width=«3» height=«21» src=«ref-1_1948022894-75.coolpic» v:shapes="_x0000_s1194">


<img width=«245» height=«40» src=«ref-1_1948022969-331.coolpic» v:shapes="_x0000_s1102">

                               Ввод названия болезни

<img width=«5» height=«41» src=«ref-1_1948023300-99.coolpic» v:shapes="_x0000_s1199">                      

                     

<img width=«223» height=«79» src=«ref-1_1948023399-384.coolpic» v:shapes="_x0000_s1116">             

                              Удаление этой болезни

                                   и всех ее симптомов       

<img width=«2» height=«41» src=«ref-1_1948012212-76.coolpic» v:shapes="_x0000_s1204">              
<img width=«108» height=«40» src=«ref-1_1948023859-288.coolpic» v:shapes="_x0000_s1111">      

                                            Выход
    8. Процедура «Редактирование» (redacting): редактирование делится на редактирование симптомов и редактирование  болезней. В первом случае вводится  название  болезни, симптом  которой нужно исправить, сам симптом и его отредактированное значение.

Из БД удаляется старое значение симптома и добавляется новое.

<img width=«79» height=«51» src=«ref-1_1948024147-289.coolpic» v:shapes="_x0000_s1043">

                                          Вход                            

<img width=«2» height=«12» src=«ref-1_1948016395-74.coolpic» v:shapes="_x0000_s1145">                       
                         Ввод названия болезни

<img width=«2» height=«31» src=«ref-1_1948005423-76.coolpic» v:shapes="_x0000_s1153"> <img width=«216» height=«31» src=«ref-1_1948024586-279.coolpic» v:shapes="_x0000_s1052">

<img width=«264» height=«31» src=«ref-1_1948024865-303.coolpic» v:shapes="_x0000_s1061">                      

                      Ввод симптома для исправления

<img width=«2» height=«41» src=«ref-1_1948012212-76.coolpic» v:shapes="_x0000_s1162">                  
<img width=«184» height=«31» src=«ref-1_1948025244-224.coolpic» v:shapes="_x0000_s1070">                     

                       Удаление этого симптома

<img width=«2» height=«31» src=«ref-1_1948005423-76.coolpic» v:shapes="_x0000_s1171">


<img width=«255» height=«31» src=«ref-1_1948025544-300.coolpic» v:shapes="_x0000_s1079">                     

                     Ввод исправленного симптома

<img width=«2» height=«21» src=«ref-1_1947995123-75.coolpic» v:shapes="_x0000_s1180">                   

<img width=«204» height=«31» src=«ref-1_1948025919-229.coolpic» v:shapes="_x0000_s1088">                    

                            Добавление нового значения

<img width=«3» height=«21» src=«ref-1_1948022894-75.coolpic» v:shapes="_x0000_s1188">


<img width=«69» height=«40» src=«ref-1_1948026223-252.coolpic» v:shapes="_x0000_s1096">                   

                                     Выход
   При редактировании болезни необходимо ввести ее название и затем новое исправленное значение. Процедура  удалит старое значение и добавит новое.

<img width=«79» height=«50» src=«ref-1_1948026475-292.coolpic» v:shapes="_x0000_s1044">

                                            Вход

<img width=«2» height=«21» src=«ref-1_1947995123-75.coolpic» v:shapes="_x0000_s1146">


<img width=«245» height=«40» src=«ref-1_1948026842-336.coolpic» v:shapes="_x0000_s1053">

                             Ввод названия болезни

<img width=«2» height=«32» src=«ref-1_1948027178-76.coolpic» v:shapes="_x0000_s1154">


<img width=«223» height=«31» src=«ref-1_1948027254-235.coolpic» v:shapes="_x0000_s1062">

                              Удаление этой болезни

<img width=«5» height=«41» src=«ref-1_1948027489-109.coolpic» v:shapes="_x0000_s1163">


<img width=«244» height=«50» src=«ref-1_1948027598-368.coolpic» v:shapes="_x0000_s1071">

                                Ввод исправленного

                                           значения

<img width=«2» height=«50» src=«ref-1_1948027966-77.coolpic» v:shapes="_x0000_s1172">                     
<img width=«204» height=«70» src=«ref-1_1948028043-347.coolpic» v:shapes="_x0000_s1080">

                                     Добавление нового

                                            значения     

<img width=«2» height=«40» src=«ref-1_1947985681-76.coolpic» v:shapes="_x0000_s1181">




<img width=«89» height=«60» src=«ref-1_1948028466-332.coolpic» v:shapes="_x0000_s1089">

                                            Выход
рис. 2    Структурная схема программы <img width=«190» height=«46» src=«ref-1_1948028798-464.coolpic» alt=«Выноска 3 (без границы): Главная процедура» v:shapes="_x0000_s1220">

<img width=«89» height=«40» src=«ref-1_1948029262-206.coolpic» v:shapes="_x0000_s1045">

                                            Start

<img width=«3» height=«83» src=«ref-1_1948029468-79.coolpic» v:shapes="_x0000_s1147"> <img width=«183» height=«104» src=«ref-1_1948029547-1018.coolpic» alt=«Выноска 3 (без границы): Вывод главного меню, получение выбора и запуск выбранного режима» v:shapes="_x0000_s1221"> <img width=«116» height=«183» src=«ref-1_1948030565-1177.coolpic» alt='Выноска 3 (без границы): Вывод подменю «Файлы», получение выбора, запуск выбранной процедуры' v:shapes="_x0000_s1222">



<img width=«127» height=«41» src=«ref-1_1948031742-224.coolpic» v:shapes="_x0000_s1054">

                                           mainmenu

<img width=«453» height=«117» src=«ref-1_1948031966-921.coolpic» v:shapes="_x0000_s1155 _x0000_s1164 _x0000_s1173 _x0000_s1182"> <img width=«108» height=«79» src=«ref-1_1948032887-425.coolpic» alt=«Выноска 3 (без границы): Выход» v:shapes="_x0000_s1223">



<img width=«88» height=«31» src=«ref-1_1948033312-181.coolpic» v:shapes="_x0000_s1090"><img width=«118» height=«31» src=«ref-1_1948033493-192.coolpic» v:shapes="_x0000_s1072"><img width=«108» height=«31» src=«ref-1_1948033685-190.coolpic» v:shapes="_x0000_s1081"><img width=«118» height=«31» src=«ref-1_1948033493-192.coolpic» v:shapes="_x0000_s1063">

menufiles                    menubd                  menucons               quit                       

<img width=«182» height=«88» src=«ref-1_1948034067-698.coolpic» alt=«Выноска 3 (без границы): Логический вывод, режим консультации» v:shapes="_x0000_s1225"> <img width=«126» height=«126» src=«ref-1_1948034765-1074.coolpic» alt='Выноска 3 (без границы): Вывод подменю «БазаДанных», получение выбора, запуск выбранной процедуры' v:shapes="_x0000_s1224"> <img width=«2» height=«242» src=«ref-1_1948035839-84.coolpic» v:shapes="_x0000_s1212"> <img width=«3» height=«137» src=«ref-1_1948035923-81.coolpic» v:shapes="_x0000_s1189"> <img width=«208» height=«65» src=«ref-1_1948036004-637.coolpic» alt=«Выноска 3 (без границы): Объяснение логического вывода» v:shapes="_x0000_s1226"> <img width=«252» height=«232» src=«ref-1_1948036641-1134.coolpic» v:shapes="_x0000_s1032">



<img width=«88» height=«41» src=«ref-1_1948037775-203.coolpic» v:shapes="_x0000_s1097">

<img width=«118» height=«122» src=«ref-1_1948037978-565.coolpic» alt=«Выноска 3 (без границы): Запись БД» v:shapes="_x0000_s1227">                                                                   log_out

<img width=«405» height=«109» src=«ref-1_1948038543-1175.coolpic» v:shapes="_x0000_s1195 _x0000_s1200 _x0000_s1205 _x0000_s1233"> <img width=«127» height=«31» src=«ref-1_1948039718-195.coolpic» v:shapes="_x0000_s1209">



<img width=«89» height=«31» src=«ref-1_1948039913-181.coolpic» v:shapes="_x0000_s1121"><img width=«108» height=«31» src=«ref-1_1948040094-193.coolpic» v:shapes="_x0000_s1125">    продолжение
--PAGE_BREAK--<img width=«89» height=«31» src=«ref-1_1947991430-180.coolpic» v:shapes="_x0000_s1117"><img width=«118» height=«31» src=«ref-1_1948033493-192.coolpic» v:shapes="_x0000_s1112"><img width=«89» height=«31» src=«ref-1_1948039913-181.coolpic» v:shapes="_x0000_s1108"><img width=«99» height=«31» src=«ref-1_1948040840-186.coolpic» v:shapes="_x0000_s1103">

loading            saving                  adding          deleting              viewing       redacting   

<img width=«222» height=«141» src=«ref-1_1948041026-1431.coolpic» v:shapes="_x0000_s1229 _x0000_s1230"> <img width=«126» height=«55» src=«ref-1_1948042457-410.coolpic» alt=«Выноска 3 (без границы): Загрузка БД» v:shapes="_x0000_s1228"> <img width=«99» height=«93» src=«ref-1_1948042867-592.coolpic» alt=«Выноска 3 (без границы): Просмотр содержимого БД» v:shapes="_x0000_s1232"> <img width=«116» height=«131» src=«ref-1_1948043459-943.coolpic» alt=«Выноска 3 (без границы): Удаление симптомов и болезней из БД, получнение выбора, запуск выбранной процедуры» v:shapes="_x0000_s1231"> <img width=«70» height=«136» src=«ref-1_1948044402-486.coolpic» v:shapes="_x0000_s1218"> <img width=«2» height=«136» src=«ref-1_1948044888-81.coolpic» v:shapes="_x0000_s1219">



<img width=«137» height=«31» src=«ref-1_1948044969-196.coolpic» v:shapes="_x0000_s1214"> <img width=«119» height=«31» src=«ref-1_1948045165-189.coolpic» v:shapes="_x0000_s1217"> <img width=«146» height=«33» src=«ref-1_1948045354-225.coolpic» v:shapes="_x0000_s1028"><img width=«118» height=«31» src=«ref-1_1948033493-192.coolpic» v:shapes="_x0000_s1138"><img width=«99» height=«31» src=«ref-1_1948040840-186.coolpic» v:shapes="_x0000_s1137"><img width=«117» height=«31» src=«ref-1_1948045957-194.coolpic» v:shapes="_x0000_s1135"><img width=«89» height=«31» src=«ref-1_1947991430-180.coolpic» v:shapes="_x0000_s1133"><img width=«108» height=«31» src=«ref-1_1948033685-190.coolpic» v:shapes="_x0000_s1131"><img width=«88» height=«31» src=«ref-1_1948033312-181.coolpic» v:shapes="_x0000_s1128">

plus                plussym               delill                delsym                redill               redsym

<img width=«262» height=«104» src=«ref-1_1948046702-1099.coolpic» v:shapes="_x0000_s1234 _x0000_s1235"> <img width=«164» height=«122» src=«ref-1_1948047801-996.coolpic» v:shapes="_x0000_s1238 _x0000_s1239"> <img width=«108» height=«102» src=«ref-1_1948048797-647.coolpic» alt=«Выноска 3 (без границы): Удаление болезни с ее симптомами» v:shapes="_x0000_s1236"> <img width=«99» height=«73» src=«ref-1_1948049444-472.coolpic» alt=«Выноска 3 (без границы): Удаление симптомов» v:shapes="_x0000_s1237">



6. Описание программы на   micro-LISP
     Структурная схема   программы   на   Лиспе  изображена  на  рис.2. Об основных процедурах  написано  в  разделе «Разработка процедур оболочки», в  котором представлены  схемы  алгоритмов их работы.  Текст программы находится в Приложении А, текст базы знаний — в Приложении В.

     Теперь перейдем непосредственно к описанию программы. Главная процедура start запускает процедуру mainmenu  (она  представлена  в  виде бесконечного цикла do, также представлены и все подменю:  menufiles, menubd и т.д.). Mainmenu рисует главное меню и здесь же с помощью выражения cond и eq?  организованно получение выбора и запуск выбранной процедуры.

     Процедура saving осуществляет запись БД в файл с помощью встроенного выражения with-output-to-file и функции write (все это  организованно в виде lambda-выражения).

     Загрузка файла (процедура loading) происходит с помощью  встроенных with-input-from-file и read (причем БД болезней представлена в виде списка *it_is*, а симптомов в виде списка *simptom*).

     Постановка диагноза осуществляется с помощью функции experting. Из БД выбирается болезнь ill, берется список ее симптомов spis_num и с  помощью функции exp_ill (spis_num,ill) определяется, есть ли у пользователя эти симптомы. Если эта функция будет ложной (на запрос пользователь  ответил  отрицательно),  то произойдет рекурсивный вызов функции experting от конца списка болезней (т.е. в дальнейшем будет выбрана  следующая  и  т.д.).В  процессе работы функции с помощью функции set!  формируются списки положительных и отрицательных ответов пользователя  *yes*  и *no*.  Если функция experting выполнила свою работу и диагноз поставлен успешно, то функция log_out  (объяснение  логического вывода)  выводит  на  экран  название  определенной болезни и ее симптомы (функция использует для этого функцию cond и рекурсию).

     В режиме  просмотра  списка болезней и симптомов (view_ill) используется cond и рекурсивный вызов  функции  от  хвоста  списка, что позволяет вывести все содержимое БД на экран.

     В режиме добавления болезней (add_ill) и симптомов (add_sym) используется  встроенная функция append (для соединения списков), а рекурсивный вызов функции addsyms обеспечивает возможность добавления  к болезни нескольких симптомов. При редактировании болезней (red_ill) и симптомов (red_sym) старое значение удаляется с помощью функции delete! (удаление элемента из списка), а новое обавляется с помощью append.

     Удаление болезней (del_ill) осуществляется с помощью функции delete!.. При удалении болезни автоматически удаляются  и  все  ее симптомы  (рекурсивно  вызывая  сама  себя  от конца удаляемого списка признаков функция delsyms последовательно удаляет  все  симптомы  этой болезни).

     Удаление симптома (del_sym) также осуществляется с помощью  delete!, но  при  этом  с  помощью  функции append формируется новый список симптомов болезни, симптом  которой  удаляется. Затем  происходит удаление болезни со старым списком симптомов {(set! *it_is* (delete!  (list ill spis_nums) *it_is))} и добавление  к  списку  *it_is* этой же болезни с новым списком.
7. Краткое описание встроенных предикатов и функций microLISP,

используемых в программе
Окна
     Окна являются объектами, подобными «портам», которые  представляют  собой  прямоугольные  области на экране. Предикат WINDOW? определяет, действительно ли заданный объект является портом, представляющим окно на экране. Все  интерактивные  окна  ввода-вывода  представляются  посредством окон, включая ввод-вывод, обеспечиваемый портами  STANDARD-INPUT  и STANDARD-OUTPUT.  Новые  окна-порты создаются и открываются с помощью  MAKE-WINDOW;  их   атрибуты   доступны   с   помощью WINDOW-GET-ATTRIBUTE и модифицируются WINDOW-SET-ATTRIBUTE!

     Окна  до тех пор не выводятся на экран, пока область для них не очистится с помощью WINDOW-CLEAR. WINDOW-DELETE очищает   область   экрана,   занятого   окном.   WINDOW-POPUP   и WINDOW-POPUP-DELETE выдают несколько перекрывающихся окон.

     Позиция окна на экране и размер его строк и столбцов устанавливаются WINDOW-GET-POSITION и WINDOW-GET-SIZE, соответственно;   модификация   выполняется  WINDOW-SET-POSITION!  и WINDOW-SET-SIZE!.

     Модификация позиции и размеров окна может быть выполнена перед  тем,  как  окно  изначально  выводится  на  экран   по WINDOW-CLEAR.   Позиция  курсора  устанавливается  с  помощью WINDOW-GET-CURSOR и изменяется WINDOW-SET-CURSOR!.. Курсор появляется на экране только тогда, когда  ввод  производится  с клавиатуры.
FLUSH-INPUT                            
 Процедура FLUSH-INPUT чистит буфер вводного порта.

     Формат     (FLUSH-INPUT {port})

     Параметр   port-  вводной  порт  (необязательный  аргумент).

Объяснение:

     FLUSH-INPUT отбрасывает любые литеры и включает  следующую  «последовательность  конца строки» (end-of-line) в буфер ввода, который связан с port, если он задан,  или  с  текущим вводным портом. Выдается неопределенное значение.



LAST-PAIR

  

Возвращает последнюю пару непустого списка.
LIST
Композиции пар, связанных через их cdr-компоненты, называются списками. Пустой список, обозначаемый  как  (),  также является списком. Когда цепочка cdr-связей в паре оканчивается  пустым  списком, тогда пара называется «собственным списком». Процедура LIST обеспечивает такой список, состоящий  из значений  его  аргументов. LIST* обеспечивает похожий список, но имеющий значение его последнего аргумента в cdr-компоненте последней пары цепочки.
MEMBER
MEMBER, MEMQ, MEMV            

Процедура

Данные процедуры выдают подсписок, начинающийся с некоторого специфического объекта в собственном списке.

     Формат     (MEMBER оbj list)

                (MEMQ оbj list)

                (MEMV оbj list)

    Параметры  obj — любой объект в «ЛИСП-МИКРО»;

                list — собственный список

Объяснение:

     Данные  процедуры  ищут первое появление obj в list, используя EQVAL? для сравнения (в случае MEMBER); при MEMQ  используется  EQ?;  при MEMV — EQV? Если obj найден, подсписок, содержащий obj как первый элемент,  выдается  как  результат. Если obj не найден в list, выдается «ложь».
DO     
Специальное выражение

DO обеспечивает наиболее общую возможность вычисления итераций.

 Формат

     (DO ((var (init {step}})...)(test exp ...) stmt ...)

     Параметры  var — любой идентификатор «ЛИСП-МИКРО»;

                init  -  любые  выражения  в   «ЛИСП-МИКРО».

 Вычисляется каждое  init;  результат используется как  значение  соответствующего  var.

                Этот аргумент необязательный;

                step...  -  любые  выражения   «ЛИСП-МИКРО».

 Вычисляется  каждое  init; результат используется как значение соответствующего var для  следующей  итерации.   Этот   необязательный                 аргумент   может  быть  описан,  только если    описан init;

                test -  любое  выражение  «ЛИСП-МИКРО».  Это                выражение  является  условием,  по  которому   итерация останавливается;

                exp… — любые выражения  «ЛИСП-МИКРО».  Эти                 выражения   вычисляются   перед  выходом  из       цикла;

                stmt… — любые выражения «ЛИСП-МИКРО».  Эти                 выражения  вычисляются по порядку каждый раз  как test возвращает «ложь».
8. Отладка программы
     Для удобства отладки программа писалась не вся сразу, а  постепенно, отдельными процедурами. Каждая процедура сначала отлаживалась и проверялась, а потом разрабатывалась следующая. После  проверки  каждой процедуры  в отдельности отлаживалась вся программа целиком и устранялись последние недоработки и ошибки.
9. Инструкция пользователю и пример выполнения программы
 Необходимые аппаратные средства




 Для работы данной программы необходимо:  — компьютер: желательно      IBM PC AT или XT; — оперативная память — не менее 512 Кb; — места      на винчестере (или любом другом запоминающем устройстве)-  не менее 100 Kb (в зависимости от размера базы данных); — дисплей с любой графической картой;  — операционная  среда  -  MS-DOS      версии 3.0 и выше.




Состав носителей данных:
     Для нормальной работы программы необходимо наличие следующих файлов:

           fun.lsp -  файл запуска  (файл  содержащий  всю  программу);

         bd2.lsp — файл базы данных (или любой другой файл, содержащий базу данных пользователя);

     Для запуска  программы  нужно   войти   в   Лисп, загрузить   файл fun.lsp, набрать start и нажать клавишу {ENTER}.



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

     — для выбора нужного пункта меню/подменю нужно набрать номер этого пункта;

     — для  перехода  из нижнего подменю в исходное меню/подменю нужно

нажать клавишу {ESC};

     — для  выхода из программы нужно выбрать пункт главного меню <Выход>.
     Работа с подменю <Файлы>:

      — для работы с пунктом <Загрузка>:

      — наберите на клавиатуре название нужного вам файла базы  данных и нажмите клавишу {ENTER};

      — для работы с пунктом <Сохранить> :

      — наберите имя файла и нажмите {ENTER}.
     Работа с подменю <БазаДанных>:

      — для работы с пунктом <Редактирование> нужно:

  — выбрать  будете  ли Вы редактировать названия неисправностей или признаков (нажать соответственно цифру {1} или {2});

     — ввести название неисправности или признака для редактирования;

     — ввести новые исправленные значения;

     — для работы с пунктом <Добавление> нужно:

      — выбрать  будете  ли Вы добавлять названия неисправностей или             

         признаков (нажать соответственно цифру {1} или {2});

       — путем ввода  информации с клавиатуры внести новую запись;

       — для работы с пунктом <Удаление> нужно:

       — выбрать  будете  ли  Вы  удалять названия неисправностей или 

          признаков (нажать соответственно цифру {1} или {2});

      — ввести название удаляемой неисправности или признака;

      — для работы с пунктом <Просмотр> необходимо знать, что:

      — информацию на экране можно менять, нажимая клавишу {ESC}.
     Работая с подменю <Консультация>, нужно:

      — отвечать на вопросы (набирать соответственно 'Д' или 'Н' и нажимать клавишу {ENTER}).
Заключение
     В данной работе была реализована идея создания фрагмента оболочки экспертной системы. В результате разработки КПР была получена интегрированная среда по диагностике заболеваний. К плюсам  данной программы можно  отнести довольно поверхностные знания пользователя по работе с компьютером, которые требуются для работы с ней.

     Среди возможных  пожеланий можно сказать о разработке системы помощи при работе с программой. Можно также усложнить программу, переписав ее так, чтобы она работала на основе рассуждений с использованием вероятностного подхода. Часто к экспертным  системам  предъявляют  дополнительное требование  — способность иметь дело с неопределенностью и неполнотой. Информация о поставленной задаче может быть неполной или  ненадежной; отношения  между  объектами  предметной  области  могут быть приближенными. Например, может не быть полной уверенности в  наличии  у пользователя некоторого симптома или в том, что данные, полученные при определении, верны.  Во всех этих случаях как раз и необходимы рассуждения с использованием вероятностного подхода.
Библиографический список
1. Ин Ц.,  Соломон Д. Использование Турбо-Пролога: Пер. с англ. -Мир, 1993.-608 с.

2. Таусенд К.,  Фохт Д.  Проектирование и программная  реализация         экспертных систем на персональных ЭВМ:  Пер.  с англ.  — М.: Финансы и статистика, 1990.- 320 с.

3. Хювенен Э.,  Сеппянен Й.  Мир Лиспа.  В 2-х т. Пер. с финск. — М.: Мир, 1990.
                                   Приложение А

 Полный текст программы на языке micro-LISP (файл «FUN.LSP):
(define mainw(make-window „ДОКТОР“ #!true))

(define mmenuw(make-window „МЕНЮ“ #!true))

(define menufw(make-window „__ФАЙЛЫ“ #!true))

(define menudbw(make-window „БазаДанных“ #!true))

(define menucw(make-window „_____________________________ДИАГНОСТИКА“ #!true))

(define vieww(make-window „____________ПРОСМОТР“ #!true))

(define addiw(make-window „____________ДОБАВЛЕНИЕ БОЛЕЗНИ“ #!true))

(define addsw(make-window „__________ДОБАВЛЕНИЕ СИМПТОМОВ“ #!true))

(define rediw(make-window „________РЕДАКТИРОВАНИЕ БОЛЕЗНИ“ #!true))

(define redsw(make-window „_______РЕДАКТИРОВАНИЕ СИМПТОМА“ #!true))

(define deliw(make-window „______________УДАЛЕНИЕ БОЛЕЗНИ“ #!true))

(define delsw(make-window „_____________УДАЛЕНИЕ СИМПТОМА“ #!true))

(define submenuw(make-window „___Работа с:“ #!true))

(define menulw(make-window „Введите ИМЯ ФАЙЛА :“ #!true))
(define f)

(define *symptom*)

(define *it_is*)

(define *yes* '())

(define *no* '())
(define (start)

      (window-set-position! mainw 1 1)

      (window-set-size! mainw 23 78)

      (window-clear mainw)

      (mainmenu))
    продолжение
--PAGE_BREAK--
еще рефераты
Еще работы по информатике