Файл: Лабораторная работа 2 по дисциплине Системы искусственного интеллекта.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 17.03.2024
Просмотров: 8
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Кафедра вычислительной техники и инженерной кибернетики
ЛАБОРАТОРНАЯ РАБОТА 2
по дисциплине «Системы искусственного интеллекта»
Простейшие конструкции языка Prolog.
Выполнение
Цель, задачи работы:
-
Изучить, что такое логическое программирование (ЛП), и его области применения -
Установить самый популярный язык ЛП --- Prolog -
Научиться писать простые программы на Prolog
Краткое содержание работы:
Предикат - это логическая функция от одного или нескольких аргументов, то есть функция, действующая в множество из двух значений: истина и ложь. Предикат Пролога записывается в виде составного терма:
имя_предиката(аргументы).
База данных на Прологе - это совокупность фактов. В процессе работы в базу данных можно добавлять новые факты, удалять или изменять старые.
Правила.Пролог могут содержать правила, позволяющие получать дополнительные знания о том мире, который описывает программа. Правило задает новый предикат через определенные ранее. Правило состоит из головы (предиката) и тела (последовательности предикатов, разделенных запятыми).
Запрос - это последовательность предикатов, разделенных запятыми и завершающаяся точкой. На естественном языке запятая соответствует союзу "и", а на языке математической логики обозначает конъюнкцию. С помощью запросов можно "спрашивать" базу данных о том, какие утверждения являются истинными.
Ход выполнения работы:
В разделе «Приложение 1» представлены условия задач.
В разделе «Приложение 2» представлены результаты задач.
Приложение 1
Программа №1.
Условие 1 Предикаты
Необходимо написать программу экспертной системы, которая оценивает пригодность студента для будущей работы в той или иной компании. Для начала мы должны задать базу знаний средних оценок студентов. Вводим код программы (предикаты):
Таким образом, мы сопоставили каждому студенту (его фамилии) средний балл за все время обучения.
Условие 2 Правила
Вернемся к коду программы. Добавим в него еще одну строчку.
ko(Name):- student(Name, 5.0).
Теперь, если мы хотим выяснить, кто из студентов круглый отличник мы можем использовать предикат ko
Условие 3 Правила с условиями
Поставим задачу, выявить всех, кому будет начисляться стипендия (кто имеет средний балл не ниже 4). Для этого добавим в программу еще одну строчку:
stipendia(Name) :- student(Name, X), X > =4.
Условие 4 Сложные условия
Осуществим подбор студентов для будущей работы в различных компаниях. Пусть компании принимают студентов исходя из их средних баллов. Для начала создадим соответствующую базу знаний. Предикат «company» задает минимальный средний балл, с которым студент может устроиться в соответствующую компанию.Зададим правило:
job(Name,Company) :- student(Name,X),company(Company,Y), X>=Y.
Программирование диаграмм взаимосвязи
Программа №2
Условие 1 Несимметричные отношения
Создадим базу знаний для целей изучения некоторых стран Южной Америки. Зададимся целью создать базу знаний, которая бы отвечала на вопрос, какие из двух стран из указанного списка граничат друг с другом. Сначала введем страны, с которыми граничит Бразилия.
Условие 2 Симметричные отношения
Зададим симметричный предикат gr (“граничит”) при помощи правила: gr(X,Y):-grs(X,Y) ; grs(Y,X), или под другому:gr(X,Y):-grs(X,Y) or grs(Y,X).
Это правило из несимметричного предиката grs делает симметричный предикат gr.
Условие 3 Условные отношения
Добавим в базу знаний информацию о площади каждой из стран, затем добавим правило, позволяющее определить небольшую страну «соседа».
Условие 4 Отношения со сложными условиями и специализированный вывод
Зададимся целью найти такие страны (которые граничат одновременно с одной транзитной страной). Для этого добавим правило:
transit(X,Y):-gr(X,Z),gr(Z,Y),not(gr(X,Y)),dif(X,Y),write(X+Y).
Отсечение
Программа №3 Определение категории возраста мужчины
Нам нужно по значению возраста мужчины определить его категорию.
Программа №4 Вычисление функции с условиями
Задаем функцию в виде func(X,Y).
Рекурсия
Программа №5 Вычисление суммы чисел от одного до N
Цель – научится вычислять сумму чисел от одного до N. Проще всего это сделать по индукции. Для того чтобы процесс вычислений не зацикливался на единице, добавим отсечение (восклицательный знак, который при его прохождении будет означать, что все что было до него уже не нужно использовать в вычислениях).
Программа №6 Вычисление факториала N
Цель – научится вычислять факториал N. Проще всего это сделать по индукции. Для начала в программе укажем, что факториал числа 1 равен единице. Затем введем второй предикат, в котором укажем, что сумму факториал N можно вычислить как факториал N1=N-1 умноженный на N. Для того чтобы процесс вычислений не зацикливался на единице, добавим отсечение.
Программа №7 Вычисление чисел Фибоначчи
Числа Фибоначчи — элементы числовой последовательности, в которой каждое последующее число равно сумме двух предыдущих чисел:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, …
Для вычисления чисел Фибоначчи введем функцию fib(D,N,M), которая по заданному номеру D выдает число Фибоначчи N с номером D и число M, которое было до него в последовательности.
Программа №8 Геометрическая прогрессия
Вычислим с помощью рекурсии геометрическую прогрессию
1 q q2 q3 q4 …,
где q=1/n, n - последняя цифра в номере списка группы (если цифра=0, n=1,5).
Приложение 2
Результат программы №1
От условия 1
Задаем необходимые вопросы, чтобы узнать средний балл студентов.
От условия 2
На запрос ko(Name). программа ответит
От условия 3
Введем запрос: stipendia(Name). Нажимая R, после каждого ответа, мы получим список всех, кто получает стипендию.
От условия 4
Задаем соответствующие вопросы системе
Программирование диаграмм взаимосвязи
Результат программы №2
От условия 1 Несимметричные отношения
Зададим вопрос системе: grs(‘Brazil’, ‘Argentina’).
От условия 2 Симметричные отношения
Задав вопрос при помощи предиката gr, граничат ли Бразилия и Аргентина, а также Аргентина и Бразилия, мы получим в обоих случаях положительный ответ.
От условия 3 Условные отношения
Задав вопрос программе, какие есть у Бразилии граничащие с ней страны небольшого размера (площади до миллиона квадратных километров).
От условия 4 Отношения со сложными условиями и специализированный вывод
Осуществив запрос: ?-transit(X,Y).Получим искомые пары стран.
Отсечение
Результат программы №3
Задаем вопрос системе
Результат программы №4
Задав программе запрос, мы получим значение функции.
Рекурсия
Результат программы №5
Задав программе в окне запросов, получим значение суммы чисел от одного до десяти:
Если же задать отрицательное число, или ноль, мы получим ошибку:
ERROR: Out of local stack
Результатпрограммы №6
Задав программе в окне запросов, мы получим значение факториала десяти:
Результат программы №7
Вводим запрос системе:
Результат программы №8
Вводим запрос программе:
Вывод:
-
Изученологическое программирование (ЛП), и его области применения -
Установлен самый популярный язык ЛП --- Prolog -
Осуществлены простые программы на Prolog
Составлены списки в Prolog