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

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

  • 1.8 Решение логических задач в ПРОЛОГе

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

  • Результат выполнения программы наташа туфли - зеленый платье - синийваля туфли - синий платье - зеленыйаня туфли - белый платье - белыйПример 3

  • Результат выполнения программы витя-миша-юраПример 4

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


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

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


    1. Вычислить сумму 1+2+3+…+N.

    2. Подсчитать сумму ряда целых четных чисел от 2 до N.

    3. Вычислить сумму ряда целых нечетных чисел от 1 до n.

    4. Найти значение произведения: 2*4*6*...*26

    5. Найти значение произведения: 1*3*5*...*11

    6. Вычислить значение n-го члена ряда Фибоначчи: f(0)=0, f(1)=1,
      f(n)=f(n-1)+f(n-2).

    7. Используя базу данных и правило предок из примера 2 составить правило для определения всех потомков-мужчин.

    8. Используя базу данных и правило предок из примера 2 составить правило для определения всех потомков-женщин.

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

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

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

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

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

    1.8 Решение логических задач в ПРОЛОГе

    ПРОЛОГ позволяет наиболее естественным образом решать логические задачи, моделируя процесс размышления человека с помощью правил.

    Многие логические задачи связаны с рассмотрением нескольких конечных множеств с одинаковым количеством элементов, между которыми устанавливается взаимно-однозначное соответствие. В ПРОЛОГе эти множества можно описывать как базы данных, а зависимости между объектами устанавливать с помощью правил.


    Пример 1

    В автомобильных гонках три первых места заняли Алеша, Петя и Коля. Какое место занял каждый из них, если Петя занял не второе и не третье место, а Коля - не третье?

    Решение

    Традиционным способом задача решается заполнением таблицы. По условию задачи Петя занял не второе и не третье место, а Коля - не третье. Это позволяет поставить символ '-' в соответствующих клетках.


    Имя

    I место

    II место

    III место

    Алеша

     

     

     

    Петя

     

    -

    -

    Коля

     

     

    -

    Между множеством имен участников гонки и множеством мест должно быть установлено взаимнооднозначное соответствие. Поэтому определяем занятое место сначала у Пети, затем у Коли и, наконец, у Алеши. В соответствующих клетках проставляем знак '+'. В каждой строке и каждом столбце должен быть только один такой знак.


    Имя

    I место

    II место

    III место

    Алеша

    -

    -

    +

    Петя

    +

    -

    -

    Коля

    -

    +

    -

    Из последней таблицы следует, что Алеша занял третье место, Петя - первое, Коля - второе.

    Программа на ПРОЛОГе будет выглядеть следующим образом:

    PREDICATES

    имя(string)

    место(string)

    соответствие(string,string)

    решение(string,string,string,string,string,string)

    CLAUSES

    имя(алеша).

    имя(петя).

    имя(коля).

    место(первое).

    место(второе).

    место(третье).

    /* Устанавливаем взаимнооднозначное соответствие

    между множеством имен и множеством мест, X - имя,Y - место */

    /* Петя занял не второе и не третье место */

    соответствие(X, Y):-имя(X), X=петя,

    место(Y),not(Y=второе),

    not(Y=третье).

    /* Коля занял не третье место */

    соответствие(X, Y):- имя(X), X=коля,

    место(Y), not(Y=третье).

    соответствие(X, Y):- имя(X), X=алеша, место(Y).

    /* У всех ребят разные места */

    решение(X1,Y1,X2,Y2,X3,Y3):-

    X1=петя,соответствие(X1,Y1),

    X2=коля,соответствие(X2,Y2),

    X3=алеша,соответствие(X3,Y3),

    Y1<>Y2, Y2<>Y3, Y1<>Y3.

    GOAL

    решение(X1,Y1,X2,Y2,X3,Y3), write(X1," - ",Y1),nl,

    write(X2," - ",Y2),nl,write(X3," - ",Y3),nl.
    Результат выполнения программы

    петя - первое

    коля - второе

    алеша - третье
    Пример 2

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

    Решение

    PREDICATES

    имя(string)

    туфли(string)

    платье(string)

    соот(string,string,string)

    решение(string,string,string,string,string,string,

    string,string,string)

    CLAUSES

    имя(наташа).

    имя(валя).

    имя(аня).

    туфли(белый).

    туфли(синий).

    туфли(зеленый).

    платье(белый).

    платье(синий).

    платье(зеленый).

    % X – имя, Y – цвет туфель, Z – цвет платья

    соот(X,Y,Z):-имя(X),туфли(Y),платье(Z),

    X=наташа,Y=зеленый,Y<>Z.

    соот(X,Y,Z):-имя(X),туфли(Y),платье(Z),

    X=валя,not(Y=белый),

    not(Z=белый), Y<>Z.

    соот(X,Y,Z):-имя(X),туфли(Y),платье(Z),X=аня,Y=Z.

    решение(X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3):-

    X1=наташа,соот(X1,Y1,Z1),

    X2=валя, соот(X2,Y2,Z2),

    X3=аня, соот(X3,Y3,Z3),

    Y1<>Y2, Y2<>Y3, Y1<>Y3,

    Z1<>Z2, Z2<>Z3, Z1<>Z3.

    GOAL

    решение(X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3),

    write(X1," туфли- ",Y1," платье- ",Z1),nl,

    write(X2," туфли- ",Y2," платье- ",Z2),nl,

    write(X3," туфли- ",Y3," платье- ",Z3),nl.
    Результат выполнения программы

    наташа туфли - зеленый платье - синий

    валя туфли - синий платье - зеленый

    аня туфли - белый платье - белый
    Пример 3

    Витя, Юра и Миша сидели на скамейке. В каком порядке они сидели, если известно, что Миша сидел слева от Юры, а Витя слева от Миши.

    Решение

    PREDICATES

    слева(string,string)

    ряд(string,string,string)

    CLAUSES

    /* МишасиделслеваотЮры */

    слева(миша, юра).

    /* Витя сидел слева от Миши */

    слева(витя, миша).

    /* Объекты X, Y и Z образуют ряд,

    если Х слева от Y и Y слева от Z */

    ряд(X, Y, Z):- слева(X,Y), слева(Y, Z).

    GOAL

    ряд(X, Y, Z), write(X,"-",Y,"-",Z),nl.
    Результат выполнения программы

    витя-миша-юра
    Пример 4

    Известно, что тополь выше березы, которая выше липы. Клен ниже липы, а сосна выше тополя и ниже ели. Определить самое высокое и самое низкое дерево.

    Решение

    DOMAINS

    name=string

    PREDICATES

    выше(name,name)

    ряд(name,name,name,name,name,name)

    CLAUSES

    выше(тополь,береза).

    выше(липа,клен).

    выше(ель,сосна).

    выше(береза,липа).

    выше(сосна,тополь).

    ряд(X1,X2,X3,X4,X5,X6):-выше(X1,X2),выше(X2,X3),

    выше(X3,X4),выше(X4,X5),

    выше(X5,X6).

    GOAL

    ряд(X,_,_,_,_,Y),write("Самое высокое - ",X),nl,

    write("Самое низкое - ",Y),nl.
    Результат выполнения программы

    Самое высокое - ель

    Самое низкое - клен
    1   2   3   4   5   6   7   8


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