Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

/* Экспертная система «Взаимозачет» */

domains

list_str = string*

list_list = list_str*

database – cep

cep (list_str, integer)

database – db

db_dan (string, integer, string)

predicates

dolg (string, integer, list_str)

prinad (string, list_str)

min (integer, integer, integer)

vivod (list_str)

run

wr (list_list, integer)

analis

el_num_in_list (integer, list_list, list_str)

zachet (list_str, integer)

goal

run.

clauses

run:-

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

makewindow (2, 33, 44, "Взаимозачеты ", 3, 5, 20, 70),

write ("Составить цепочки взаимозачетов"), nl,

write ("Введите первого должника: "),

/* правило, управляющее работой программы */

readln (X),

write ("Введите сумму: "),

readint (Sum), nl,

write ("Цепочки должников: "), nl,

consult ("db.txt", db),

not (dolg (X, Sum, [X])), nl,

analis, nl,

retractall (cep (_, _)),

write ("Для завершения работы нажмите любую клавишу."),

readchar (_),

removewindow,

removewindow.

/* Правило осуществляет поиск цепочки должников */

dolg (X, Sum, Z):-

db_dan (X, Sum1, Y),

min (Sum, Sum1, Sum2),

not (prinad (Y, Z)),

dolg (Y, Sum2, [Y | Z]).

dolg (X, Sum, L):-

not (db_dan (X, _, _)),

not (L=[X]), not (cep (L, _)),

asserta (cep (L, Sum)),

fail.

/* правило определяет принадлежность элемента списку */

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

prinad (X, [ _ | Y]):- prinad (X, Y).

/* правило определяет минимальный из двух элементов */

min (S, S1, S):- S < S1,!.

min (_, S1, S1).

/* правило осуществляет вывод элементов */

/* списка (одной цепочки должников) */

vivod ([ ]):-!.

vivod ([H | List]):-

write (H), nl,

vivod (List).

/* правило выводит все цепочки */

wr ([ ], _):-!.

wr ([H | L], N):-

write ("Цепочка номер ", N, ":"), nl,

vivod (H), cep (H, S), write ("Сумма зачета: ",S), nl,

readchar (_), nl, N1=N+1,

wr (L, N1).

/* правило производит зачет по заданному номеру цепочки */

analis:-

findall (L, cep (L, _), List), not (List = [ ]),

wr (List, 1),

write ("Введите номер цепочки: "),

readint (N),

el_num_in_list (N, List, NL),

cep (NL, S),

write ("Сумма зачета: ", S), nl,

zachet (NL, S),

write ("Зачет произведен."),

save("db.txt", db),!.

analis:- write ("Должников нет!").

/* правило находит в списке элемент по заданному номеру */

el_num_in_list (1, [H | _ ], H):-!.

el_num_in_list (N, [ _ | List], NL):-

N1=N-1,

el_num_in_list (N1, List, NL).

/* правило производит изменения в базе данных (зачет) */

zachet ([ _ ], _):-!.

zachet ([H | [H1 | NL]], S):-

zachet ([H1 | NL], S),

db_dan (H1, S1, H),

S2=S1-S,

retract (db_dan (H1, S1, H)),

asserta (db_dan (H1, S2, H)).

/* конец листинга программы */

3.9. Диалекты и языки, используемые для задач
искусственного интеллекта

За более чем полувековую историю проблемы искусственного интеллекта были разработаны [7] и используются в настоящее время следующие диалекты языка Пролог: C-Prolog, Quintus Prolog, SKW -Prolog, Arity Prolog, SWI-Prolog [29] и др.

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

Кроме того, хорошим языком программирования задач ИИ зарекомендовал себя язык LISP (LISt Processing), разработанный для символьных вычислений и модифицированный применительно к потребностям разработки интеллектуальных систем. LISP – функциональный язык, синтаксис и семантика которого обусловлены теорией рекурсивных вычислений.

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

Контрольные вопросы

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

2. Каким образом формируется база знаний Пролог-программы?

3. Каким образом определяются переменные в Пролог-программе?

4. Каким образом в Пролог-программе осуществляется выбор направления доказательства поставленной цели?

5. Как работает в Пролог-программе механизм унификации?

6. Опишите одни и те же данные в виде списка и структуры данных, укажите основные формы записи списков в Пролог-программе.

7. Какие совокупности единиц входят в базу знаний программы на языке Пролог?

8. Поясните организацию вызова из Пролог-программы внешних процедур, написанных на других языках программирования.

 





Поделиться с друзьями:


Дата добавления: 2014-12-29; Просмотров: 2288; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.