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

  • 1.2 Набор, редактирование и тестирование простейших программ в режиме Test Goal

  • DOMAINS

  • CLAUSES

  • Решение. 1. Запустите среду Visual Prolog. Закройте окно проекта (если оно открыто) и откройте новый файл (File|New

  • Project | Test Goal

  • Пример 2

  • Результат: X=Анна1 Solutionb) составить правило бабушка

  • Результат: X=Елена1 SolutionЗамечание

  • Отчет о выполненной самостоятельной работе должен содержать

  • Application Expert

  • Application Expert На вкладке Target

  • Target

  • ИИСС. Практикум решения задач по курсу Основы искусственного интеллекта


    Скачать 0.73 Mb.
    НазваниеПрактикум решения задач по курсу Основы искусственного интеллекта
    Дата17.11.2022
    Размер0.73 Mb.
    Формат файлаdoc
    Имя файлаmetod_VP.doc
    ТипПрактикум
    #795277
    страница2 из 8
    1   2   3   4   5   6   7   8

    ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ


    Запустите среду Visual Prolog. Откройте проект, указанный преподавателем. Запустите его на исполнение и проверьте его работу.

    1.2 Набор, редактирование и тестирование простейших программ в режиме Test Goal

    Программа на ПРОЛОГе состоит из предложений, которые могут быть фактами, правилами или запросами. Как правило, программа состоит из четырех разделов.

    DOMAINS – секция описания доменов(типов). Секция применяется, если в программе используются нестандартные домены.

    PREDICATES – секция описания предикатов. Секция применяется, если в программе используются нестандартные предикаты.

    CLAUSES – секция предложений. Именно в этой секции записываются предложения: факты и правила вывода.

    GOAL – секция цели. В этой секции записывается запрос.

    Среда Visual Prolog позволяет протестировать программу без создания проекта. Для этого используется утилита Test Goal. Достаточно создать новый файл, набрать текст программы и активизировать Test Goal нажатием кнопки на панели инструментов. Автономно исполняемый файл при этом не создается. Утилита Test Goal компилирует только тот код, который определен в активном окне редактора (код в других открытых окнах или модулях проектов, если они есть, игнорируются). Test Goal находит все возможные решения задачи и автоматически выводит значения всех переменных.
    Пример 1.

    Имеется база данных, содержащая следующие факты:

    родитель(илья, марина).

    родитель(марина, ира).

    родитель(елена, иван).

    родитель(николай, ира).

    родитель(ольга, алексей).

    родитель(марина, саша).

    родитель(сергей, иван).

    Определить:

    1. верно ли, что Марина является родителем Саши;

    2. верно ли, что Алексей является родителем Ольги;

    3. кто является ребенком Николая;

    4. кто родители Ивана;

    5. всех родителей и их детей.

    Решение.

    1. Запустите среду Visual Prolog. Закройте окно проекта (если оно открыто) и откройте новый файл (File|New) (рис.2)

    В появившемся окне наберите текст программы, содержащий разделы: PREDICATES (описание предиката родитель), CLAUSES (перечисляются имеющиеся факты) и GOAL (запрос).



    рис.2. Рабочее окно редактора

    DOMAINS

    имя=string

    PREDICATES

    nondeterm родитель(имя, имя)

    CLAUSES

    родитель(илья, марина).

    родитель(марина, ира).

    родитель(елена, иван).

    родитель(николай, ира).

    родитель(ольга, алексей).

    родитель(марина, саша).

    родитель(сергей, иван).

    GOAL

    родитель(марина, саша) .
    Запустите и протестируйте программу с помощью команды Project | Test Goal (можно использовать кнопку на панели инструментов или сочетание клавиш +). Результат выполнения программы будет выведен в отдельном окне



    рис3. Окно вывода результата
    Указание: перед следующим запуском программы следует закрыть это окно.
    2. Для ответа на вопрос: верно ли, что Алексей является родителем Ольги, измените запрос:

    GOAL

    родитель(алексей, ольга).

    После запуска программы (Project | Test Goal) будет получен ответ:

    no

    3. Для ответа на вопрос: кто является ребенком Николая, запишите цель:

    GOAL

    родитель(николай, X) .
    Результат:

    X=ира

    1 Solution
    4. Для ответа на вопрос: кто родители Ивана, укажите запрос:

    GOAL

    родитель(X, иван), родитель(Y, иван), X<>Y.
    Результат:

    X=елена, Y=сергей

    X=сергей, Y=елена

    2 Solutions
    5. Для определения всех родителей и их детей, запишите:

    GOAL

    родитель(X, Y).
    Результат:

    X=илья, Y=марина

    X=марина, Y=ира

    X=елена, Y=иван

    X=николай, Y=ира

    X=ольга, Y=алексей

    X=марина, Y=саша

    X=сергей, Y=иван

    7 Solutions
    Пример 2

    Имеются факты вида: родитель(имя, имя) и женщина(имя).

    а) составить правило мать и определить, кто мать Маши.
    Решение:

    DOMAINS

    имя=string

    PREDICATES

    родитель(имя, имя)

    женщина(имя)

    мать(имя,имя)

    CLAUSES

    родитель("Марина","Ирина").

    родитель("Елена", "Анна").

    родитель("Ольга","Марина").

    родитель("Ольга","Татьяна").

    родитель("Татьяна","Катя").

    родитель("Анна", "Маша").

    женщина("Ольга").

    женщина("Маша").

    женщина("Ирина").

    женщина("Елена").

    женщина("Анна").

    женщина("Марина").

    женщина("Татьяна ").

    женщина("Катя").

    мать(X,Y):-родитель(X,Y),женщина(X).

    GOAL

    мать(X,"Маша").
    Результат:

    X=Анна

    1 Solution
    b) составить правило бабушка и определить, кто бабушка Маши.

    Решение:

    DOMAINS

    имя=string

    PREDICATES

    nondeterm родитель(имя,имя)

    женщина(имя)

    nondeterm мать(имя,имя)

    nondeterm бабушка(имя,имя)

    CLAUSES

    родитель("Марина","Ирина").

    родитель ("Елена", "Анна").

    родитель("Ольга","Марина").

    родитель("Ольга","Татьяна").

    родитель("Татьяна","Катя").

    родитель ("Анна", "Маша").

    женщина("Ольга").

    женщина( "Маша").

    женщина("Ирина").

    женщина("Елена").

    женщина("Анна").

    женщина("Марина").

    женщина("Татьяна ").

    женщина("Катя").

    мать(X,Y):-родитель(X,Y),женщина(X).

    бабушка(X,Z):-мать(X,Y),родитель(Y,Z).

    GOAL

    бабушка(X,"Маша").

    Результат:

    X=Елена

    1 Solution
    Замечание: ключевое слово nondeterm определяет недетерминированные предикаты, которые могут совершать откат назад и генерировать множественные решения. Таким образом, если задача предполагает возможность получения несколько решений, следует объявлять предикаты как недетерминированные.
    c) составить правило внучка и определить, сколько внучек у Ольги и как их зовут.

    Решение:

    DOMAINS

    имя=string

    PREDICATES

    nondeterm родитель(имя,имя)

    женщина(имя)

    nondeterm мать(имя,имя)

    nondeterm бабушка(имя,имя)

    nondeterm внучка(имя,имя)

    CLAUSES

    родитель("Марина","Ирина").

    родитель ("Елена", "Анна").

    родитель("Ольга","Марина").

    родитель("Ольга","Татьяна").

    родитель("Татьяна","Катя").

    родитель("Анна", "Маша").

    женщина("Ольга").

    женщина( "Маша").

    женщина("Ирина").

    женщина("Елена").

    женщина("Анна").

    женщина("Марина").

    женщина("Татьяна ").

    женщина("Катя").

    мать(X,Y):-родитель(X,Y),женщина(X).

    бабушка(X,Z):-мать(X,Y),родитель(Y,Z).

    внучка(X,Y):-бабушка(Y,X),женщина(X).

    GOAL

    внучка(X, "Ольга").
    Результат:

    X=Ирина

    X=Катя

    2 Solutions

    ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

    1. Имеется база данных, содержащая следующие факты:

    любит(“Aнна,” яблоки).

    любит(“Сергей”, бананы).

    любит(“Андрей”, яблоки).

    любит(“Света”, шоколад).

    любит(“Вова”, шоколад).

    любит(“Анна”, шоколад).

    любит(“Света”, апельсины).

    любит(“Вова”, бананы).

    Составить программу, определяющую:

    1. всех, кто любит бананы;

    2. кто любит и шоколад, и яблоки;

    3. что любит Вова;

    4. что любят и Света, и Вова.

    2. Имеется база данных, содержащая следующие факты:

    играет (“Саша”, футбол).

    играет (“Катя”, теннис).

    играет (“Саша”, теннис).

    играет (“Андрей”, футбол).

    играет (“Олег”, футбол).

    играет (“Ольга”, теннис).

    играет (“Катя”, волейбол).

    играет (“Олег”, волейбол).

    Составить программу, определяющую:

    1. каким видом спорта увлекается Андрей;

    2. всех, кто играет в волейбол;

    3. каким видом спорта увлекаются и Ольга, и Саша;

    4. кто увлекается и футболом, и волейболом.

    3. Имеется база данных, содержащая следующие факты:

    любит(“Aнна,” яблоки).

    любит(“Сергей”, бананы).

    любит(“Андрей”, яблоки).

    любит(“Света”, шоколад).

    любит(“Вова”, шоколад).

    любит(“Анна”, шоколад).

    любит(“Света”, апельсины).

    любит(“Вова”, бананы).

    фрукты(яблоки ).

    фрукты(бананы).

    фрукты(апельсины ).

    конфеты(шоколад).

    1. используя имеющиеся факты, составить новое правило люб_фрукты(Х) и определить всех, кто любит фрукты;

    2. используя имеющиеся факты, составить новое правило люб_конфеты(Х) и определить всех, кто любит конфеты;

    3. используя имеющиеся факты, составить правило люб_вкусное) и определить всех, кто любит и фрукты, и конфеты.

    4. Имеется база данных, содержащая следующие факты:

    играет (“Саша”, футбол).

    играет (“Катя”, теннис).

    играет (“Саша”, теннис).

    играет (“Андрей”, футбол).

    играет (“Олег”, футбол).

    играет (“Ольга”, теннис).

    играет (“Катя”, волейбол).

    играет (“Олег”, волейбол).

    женщина(“Катя”).

    женщина(“Ольга”).

    мужчина(“Саша”).

    мужчина(“Андрей”).

    мужчина(“Олег”).

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

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

    3. используя имеющиеся факты, составить правило теннис_пара(Х,Y), позволяющее найти смешанную теннисную пару (мужчина+женщина). Определить все такие пары.


    Отчет о выполненной самостоятельной работе должен содержать:

    1. тему лабораторной работы;

    2. условие задачи;

    3. листинг программы;

    4. результаты ее тестирования.

    1.3 Создание простейших проектов

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

    Заданы отношения-факты:

    родитель(“Иван”,”Катя”).

    родитель(“Анна”,” Олег ”).

    родитель(“Олег”,”Дима”).

    родитель(“Игорь”,”Ольга”).

    родитель(“Олег”,”Виктор”).

    родитель(“Игорь”,”Иван”).

    мужчина(“Дима”).

    мужчина(“Иван”).

    мужчина(“Игорь”).

    мужчина(“Олег”).

    мужчина(“Виктор”).

    женщина(“Катя”).

    женщина(“Ольга”).

    женщина(“Анна”).

    Составить новое отношение-правило дед(X,Y) и определить, кто является дедушкой Кати. Создать проект и протестировать пример как автономную исполняемую программу.
    Решение

    1. Запустите среду Visual Prolog и создайте новый проект (Project | New Project), активизируется окно Target'>Application_Expert'>Application Expert (эксперт приложения).

    2. Определите имя проекта (Primer) и базовый каталог, куда будет сохранен проект (например, D:\VP\Primer)


    рис.4. Окно Application Expert
    На вкладке Target установите параметры и нажмите кнопку Create для создания проекта (рис. 5):



    р ис.5. Установки на вкладке Target окна Application Expert
    3. Откройте окно Compiler Options (Options | Project | Compiler Options), откройте вкладку Warnings и установите опции компилятора для созданного проекта (рис.6):



    рис.6. Установки опций компилятора

    Нажмите OK.

    4. В окне проекта выделите файл Primer.pro и откройте его для редактирования (двойной щелчок или кнопка Edit)


    рис.7. Окно проекта

    Файл с расширением .pro содержит секции PREDICATES, GOAL, CLAUSES. Допишите необходимые определения так, чтобы получилась программа:

    DOMAINS

    имя=string

    PREDICATES

    родитель(имя,имя)

    женщина(имя)

    мужчина(имя)

    дед(имя, имя)

    CLAUSES

    родитель("Иван","Катя").

    родитель("Анна","Олег").

    родитель("Олег","Дима").

    родитель("Игорь","Ольга").

    родитель("Олег","Виктор").

    родитель("Игорь","Иван").

    мужчина("Дима").

    мужчина("Иван").

    мужчина("Игорь").

    мужчина("Олег").

    мужчина("Виктор").

    женщина("Катя").

    женщина("Ольга").

    женщина("Анна").

    дед(X,Z):-родитель(X,Y), родитель(Y,Z),

    мужчина(X).

    GOAL

    дед(X,"Катя"),write(X).

    5. Откомпилируйте исходный код примера и запустите его как автономную исполняемую программу. ( Project | Run, или клавиша , или кнопка ). Результат выполнения программы должен отобразиться в окне:


    рис.8. Окно вывода результата
    1   2   3   4   5   6   7   8


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