Аналогия в задачах принятия решений

Автор: Пользователь скрыл имя, 21 Августа 2011 в 14:30, дипломная работа

Описание работы

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

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

Содержание

Введение 3
I. Общие понятия и определения 5
1.1. Аналогия и ее значимость 5
1.2. Виды умозаключений и сравнение их с аналогией 8
1.3. Аналогия и человек 12
1.4. Виды аналогий 13
1.5. Степень достоверности выводов по аналогии 14
1.6. Обзор результатов в области исследований по аналогии, как способа принятия решений в ИС 15
1.7. Понятие логической экспертной системы
1.7.1
1.7.2
1.7.3.
1.7.4.
II. Аналогия при решении задач 19
2.1. Исследования в области формализации понятия аналогии 19
2.2. Теория аналогии 26
2.2.1. Формализация аналогии 26
2.2.2. Аналогия и дедукция 31
2.2.3. Логика первого порядка для аналогии 33
2.3. Реализация механизма аналогии 36
2.3.1. Реализация механизма аналогии 37
2.3.2. Реализация системы аналогии 38
III. Программная реализация вывода по аналогии 45
3.1. Создание базы знаний 45
3.2. Механизм логического вывода 46
3.3. Обновление базы данных 48
3.4. Интерфейс пользователя 50
Заключение 56
Список использованных источников

Работа содержит 1 файл

Diplom.doc

