Программирование на языке Пролог для искусственного интеллекта


         

Эта программа все еще имеет



        решитьвсе( [ ]).

        решитьвсе( [Верш | Вершины]) :-

                решить( Верш),

                решитьвсе( Вершины).


Здесь принадлежит - обычное отношение принадлежности к списку.

Эта программа все еще имеет недостатки:

  • она не порождает решающее дерево, и


  • она может зацикливаться, если И / ИЛИ-граф имеет соответствующую структуру (циклы).


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

            решить( Верш, РешДер).

    Решающее дерево представим следующим образом. Мы имеем три случая:

        (1)        Если Верш

    - целевая вершина, то соответствующее решающее дерево и есть сама эта вершина.

        (2)        Если Верш

    - ИЛИ-вершина, то решающее дерево имеет вид

                            Верш ---> Поддерево

    где Поддерево - это решающее дерево для одного из преемников вершины Верш.

        (3)        Если Верш

    - И-вершина, то решающее дерево имеет вид

                            Верш ---> и : Поддеревья

                    где Поддеревья - список решающих деревьев для всех преемников вершины Верш.

    line();

    % Поиск в глубину для И / ИЛИ-графов

    % Процедура решить( Верш, РешДер) находит решающее дерево для

    % некоторой вершины в И / ИЛИ-графе

            решить( Верш, Верш) :-


    Содержание  Назад  Вперед