Статистика выполненных
работ:

Текстовых работ - 0
Компьютерных работ - 0
Лабораторных работ - 0
Курсовых проектов - 0
Экзаменов - 0


Искусственный интеллект и экспертные системы (В.М. Зюзьков, 1999 г., 76 с.)

Дисциплина «Искусственный интеллект и экспертные системы» изучается на протяжении двух семестров (9, 10). В процессе дистанционного обучения дисциплине студент должен выполнить два контрольных задания, выполнить компьютерную экзаменационную работу и курсовую работу. Каждое контрольное задание требует создания нескольких программ.

Первое контрольное задание
Задание состоит из 5 задач, в которых требуется составить программы на Прологе. Первые две задачи требуют запрограммировать простые предикаты. Следующие две - требуют написать простые программы. В последней задаче требуется составить более сложную программу на Прологе (как правило, требуется определить несколько предикатов). При составлении программ (если не оговорено противное) можно использовать все встроенные предикаты Пролога. Тексты всех программ, если вы мыслите в духе логического программирования, получаются небольшие.

Вариант 1
1. Определите возведение в целую степень через умножение и деление.
2. Напишите предикат p(+L, -N) - истинный тогда и только тогда, когда N - предпоследний элемент списка L, имеющего не менее двух элементов.
3. Напишите предикат, аналогичный предикату subst (см. вариант 8, задача2), но производящий взаимную замену X на Y, т.е. X->Y, Y->X.
4. Напишите предикат, который определяет, является ли данное натуральное число простым.
Воспользуйтесь более общей задачей: ispr(N, M) - «Число N не делится ни на одно число большее или равное M и меньшее N».
Имеем ispr(N, M) -истинно, во-первых, если N = M, и, во-вторых, если истинно ispr(N,M+1) и N не делится на M.
5. Напишите предикат p(+N, +K, -L) - истинный тогда и только тогда, когда L - список всех последовательностей (списков) длины K из чисел 1,2,...,N.

Вариант 2
1. Напишите предикат p(+X, +N, -L) - истинный тогда и только тогда, когда L - список из N раз повторенных элементов X.
2. Напишите предикат p(+L, -S) - истинный тогда и только тогда, когда S - список списков элементов списка L, например, p([a, b, c],[[a], [b], [c]]) - истина.
3. Сортировка списка простой вставкой (по возрастанию).
4. Сортировка списка простым выбором (по возрастанию).
5. Напишите предикат p(+N, -L) - истинный тогда и только тогда, когда список L содержит все последовательности (списки) из N нулей и единиц, в которых никакая цифра не повторяется три раза подряд (нет куска вида XXX).

Вариант 3
1. Напишите предикат p(+L, -S) - истинный тогда и только тогда, когда L - список списков, а S - список, объединяющий все эти списки в один.
2. Напишите предикат p(+L, -S) - истинный тогда и только тогда, когда список S есть циклическая перестановка элементов списка L, например, p([f, g, h, j], [g, h, j, f]) -истина.
3. Напишите предикат p(+L, -N) - истинный тогда и только тогда, когда N - количество различных элементов списка L.
4. Напишите предикат p(+X, +Y, -Z) - истинный тогда и только тогда, когда Z есть «пересечение» списков X и Y, т.е. список, содержащий их общие элементы, причем кратность каждого элемента в списке Z равняется минимуму из его кратностей в списках X и Y.
5. Определите отношение ordered(+Tree), выполненное, если дерево Tree является упорядоченным деревом целых чисел, т. е. число, стоящее в любой
вершине дерева, больше любого элемента в левом поддереве и меньше любого элемента в правом поддереве. Указание. Можно использовать вспомогательные предикаты ordered_left(+X, +Tree) и ordered_right(+X, +Tree), которые проверяют, что X меньше (больше) всех чисел в вершинах
левого (правого) поддерева дерева Tree и дерево Tree - упорядочено.

Вариант 4
1. Напишите предикат p(+X, +N, +V, -L) - истинный тогда и только тогда, когда список L получается после добавления X на N-е место в список V.
2. Напишите предикат p(+N, +V, -L) - истинный тогда и только тогда, когда список L получается после удаления N-го элемента из списка V.
3. Запрограммируйте предикат p(+A,+B), распознающий, можно ли получить список элементов A из списка элементов B посредством вычеркивания некоторых элементов.
Алгоритм: Если A - пустой список, то ответом будет «да». В противном случае нужно посмотреть, не пуст ли список B. Если это так, то ответом будет «нет». Иначе нужно сравнить первый элемент списка A с первым элементом списка B. Если они совпадают, то надо снова применить тот же алгоритм к остатку списка A и остатку списка B. В противном случае нужно снова применить тот же алгоритм к исходному списку A и остатку списка B.
4. Напишите предикат p(+X, +Y, +L) - истинный тогда и только тогда, когда X и Y являются соседними элементами списка L.
5. Определим операторы:
:- op( 100, fy, ~).
:- op( 110, xfy, &).
:- op( 120, xfy, v).
Булева формула есть терм, определяемый следующим образом: константы true и false - булевы формулы; если X и Y - булевы формулы, то и X v Y, X & Y, ~X - булевы формулы, здесь v и & - бинарные инфиксные операторы дизъюнкции и конъюнкции, а ~ - унарный оператор отрицания.
Напишите программу, распознающую логические формулы в дизъюнктивной нормальной форме, т.е. формулы, являющиеся дизъюнкцией конъюнкций литералов, где литерал - атомарная формула или ее отрицание.

