Прикладные методы ИИ. КР1 (Вариант 7), КР2 (Вариант 7)
Контрольная работа
в среде программирования SWI-Prolog
Среда программирования: SWI-Prolog
Название работы: Прикладные методы ИИ. КР1 (Вариант 7), КР2 (Вариант 7)
Вид работы: Контрольная работа
Описание: Прикладные методы ИИ
Контрольная работа 1
Вариант 7
1. Определите предикат p(+U, +V, -L) - истинный тогда и только тогда, когда список L есть список всех элементов списка U, не содержащихся в списке V.
2. Определите предикат p(+U, +V, -L) - истинный тогда и только тогда, когда L - список всех элементов, содержащихся либо в списке U, либо в списке V, но не одновременно в U и V.
3. Напишите новую версию процедуры "предок", которая вырабатывает список представителей всех промежуточных поколений, располагающихся между предком и потомком. Предположим, например, что Генри является отцом Джека, Джек - отцом Ричарда, Ричард - отцом Чарльза, а Чарльз - отцом Джейн. При запросе о том, является ли Генри предком Джейн, должен выдаваться список, характеризующий родственную связь этих людей, конкретно: [джек, ричард, чарльз].
4. Напишите предикат gcd(+A,+B,-D) - истинный тогда и только тогда, когда D -наибольший общий делитель двух целых положительных чисел A и B.
5. Разработайте программу "Советник по транспорту". Выберите либо сеть, состоящую из городов, либо транспортную сеть маршрутов поездов или автобусов в пределах одного города. Вы должны информировать систему о том, откуда и куда Вы собираетесь добраться, а система должна выдавать рекомендации о том, какими поездами, автобусами, самолетами и т. д. Вам следует воспользоваться, чтобы добраться до пункта назначения. Указание: см. "Поиск в глубину" (Учебное пособие, часть 1, 2.2).
Контрольная работа 2
Вариант 7
1. Задача о 8 ферзях, поиск в глубину.
На шахматной доске 8x8 надо расставить 8 ферзей, чтобы ни один из ферзей не находился под боем другого.
Указания к решению. Положение одного ферзя на доске задается парой целых чисел от 1 до 8: номера вертикалей и горизонталей. Легко видеть, что каждая вертикаль (как впрочем, и горизонталь) должна содержать по одному ферзю. Поэтому, мы можем экономно задавать положение на доске восьми ферзей списком из 8 чисел, задающих значения только горизонтальной координаты: так, например, список [2,5,7,4,3,6,8] говорит, что первый ферзь стоит на клетке (2, 1), второй - (5, 2), третий - (7, 3) и т. д. Различные состояния решения задачи мы можем представить в виде списка горизонтальных координат уже стоящих на доске ферзей, так, например, список [2] говорит о том, что на доске стоит только один ферзь на клетке (2,1), список [2,5] говорит о том, что на доске два ферзя на клетках (2, 1) и (5,2). Список длиной 8, говорит о том, что расставлены все ферзи.
Теперь нужно определить разрешенные переходы из одного состояния задачи в другое. Для этого надо определить предикат
'не бьет'(НовыйФерзь, ФерзиУжеСтоящиеНаДоске)
Этот предикат легко определить рекурсивно:
"НовыйФерзь не бьет список ферзей [F|T], если он не бьет ферзь F и не бьет список ферзей T".Начальное состояние: []. Конечное состояние: [_,_,_,_,_,_,_,_].
Поскольку решение этой задачи при поиске выдает последовательность состояний, т.е. список списков, а нас интересует только конечная расстановка, то во втором аргументе предикат solve (см. программу поиска в глубину в лекциях) достаточно конкретизовать только голову списка: solve([],[H|_]).
2. Несложное комбинирование программ 9 и 10 позволит создать полноценную оболочку экспертной системы. Эта оболочка должна удовлетворять следующим требованиям:
1) если база знаний является просто программой на “почти” полном Прологе, то оболочка ведет себя как метаинтерпретатор этой программы с объяснением как было получено доказательство;
2) если предполагается, что часть информации будет запрашиваться у пользователя, то оболочка ведет активный диалог и может объяснить почему она спрашивает пользователя;
3) применяется механизм рассуждения в условиях неопределенности.
Придумайте свою базу знаний с неопределенностями. Эта база знаний должна включать также правила для предикатов askable и explainThis. В этой базе знаний необходим целевой предикат, с помощью которого проверяется достоверность различных гипотез (в базе знаний “Болезни” таким предикатом является hy(_,_) ).
Обеспечьте, чтобы оболочка получала все возможные решения, а не останавливалась на одном.
Год: 2023
Данный заказ (контрольная работа) выполнялся нашим сайтом в 2023-м году, в рамках этого заказа была разработана программа в среде программирования SWI-Prolog. Если у Вас похожее задание на программу, которую нужно написать на SWI-Prolog, либо на другом языке программирования, пожалуйста заполните форму, приведённую ниже, после чего Ваше задание в первую очередь рассмотрит наш программист, выполнявший в 2023-м году этот заказ, если он откажется, то Ваше задание оценят другие наши программисты в течение 48-и часов, если оценка нужна срочно, просим Вас оставить пометку об этом - напишите в тексте задания фразу "СРОЧНЫЙ ЗАКАЗ".
Viber:
+79374242235
Telegram: kursovikcom ВКонтакте: kursovikcom WhatsApp +79374242235 E-mail: info@kursovik.com Skype: kursovik.com |