
Среда программирования: SWI-Prolog
Название работы: КР2. Вариант 7. Задача о 8 ферзях. Поиск в глубину. Искусственный интелект и экспертные системы
Вид работы: Контрольная работа
Тематика работы: Алгоритмы, Математика
Объем программы: 3 (по десятибалльной шкале)
Уровень сложности: 8 (по десятибалльной шкале)
Разработчик (автор):
Программист сайта kursovik.com
(письмо автору)
Данная работа написана ЧЕЛОВЕКОМ без использования ИИ
Ключевые слова: ТУСУР, ФДО, Искусственный интелект, экспертные системы, Задача о 8 ферзях, Поиск в глубину, Prolog, На шахматной доске 8x8, расставить 8 ферзей, ни один из ферзей, не находился под боем другого, Положение одного ферзя, разрешенные переходы, определить предикат, НовыйФерзь, ФерзиУжеСтоящиеНаДоске, определить рекурсивно, последовательность состояний, список списков, голова списка, solve
Функции программы:
Контрольная работа 2.
Вариант 7. Задача о 8 ферзях. Поиск в глубину.
Разработать программу на SWI-Prolog в соответствии с заданием:
Задача о 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|_]).
Описание (отчет):
Есть
на 5 страниц, посмотреть оглавление
Пояснения к компиляции и запуску программы:
Для работы с программами нужно использовать файлы с расширением "pl", например, в SWI-Prolog.

expt
per
queenПеред покупкой готовой работы не забудьте проверить её оригинальность. Запросить у администратора проверку текущей оригинальности работы по версии системы Антиплагиат.РУ
Отчет к программе. СодержаниеЗадание, листинги и скрины.
Предварительный просмотр
|
Стоимость ИСХОДНОГО ТЕКСТА программы составляет 1990 руб РФ Продажа каждой работы строго учитывается, у каждой работы есть своя история продаж. |