- •Основные этапы развития научной области ии.
- •Тест Тьюринга. Основные особенности интеллектуальной программы.
- •Характеристика первых экспертных систем Mycin и Dendral.
- •Современные достижения в области ии.
- •Классификация иис.
- •Данные и знания. Основные понятия.
- •Особенности знаний и их отличие от данных. Декларативные и процедурные знания.
- •Трансформация знаний и данных при их обработке на эвм.
- •Структура экспертной системы.
- •Классификация экспертных систем.
- •Технология и этапы проектирования экспертной системы.
- •Синтаксис и семантика логической программы.
- •Логический вывод в системе логического программирования Пролог.
- •Структура данных - списки. Построение дерева поиска решений логической программы.
- •Правила продукций. Продукционные экспертные системы.
- •Прямой логический вывод в продукционных эс.
- •18. Обратный логический вывод в продукционных эс.
- •Семантические сети. Основные типы отношений в семантических сетях.
- •Правила построения семантических сетей.
- •Вывод в семантических сетях. Механизм наследования.
- •Теория фреймов. Структура фрейма. Слоты и присоединенные процедуры.
- •Теория фреймов. Механизм вывода на фреймах.
- •Теория фреймов. Системы фреймов.
- •Механизм вероятностного вывода на основе правила Байеса и коэффициентов уверенности.
- •Основные понятия теории нечетких множеств. Операции над нечеткими множествами.
- •Понятия нечеткой и лингвистической переменной.
- •Основные понятия нечеткой логики. Нечеткие высказывания и предикаты. Нечеткие логические операции.
- •Нечеткие продукционные системы. Синтаксис т семантика.
- •Прямой и обратный вывод в нечетких продукционных системах.
-
Структура данных - списки. Построение дерева поиска решений логической программы.
Список - последовательность произвольного числа элементов. В логическом программировании список обозначается [].
Структуры данных в логическом программировании записываются как функторы:
f(x1,x2,…,xn),
где f - имя функтора, xi - элементы данных для i от 1 до n.
Список - это бинарная рекурсивная структура данных. Первый компонент структуры - это элемент, второй - остаток списка, таким образом, необходим функтор арности 2. В логическом программировании принято функтор для списков обозначать точкой " · ". При построении списков необходимo наличие константного символа, чтобы рекурсия не была бесконечной. Таким символом является "пустой список", который в Прологе обозначается [].
Чтобы не перегружать программу обращением к символу " · ", используется специальная запись: терм · (Х,У) обозначается как [X|Y]. Компоненты терма имеют специальные названия: X - голова списка, Y - хвост списка.
Общепринятая запись вышеперечисленных списков:
[a| [ ] ] – или [ а ];
[ а | [ b | [ c | [ ] ] ] ] – или [a, b, c];
[ а | X ];
[ а | [ b | X] ] – или [ а , b | X ].
Основные предикаты обработки списков, которые могут использоваться при написании более сложных программ:
- принадлежность списку;
- объединение двух списков;
- выделение элемента из списка;
- удаление всех вхождении элемента из списка;
- сортировка элементов списка;
- определение длины списка и др.
Список - частный случай двоичного дерева.
Списки используют для представления множеств, но в списке имеет значение порядок элементов, кроме того один и тот же объект может встретиться в списке несколько раз.
Корень дерева - цель G. Каждая вершина дерева имеет несколько ребер, каждое из которых соответствует одному применению правила резолюции.
Вершины дерева могут быть конъюнктивными (конъюнкция целей), причем одна из подцелей подчеркивается. Подчеркивается та цель, которая применяется в правиле резолюции.
Рядом с ребрами подписывается результат унификации, т. к. резолюция происходит лишь в результате успешной унификации.
Вершина имеет столько ребер, сколько происходит унификация с правилами программы.
В каждой вершине находится резольвента. По дереву поиска хорошо видно сколько может быть возможных решений.
Нарисовать дерево поиска решений append([a,b],[c,d],[a,b,c,d])
append([a,b],[c,d],[a,b,c,d])
X=a, XS=[b],YS=[c,d],ZS=[b,c,d]
append([b],[c,d],[b,c,d])
X=b, XS=[],YS=[c,d],ZS=[c,d]
append([],[c,d],[c,d])
true