Главная страница
Навигация по странице:

  • Результат

  • Формирование и тестирование исходных данных

  • PREDICATES

  • Запросы

  • Определения очередности разработки правил

  • Разработка логической модели правила

  • Разработка и тестирование варианта программы с безусловными утверждениями (фактами)

  • Разработка и тестирование варианта с частными правилами (правила с константами)

  • Разработка и тестирование варианта с универсальными правилами

  • Технология разработки нерекурсивных правил Задание


    Скачать 0.5 Mb.
    НазваниеТехнология разработки нерекурсивных правил Задание
    Анкорmn njkkjklkokl
    Дата29.04.2023
    Размер0.5 Mb.
    Формат файлаdocx
    Имя файлаprimer_1.docx
    ТипДокументы
    #1097437

    Технология разработки нерекурсивных правил

    Задание: Шахматы. Варианты взятия фигуры ладьей по горизонтали.

    Исходные данные: коды всех фигур, их цвет и координаты (поле 1-8 на A-H), код ходящей ладьи, её цвет и её исходные координаты (поле 1-8 на A-H).

    Результат: код ходящей ладьи, ее цвет и её новые координаты (поле 1-8 на A-H), код взятой фигуры.

    Интерпретация задачи

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



    Наименования фигур могут быть следующими: пешка, ферзь, король, конь, ладья, слон (согласно правилам шахмат). Идентифицировать каждую фигуру будем по ее уникальному обозначению. Количество элементов в схеме не регламентируем.



    Формирование и тестирование исходных данных

    Совокупность аргументов каждого элемента объединим в один терм пользовательской структуры с именем фигура. Опишем эту пользовательскую структуру в области предикатов с указанием типов всех её аргументов.

    Опишем фигуры. Каждая из них характеризуется своим набором аргументов: наименованием, обозначением, цветом, координатой по горизонтали (1-8) и координатой по вертикали (1-8).

    Например, факт 1 (рис.2) читается так, поле содержит фигуру с наименованием пешка, обозначением п1, цветом черный, координатой по горизонтали 6 и координатой по вертикали 6.

    В базе фактов и правил запишем все 14 фактов, соответствующих введенному пользовательскому предикату и описывающих каждую из фигур. Последовательность записи аргументов в пользовательской структуре фигура строго соответствует типу аргумента, указанному в области предикатов. Последовательность записи фактов в базе фактов и правил произвольна.

    PREDICATES

    nondeterm фигура (symbol, symbol, symbol, integer, integer)

    CLAUSES

    % фигуры

    фигура (пешка, п1, черный, 6, 6). %факт 1

    фигура (пешка, п2, черный, 4, 5). %факт 2

    фигура (пешка, п3, белый, 8, 4). %факт 3

    фигура (пешка, п4, белый, 3, 3). %факт 4

    фигура (конь, кн1, черный, 1, 7). %факт 5

    фигура (конь, кн2, белый, 2, 6). %факт 6

    фигура (слон, с1, черный, 5, 7). %факт 7

    фигура (слон, с2, белый, 6, 4). %факт 8

    фигура (ладья, л1, белый, 8, 5). %факт 9

    фигура (ладья, л2, черный, 3, 4). %факт 10

    фигура (ладья, л3, белый, 4, 1). %факт 11

    фигура (ферзь, ф1, черный, 4, 8). %факт 12

    фигура (король, кр1, черный, 6, 8). %факт 13

    фигура (король, кр2, белый, 5, 1). %факт 14

    GOAL

    фигура (пешка, п1, черный, 6, 6). %запрос 1

    Сформируем различные виды запросов к программе:



    Запросы

    Формулировки запросов

    1

    фигура (пешка, п1, черный, 6, 6).

    Содержится ли на поле фигура с наименованием пешка, обозначением п1, цветом черный, координатой по горизонтали 6 и координатой по вертикали 6?

    2

    фигура (конь, кн4, белый, 4, 2).

    Содержится ли на поле фигура с наименованием конь, обозначением кн4, цветом белый, координатой по горизонтали 4 и координатой по вертикали 2?

    3

    фигура (слон, с1, черный, 5, 7), фигура (ферзь, ф2, белый, 4, 8).

    Содержится ли на поле одновременно фигура с наименованием слон, обозначением с1, цветом черный, координатой по горизонтали 5 и координатой по вертикали 7 и фигура с наименованием ферзь, обозначением ф1, цветом белый, координатой по горизонтали 4 и координатой по вертикали 8?

    4

    фигура (пешка, п2, черный, 4, 5); фигура (конь, кн2, белый, 2, 6).

    Содержится ли на поле фигура с наименованием пешка, обозначением п2, цветом черный, координатой по горизонтали 4 и координатой по вертикали 5? В случае отрицательного ответа на первую часть проверяется, есть ли в схеме элемент с наименованием конь, обозначением кн2, цветом белый, координатой по горизонтали 2 и координатой по вертикали 6?

    5

    фигура (слон, Обозначение, черный, 5, 7).

    Какое обозначение имеет фигура с наименованием слон, цветом черный, координатой по горизонтали 5 и координатой по вертикали 7?

    6

    фигура (ладья, Обозначение, белый, _, _).

    Какие обозначения имеют фигуры с наименованием ладья, цветом белый и любыми координатами?

    7

    фигура (Наименование, Обозначение, Цвет, 1, 7).

    Какие наименование, обозначение и цвет имеет фигура, находящаяся в клетке с координатой по горизонтали 1 и координатой по вертикали 7?

    8

    фигура (_, Обозначение1, _, 3, _), фигура (_, Обозначение2, _, 3, _), Обозначение1 < Обозначение2.

    Какие обозначения имеет пара фигур поля с координатами по горизонтали равными 3? Наименования, цвета и координаты по вертикали – произвольны. Обозначение 1 меньше обозначения2 (по кодировке), перестановки не допускаются.


    По количеству целей запросы делят на простые запросы, состоящие из одной цели (запросы 1, 2, 5, 6, 7) и запросы составные, которые содержат две цели или более (запросы 3, 4, 8).

    По наличию в целях именованных переменных классифицируют запросы, на не содержащие именованные переменные - могут иметь решения или истина, или ложь (запросы 1-4), и запросы с именованными переменными - указываются конкретизации именованных переменных (запросы 5-8).

    Результаты выполнения запросов к программе:



    Запросы

    Формулировки запросов

    1

    yes

    факт 1.

    2

    no

    факты 1-14.

    3

    no

    факты 1-14.

    4

    yes

    факт 2.

    5

    Обозначение=с1

    1 Solution

    факт 7.

    6

    Обозначение=л1

    Обозначение=л3

    2 Solution

    факты 9 и 11.

    7

    Наименование=конь, Обозначение= кн1, Цвет=черный

    1 Solution

    факт 5.

    8

    Обозначение1= л2, Обозначение2=п4

    1 Solution

    факты 10 и 4.

    Проанализируем пошаговое выполнение программы для нескольких запросов.

    Запрос 1 является простым запросом, так как состоит из одной цели. Для проверки цели на истинность необходимо сопоставить ее с утверждениями базы фактов и правил. В программе содержится всего 14 утверждений.

    Шаг 1-й. Сопоставим цель с фактом 1.

    Цель содержит структуру с именем фигура. Первый факт также содержит структуру. Сопоставляем их по правилу сопоставления структур. Сопоставляем имена структур (функторы) по правилу сопоставления констант. Имена у структур тождественны, поэтому результат сопоставления имен – истина.

    Проверяем арность структур, то есть количество аргументов у каждой из них. Число аргументов у структур – 5. Результат проверки по арности – истина.

    Сопоставляем соответствующие аргументы структур. Аргументы сопоставляемых структур – константы, поэтому используем правило сопоставления констант. Атом пешка цели сопоставляем с атомом пешка утверждения. Результат сопоставления – истина. Атом п1 цели сопоставляем с атомом п1 утверждения. Результат – также истина. Атом цели черный сопоставляем с атомом утверждения черный. Результат – истина. Сопоставляем числа 6 и 6 цели с числами 6 и 6 утверждения соответственно. Сопоставляемые константы тождественны. Результат сопоставления всех аргументов – истина.

    Сопоставили цель с утверждением факта 1. Получили результат - истина. Дальнейший перебор утверждений прекращается, так как уже достигли положительного результата. Выполнение программы прекращается. Последующие шаги не выполняются. Ответ – yes.

    Запрос 6 является простым запросом с именованной переменной в качестве аргумента структуры.

    Шаг 1-й. Сопоставляем цель с фактом 1.

    Сопоставляем структуру цели со структурой утверждения по правилу сопоставления структур. Имена структур тождественны (фигурафигура).

    Арности сопоставляемых структур равны. Первый аргумент структуры цели не тождественен первому аргументу структуры утверждения (ладьяпешка). Получили результат – ложь. Прекращаем дальнейшее сравнение.

    Шаг 2-й. Сопоставляем цель с фактом 2. Получили результат – ложь (по аналогии с шагом 1). Тот же самый результат будет для фактов 3-8 (шаги 3-8).

    Шаг 9-й. Сопоставим цель с фактом 9.

    Сопоставляем структуру цели со структурой утверждения по правилу сопоставления структур. Имена структур тождественны (фигурафигура).

    Арности сопоставляемых структур равны. Первый аргумент структуры цели тождественен первому аргументу структуры утверждения (ладьяладья).

    Второй аргумент структуры цели с именем Обозначение (переменная в неконкретизированном состоянии) сопоставляем с соответствующим аргументом утверждения – с атомом л1 по правилу сопоставления именованных переменных в неконкретизированном состоянии. Результат сопоставления – истина, при этом происходит конкретизация переменной Обозначение, которая приобретает значение равное л1.

    Третий аргумент структуры цели тождественен третьему аргументу структуры утверждения (белыйбелый).

    Четвертый и пятый аргументы структур сопоставляем по правилу сопоставления анонимных переменных. Результат сопоставления – истина. Анонимные переменные цели на момент сопоставления конкретизируются соответственно числами 8 и 5, но теряют эти конкретизации при переходе к следующему терму.

    Результат сопоставления на первом шаге – истина при этом переменная Обозначение получает конкретизацию л1. Это первое решение программы. В программе осталось необработанными еще 5 утверждений, поэтому конкретизация переменной сохраняется в стеке. Переменная Обозначение переходит в неконкретизированное состояние, продолжается перебор утверждений и сопоставления.

    Шаг 10-й. Сопоставляем цель с фактом 10.

    Имена структур цели и утверждения тождественны. Арности сопоставляемых структур равны. Первый аргумент структуры цели тождественен первому аргументу структуры утверждения. Второй аргумент структуры цели с именем Обозначение сопоставляем с соответствующим аргументом утверждения. Результат сопоставления – истина, при этом происходит конкретизация переменной Обозначение. Четвертый аргумент структуры цели не тождественен первому аргументу структуры утверждения (белыйчерный). Получили результат – ложь. Прекращаем дальнейшее сравнение. Переменная Обозначение переходит в неконкретизированное состояние, продолжается перебор утверждений и сопоставления.

    Шаг 11-й. Сопоставляем цель с фактом 11. Процедура сопоставления аналогична процедуре на шаге 10, за исключением конкретизации переменной Обозначение. На 11-м шаге переменная получает значение равное л3.

    Шаги с 12-го по 14-й также выполняются программой, но результат выполнения в этом случае отрицательный. Причина этого – отрицательный результат сопоставления атома ладья с соответствующими аргументами, стоящими на первом месте в структурах соответствующих фактов.

    Итоговый результат выполнения запроса 6 – истина. При этом получаем два решения с соответствующими конкретизациями переменной Обозначение.

    Определения очередности разработки правил

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

    Разработка логической модели правила

    Сформируем логическую модель атаки ладьей л1 фигуры п2.

    PREDICATES

    nondeterm фигура (symbol, symbol, symbol, integer, integer)

    nondeterm атака (symbol, symbol, symbol, integer, integer, symbol, symbol, integer, integer)

    CLAUSES

    % фигуры

    фигура (пешка, п1, черный, 6, 6). %факт 1

    фигура (пешка, п2, черный, 4, 5). %факт 2

    фигура (пешка, п3, белый, 8, 4). %факт 3

    фигура (пешка, п4, белый, 3, 3). %факт 4

    фигура (конь, кн1, черный, 1, 7). %факт 5

    фигура (конь, кн2, белый, 2, 6). %факт 6

    фигура (слон, с1, черный, 5, 7). %факт 7

    фигура (слон, с2, белый, 6, 4). %факт 8

    фигура (ладья, л1, белый, 8, 5). %факт 9

    фигура (ладья, л2, черный, 3, 4). %факт 10

    фигура (ладья, л3, белый, 4, 1). %факт 11

    фигура (ферзь, ф1, черный, 4, 8). %факт 12

    фигура (король, кр1, черный, 6, 8). %факт 13

    фигура (король, кр2, белый, 5, 1). %факт 14

    % атака

    атака (ладья, л1, белый, 8, 5, п2, черный, 4, 5). %факт 15

    GOAL

    атака (ладья, л1, белый, 8, 5, п2, черный, 4, 5). %запрос 9

    Ладья с обозначением л1 белого цвета, стоящая в поле с координатами 8-5, может взять фигуру с обозначением п2 черного цвета, стоящую на поле с координатами 4-5.

    Разработка и тестирование варианта программы с безусловными утверждениями (фактами)

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

    Присвоим этой структуре имя атака, определим её и тип её аргументов в области предикатов.

    Дополним базу фактов и правил 15-м фактом, определяющим атаку ладьей л1 фигуры п2.



    Запросы

    Формулировки запросов

    9

    атака (ладья, л1, белый, 8, 5, п2, черный, 4, 5).

    Может ли ладья с обозначением л1 белого цвета, стоящая на поле с координатой по горизонтали 8 и координатой по вертикали 5 атаковать фигуру с обозначением п2 черного цвета, стоящую на поле с координатой по горизонтали 4 и координатой по вертикали 5?

    10

    фигура (ладья, л1, белый, 8, 5), фигура (пешка, п2, черный, 4, 5).

    Содержится ли на поле одновременно фигура с наименованием ладья, обозначением л1, цветом белый, координатой по горизонтали 8 и координатой по вертикали 5 и фигура с наименованием пешка, обозначением п2, цветом черный, координатой по горизонтали 4 и координатой по вертикали 5?

    Результат выполнения запроса к программе:



    Запросы

    Формулировки запросов

    9

    yes

    факт 15.

    10

    yes

    факты 9 и 2.

    Выполнение запроса 9 в программе контролирует правильность функционирования левой части правила логической модели, то есть контролирует утверждение. Запрос 10 проверяет работоспособность правой части правила логической модели, то есть контролирует условие.

    Разработка и тестирование варианта с частными правилами (правила с константами)

    В программе перейдем от факта 15 и запросов 9-10 к соответствующему частному правилу 1.

    PREDICATES

    nondeterm фигура (symbol, symbol, symbol, integer, integer)

    nondeterm атака (symbol, symbol, symbol, integer, integer, symbol, symbol, integer, integer)

    CLAUSES

    % фигуры

    фигура (пешка, п1, черный, 6, 6). %факт 1

    фигура (пешка, п2, черный, 4, 5). %факт 2

    фигура (пешка, п3, белый, 8, 4). %факт 3

    фигура (пешка, п4, белый, 3, 3). %факт 4

    фигура (конь, кн1, черный, 1, 7). %факт 5

    фигура (конь, кн2, белый, 2, 6). %факт 6

    фигура (слон, с1, черный, 5, 7). %факт 7

    фигура (слон, с2, белый, 6, 4). %факт 8

    фигура (ладья, л1, белый, 8, 5). %факт 9

    фигура (ладья, л2, черный, 3, 4). %факт 10

    фигура (ладья, л3, белый, 4, 1). %факт 11

    фигура (ферзь, ф1, черный, 4, 8). %факт 12

    фигура (король, кр1, черный, 6, 8). %факт 13

    фигура (король, кр2, белый, 5, 1). %факт 14

    % атака

    атака (ладья, л1, белый, 8, 5, п2, черный, 4, 5) :-

    фигура (ладья, л1, белый, 8, 5),

    фигура (пешка, п2, черный, 4, 5). % правило 1

    GOAL

    атака (ладья, л1, белый, 8, 5, п2, черный, 4, 5). %запрос 11

    По критерию наличие или отсутствие переменных в качестве аргументов в правилах их можно классифицировать на три группы.

    Правила, не содержащие переменных в качестве аргументов структур. Аргументами в них могут быть константы (атомы и числа), списки с константами, вложенные структуры без переменных. Назовем эти правила частными.

    Правила, содержащие одновременно как переменные, так и константы, списки с константами, вложенные структуры без переменных.

    Правила, содержащие в качестве аргументов лишь переменные. В этих правилах отсутствуют константы, списки с константами, вложенные структуры без переменных. Назовем эти правила универсальными.

    Результаты выполнения запросов к программе:



    Запросы

    Результаты выполнения

    Используемые факты и правила

    11

    атака (ладья, л1, белый, 8, 5, п2, черный, 4, 5).

    yes

    правило 1, факты 9 и 2.

    12

    атака (ладья, л2, черный, 3, 4, с2, белый, 6, 4).

    no

    факты 1-14, правило 1.

    Анализ результатов выполнения запросов 11-12 показывает, что частные правила обеспечивают правильное функционирование лишь в частных случаях, соответствующих этим правилам. Правильное функционирование программы для всех вариантов требует перехода к универсальным правилам, то есть необходима замена констант в правилах на переменные.

    Разработка и тестирование варианта с универсальными правилами

    Заменим атомы с обозначением фигур, их цветов и координат на соответствующие именованные переменные.

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

    Также введем пользовательскую структуру проверка_беспрепятственной_атаки для проверки на то, что между атакующей ладьей и атакованной фигурой нет других фигур (по правилам шахмат).

    Добавим в правила условия для устранения избыточности.

    PREDICATES

    nondeterm фигура (symbol, symbol, symbol, integer, integer)

    nondeterm атака (symbol, symbol, symbol, integer, integer, symbol, symbol, integer, integer)

    nondeterm ход (integer, integer, integer, integer)

    nondeterm проверка_беспрепятственной_атаки (integer, integer, integer, integer)

    CLAUSES

    % фигуры

    фигура (пешка, п1, черный, 6, 6). %факт 1

    фигура (пешка, п2, черный, 4, 5). %факт 2

    фигура (пешка, п3, белый, 8, 4). %факт 3

    фигура (пешка, п4, белый, 3, 3). %факт 4

    фигура (конь, кн1, черный, 1, 7). %факт 5

    фигура (конь, кн2, белый, 2, 6). %факт 6

    фигура (слон, с1, черный, 5, 7). %факт 7

    фигура (слон, с2, белый, 6, 4). %факт 8

    фигура (ладья, л1, белый, 8, 5). %факт 9

    фигура (ладья, л2, черный, 3, 4). %факт 10

    фигура (ладья, л3, белый, 4, 1). %факт 11

    фигура (ферзь, ф1, черный, 4, 8). %факт 12

    фигура (король, кр1, черный, 6, 8). %факт 13

    фигура (король, кр2, белый, 5, 1). %факт 14

    % атака

    атака (ладья, Л1, Цвет1, X1, Y1, Ф, Цвет2, X2, Y2) :-

    фигура (ладья, Л1, Цвет1, X1, Y1),

    фигура ( _, Ф, Цвет2, X2, Y2),

    Цвет1<>Цвет2,

    ход (X1, Y1, X2, Y2). %правило 1

    % ход

    ход (X0, Y0, X, Y) :- Y=Y0, X0<>X,

    not(проверка_беспрепятственной_атаки (X0, Y0, X, Y)). %правило 2

    % проверка на отсутствие других фигур между атакующей и взятой фигурой

    проверка_беспрепятственной_атаки (X0, Y0, X, Y) :-

    фигура (_, _, _, Xf, Yf),

    Yf=Y0, Yf=Y, Xf>X0, Xf
    фигура (_, _, _, Xf, Yf),

    Yf=Y0, Yf=Y, XfX. %правило 3

    GOAL

    атака (ладья, Л, Цвет, _, _, Ф, _, X2, Y2). %запрос 13

    Результаты выполнения запроса 13 к программе:



    Запросы

    Результаты выполнения

    Используемые факты и правила

    11

    атака (ладья, Л, Цвет, Ф, X2, Y2).

    Л=л1, Цвет=белый, Ф=п2, X2=4, Y2=5

    Л=л2, Цвет=черный, Ф=с2, X2=6, Y2=4

    2 Solution

    правила 1, 2, 3, факты 2, 8, 9, 10


    написать администратору сайта