Вариант 5
1. Напишите предикат p(+V, -L) - истинный тогда и только тогда, когда список L получается после удаления всех повторных вхождений элементов в список V, например, p([a, b, c, d, d, a], [a, b, c, d]) - истина.
2. Напишите предикат p(+V, -L) - истинный тогда и только тогда, когда список L получается после удаления из списка V всех элементов, стоящих на четных местах, например, p([1, 2, 3, 4, 5, 6], [1, 3, 5]) - истина.
3. Определите отношение sum_tree(+TreeOfInteger, -Sum), выполненное, если число Sum равно сумме целых чисел, являющихся вершинами дерева TreeOfInteger.
4. Определим операторы:
:- op( 100, fy, ~).
:- op( 110, xfy, &).
:- op( 120, xfy, v).
Булева формула есть терм, определяемый следующим образом: константы true и false - булевы формулы; если X и Y - булевы формулы, то и X v Y, X & Y, ~X - булевы формулы, здесь v и & - бинарные инфиксные операторы дизъюнкции и конъюнкции, а ~ - унарный оператор отрицания.
Напишите предикат p(+T), определяющий, является ли данный терм T булевой формулой.
5. Определите предикат occurances(+Sub,+Term,-N), истинный, если число N равно числу вхождений подтерма Sub в терм Term. Предполагается, что терм Term не содержит переменных.

Вариант 6
1. Напишите предикат p(+V, +X, -L) - истинный тогда и только тогда, когда список L получается из списка V после удаления всех вхождений X на всех уровнях, например, p([1, [2, 3, [1]], [3, 1]], 1, [[2, 3, []], [3]]) - истина.
2. Напишите обобщение предиката member, когда ищется элемент на всех уровнях в списке.
3. Встроенный предикат functor(+Term, ?Functor, ?Arity) определяет для заданного составного терма Term его функтор Functor и местность Arity.
Встроенный предикат arg(+N, +Term, ?Value) определяет для целого числа N и заданного составного терма Term его N-ый аргумент Value.
Определите предикаты functor1 и arg1 - аналоги предикатов functor и arg через предикат univ (=..)
4. Напишите предикат range(?M, ?N, ?L), истинный тогда и только тогда, когда L - список целых чисел, расположенных между M и N включительно
(предикат должен допускать различное использование, когда не менее двух из трех аргументов конкретизованы).
(Указание. Используйте предикаты var(+X) и nonvar(+X)).
5. Определим операторы:
:- op( 100, fy, ~).
:- op( 110, xfy, &).
:- op( 120, xfy, v).
Булева формула есть терм, определяемый следующим образом: константы true и false - булевы формулы; если X и Y - булевы формулы, то и X v Y, X & Y, ~X - булевы формулы, здесь v и & - бинарные инфиксные операторы дизъюнкции и конъюнкции, а ~ - унарный оператор отрицания.
Напишите программу, задающую отношение negation_inward(+F1,-F2), которое выполнено, если логическая формула F2 получается из логической
формулы F1 внесением всех операторов отрицания внутрь конъюнкций и дизъюнкций.

Вариант 7
1. Определите предикат p(+U, +V, -L) - истинный тогда и только тогда, когда список L есть список всех элементов списка U, не содержащихся в списке V.
2. Определите предикат p(+U, +V, -L) - истинный тогда и только тогда, когда L - список всех элементов, содержащихся либо в списке U, либо в списке V, но не одновременно в U и V.
1. Напишите новую версию процедуры «предок», которая вырабатывает список представителей всех промежуточных поколений, располагающихся между предком и потомком. Предположим, например, что Генри является отцом Джека, Джек - отцом Ричарда, Ричард - отцом Чарльза, а Чарльз - отцом Джейн. При запросе о том, является ли Генри предком Джейн, должен выдаваться список, характеризующий родственную связь этих людей, конкретно: [джек, ричард, чарльз].
2. Напишите предикат gcd(+A,+B,-D) - истинный тогда и только тогда, когда D -наибольший общий делитель двух целых положительных чисел A и B.
3. Разработайте программу «Советник по транспорту». Выберите либо сеть, состоящую из городов, либо транспортную сеть маршрутов поездов или автобусов в пределах одного города. Вы должны информировать систему о
том, откуда и куда Вы собираетесь добраться, а система должна выдавать рекомендации о том, какими поездами, автобусами, самолетами и т. д. Вам
следует воспользоваться, чтобы добраться до пункта назначения. Указание: см. «Поиск в глубину» (Учебное пособие, часть 1, 2.2).