— 1.34 Мб (Скачать)

      proverka_svoystvo(H):– /*в базе нет никакой информации о данном свойстве, получаем ее у человека*/

                   svoystvo(H,S),

                   nl,write("Оно ",S,"? (1 — да, 2 — нет)"),

                   proverka_klav(A),

                   dobavlaem_v_bazu(svoystvo_is(H,A)),

                   proverka_svoystvo(H). 

      Предикат  proverka_klav осуществляет проверку нажатой пользователем клавиши, и если она отлична от '1' или '2', выводит соответствующее сообщение и повторно считывает символ с клавиатуры. Реализация:

      proverka_klav(C):–

             readchar(C1),

             proverka (C1, C).

      proverka (C, C):–

                '1'<=C,C<='2',!.

      proverka(_,C):–

                write("Нажмите 1 или 2!"),nl,

                readchar(C1),

                proverka(C1,C). 

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

      Реализация:

      obnovit:–

             nl,write("Введите название животного:"),

             readln(S),

             dobav_svoystvo(L), /* указываем свойства  животного */

             dobavlaem_v_bazu(pravilo(S,L),knowledge),    /* добавляем информацию в базу знаний*/

             save("animals.ddb",knowledge)   /* сохраняем  базу знаний в файл */. 

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

      read_svoystvo. 

      dobav_svoystvo(L):–

            svoystvo_is(_,'1'),!,  /* имеется информация  о свойствах  животного */

            nl,write("О нем известно, что оно: "),

            print_svoystvo(1,[],L1),  /* вывод имеющейся  информации о животном */

            nl,write("Известно ли о нем еще  что-нибудь?

            (1 — да, 2 — нет)"),

            proverka_klav(C),

            read_svoystvo(C,L1,L).

      dobav_svoystvo(L):–

            read_svoystvo('1',[],L). 

      Предикат  read_svoystvo, используя предикат ex_svoystvo, добавляет в список номера свойств, уже имеющихся в базе; используя предикат new_svoystvo, добавляет в список номера новых свойств, а также описания самих свойств — в базу знаний. 

      read_svoystvo('1',L,L2):

                ex_svoystvo(1,L,L1,N),

                new_svoystvo(N,L1,L2),!.

      read_svoystvo(_,L,L):–!. 

      3.4. Интерфейс пользователя 

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

      Интерфейс реализован следующим образом: 

      DOMAINS

      i=integer

      s=string

      c=char

      li=i* /* список целых чисел */ 

      DATABASE — knowledge

      svoystvo(i,s) /* свойства животных */

      pravilo(s,li) /* описания животных */ 

      DATABASE — dialog

      svoystvo_is(i,c) /* номер условия; '1' — имеет место,  '2' — не имеет места у загаданного      животного */ 

      PREDICATES

      start

      animals       /* отгадывает животное */

      check(li)     /* добавляет в базу информацию  о новом  животном */

      proverka_svoystvo(i) /* проверяет, обладает ли загаданное  животное свойством с данным номером */

      obnovit         /* добавляет в базу информацию о новом животном */

      dobav_svoystvo(li) /* возвращает список, состоящий из  номеров свойств, имеющихся у  нового животного */

      print_svoystvo(i,li,li)   /* добавляет в список номера  свойств, относительно которых  уже были даны  утвердительные ответы */

      read_svoystvo(c,li,li)  /* добавляет в список номера  свойств, о которых еще не  спрашивалось */

      ex_svoystvo(i,li,li,i)   /* добавляет в список номера  имеющихся  в базе свойств,  которыми обладает  новое животное */

      wr_svoystvo(c,i,li,li)

      new_svoystvo(i,li,li)  /* добавляет в список номера  новых  свойств, которыми обладает  новое  животное, а также добавляет  описания  новых свойств в базу  знаний */

      proverka_klav(c) /* с помощью предиката proverka читает  символ с клавиатуры, пока он   не окажется равен '1' или '2'*/

      proverka(c,c) /* добивается, чтобы пользователь  нажал один  из символов, '1' или  '2' */

      CLAUSES

      start:–

             consult("animals.ddb",knowledge),  /*  загружаем в базу информацию из базы знаний */

             write ("Загадайте животное, а я попытаюсь его  отгадать"),nl,

             animals,                          /* попытка отгадать загаданное животное */

             retractall(_,dialog),        /* очищаем  текущую информацию */

             retractall(_,knowledge), /* очищаем информацию  об известных животных и свойствах */

             nl,nl,write("Хотите еще раз сыграть? (1 — Да,  2 — Нет)"),

             proverka_klav(C),

             C='1',!,start.

      start:–

             nl,nl,write("Всего доброго! До новых встреч"),

             readchar(_).

      animals:–

              pravilo(X,L),

              check(L),

              nl,write("Я думаю, это ",X),

              nl,write("Я прав? (1 — да, 2 — нет)"),

              proverka_klav(C),C='1',!.

      animals:–

              nl,write("Я не знаю, что это за  животное"),nl,

              nl,write("Давайте добавим его в  мою базу знаний."),nl,

              obnovit.

      obnovit:–

              nl,write("Введите название животного:"),

              readln(S),

              dobav_svoystvo(L), /* указываем свойства  животного */

              dobavlaem_v_bazu(pravilo(S,L),knowledge), /* добавляем информацию

                        в базу знаний*/

              save("animals.ddb",knowledge) /* сохраняем базу

                         знаний в файл */.

      dobav_svoystvo(L):–

                   svoystvo_is(_,'1'),!, /* имеется информация 

                  о свойствах животного */

                   nl,write("О нем известно, что оно: "),

                   print_svoystvo(1,[],L1),

               /* вывод имеющейся о животном 

                  информации */

                   nl,write("Известно ли о нем еще  что-нибудь?

                   (1 — да, 2 — нет)"),

                   proverka_klav(C),

                   read_svoystvo(C,L1,L).

      dobav_svoystvo(L):–

                   read_svoystvo('1',[],L).

      print_svoystvo(H,L,L):–

              not(svoystvo(H,_)),!.

      print_svoystvo(H,L,L1):–

               svoystvo_is(H,'1'),!,

               svoystvo(H,T),

               H1=H+1,

              nl,write(T),

               print_svoystvo(H1,[HL],L1).

      print_svoystvo(H,L,L1):–

               H1=H+1,

               print_svoystvo(H1,L,L1).

      read_svoystvo('1',L,L2):

                ex_svoystvo(1,L,L1,N),

                new_svoystvo(N,L1,L2),!.

      read_svoystvo(_,L,L):–!.

      ex_svoystvo(N,L,L,N):–

             not(svoystvo(N,_)),!.

      ex_svoystvo(N,L,L1,N2):–

               svoystvo_is(N,_),!,

               N1=N+1,

               ex_svoystvo(N1,L,L1,N2).

      ex_svoystvo(N,L,L1,N2):–

               svoystvo(N,S),

               nl,write("Оно ",S,"? (1 — да, 2 — нет)"),

               proverka_klav(A),

               wr_svoystvo(A,N,L,L2),

               N1=N+1,

               ex_svoystvo(N1,L2,L1,N2).

      wr_svoystvo('1',N,L,[N L]):–!.

      wr_svoystvo('2',_,L,L):–!.

      new_svoystvo(N,L,L1):–

             nl,write("Есть еще свойства? (1 — да,

             2– нет)"),

             proverka_klav(A),

             A='1',!,

             nl,write("Укажите новое свойство,  которым обладает животное"),

             nl,write("в виде 'оно <описание  нового свойства>'"), readln(S),

             dobavlaem_v_bazuz(svoystvo(N,S)),  /* добавление  нового свойства  в базу знаний */

             N1=N+1,

             new_svoystvo(N1,[N L],L1).

      new_svoystvo(_,L,L).

      check([HT]):–

                    proverka_svoystvo(H),

                    check(T).

      check([]).

      proverka_svoystvo(H):-

Информация о работе Аналогия в задачах принятия решений