Вариант 8
1. Определите предикат p(+V, -L) - истинный тогда и только тогда, когда L - список всех элементов списка V, встречающихся в нем более одного раза.
2. Напишите предикат subst(+V, +X, +Y, -L) - истинный тогда и только тогда, когда список L получается после замены всех вхождений элемента X в списке V на элемент Y.
3. Напишите вариант программы plus(?X, ?Y, ?Z), пригодный для сложения, вычитания и разбиения чисел на слагаемые.
(Указание. Используйте для порождения чисел встроенный предикат between(+Low, +High, ?Value), который порождает все целые числа от нижней границы Low до верхней границы High.)
4. Опишите процедуру для предиката расщепить/4, которая берет список целых чисел L1 и целое число N и выдает списки L2 и L3 такие, что числа из исходного списка, меньшие, чем N, помещаются в список L2, а остальные - в список L3.
5. Множественное число большинства английских существительных получается путем добавления буквы «s» к форме единственного числа. Но если существительное заканчивается буквой «y», следующей за согласной, множественное число образуется путем замены буквы «y» на сочетание «ies»; если же существительное заканчивается буквой «o», следующей за согласной, множественное число образуется путем добавления сочетания «es». Напишите утверждения для предиката множественное_число/2, которые задают все эти правила. Указание. Воспользуйтесь предикатом name/2.

Вариант 9
1. Напишите предикат p(+V, -L) - истинный тогда и только тогда, когда список L получается из списка V после удаления всех повторяющихся элементов, т. е. из списка получается множество.
2. Напишите предикат exists(+P, +L), который проверяет «Существует ли элемент списка L, удовлетворяющий предикату P?»
3. Напишите программу вычисления целочисленного квадратного корня из натурального числа N, определяемого как число I, такое, что I*I £ N, но (I+1)*(I+1) > N . Используйте определение предиката between/3 для генерирования последовательности натуральных чисел с помощью механизма возвратов.
4. Напишите предикат для вычисления чисел Фибоначчи, используя метод накапливающего параметра.
5. Одним из примеров использования предиката name/2 может служить генерация новых атомов для представления вновь вводимых объектов, например, abc1, abc2, abc3 и т.д. Эти имена характеризуются тем, что все они состоят из корня, определяющего тип именуемого объекта, и целочисленного суффикса для различения объектов одного типа. Напишите программу новое_имя(+X, -Y). Последовательность имен создается с помощью возвратов. Указание. Воспользуйтесь предикатом int_to_atom(+N,-X), который конвертирует натуральное число N в атом X.

Вариант 10
1. Напишите предикат all(+P, +L), который проверяет «Для всех ли элементов списка L выполняется предикат P? «
2. Напишите предикат filter(+V, +P, -L) - истинный тогда и только тогда, когда список L есть список всех элементов из списка V, удовлетворяющих предикату P («фильтрация» списка).
3. Определите предикат p(+V, +N, -L) - истинный тогда и только тогда, когда L - список элементов списка V, встречающихся в нем не менее N раз. Проверьте работу этого предиката на примере [a, a, b, a, c, b, c, a, b, b, d, a, b]
для N=1,2,5,0.
4. Напишите предикат summa_digits(+N, -S) - истинный тогда и только тогда, когда S - сумма цифр натурального числа N.
5. Построить программу «сжать», назначение которой - преобразование английских слов в их «звуковой» код. Этот процесс предусматривает «сжатие» примерно одинаково звучащих слов в одинаковый их код - своего рода, аббревиатуру этих слов. Слова «сжимаются» в соответствии со следующими правилами:
• первая буква слова сохраняется;
• все последующие за ней гласные, а также буквы «h», «w» и «y» удаляются;
• сдвоенные буквы заменяются одиночными;
• закодированное слово состоит не более чем из четырех букв, остальные буквы удаляются.
Примеры: сжать(barrington, brng) и сжать(llewellyn, ln) - выполнено.
Указание. Воспользуйтесь предикатом name/2.

Второе контрольное задание
Второе контрольное задание состоит из двух задач. Вам надо запрограммировать на Прологе решение логической задачи и создать экспертную систему.

Вариант 1. «Отец и два сына». Поиск в глубину.
Вариант 2. «Отец и два сына». Поиск в ширину.
Вариант 3. «Миссионеры и людоеды». Поиск в глубину.
Вариант 4. «Миссионеры и людоеды». Поиск в ширину.
Вариант 5. «Задача об обезьяне и банане». Поиск в глубину.
Вариант 6. «Задача об обезьяне и банане». Поиск в ширину.
Вариант 7. Задача о 8 ферзях. Поиск в глубину.
Вариант 8. Задача о волке, козе и капусте. Поиск в глубину.
Вариант 9. Задача о волке, козе и капусте. Поиск в ширину.
Вариант 10. Рыцари и дамы. Поиск в глубину с ограничением глубины до 16



ОТПРАВИТЬ ЗАЯВКУ
(уточните наименование работ: ТКР, ЛР, ККР, КП, ЭКЗ,
2 последние цифры пароля
к какому числу нужно выполнить работы)

Имя

Email



© 2009-2024 TusurBiz