- •Классическая теория моделей первого порядка
- •7. Лисп. Решение интеллектуальных задач
- •8. Язык программирования Пролог. Назначение, применение
- •11. Пролог. Файлы, Базы данных, Базы знаний
- •1. Загрузка файла бд в оперативную память:
- •2. Сохранение фактов бд в внешнем файле:
- •13. Модели представление знаний в Лиспе.
- •14. Модели представление знаний на Прологе.
- •Эквивалентность типов.
- •Эпистемология прагматизма
14. Модели представление знаний на Прологе.
В Прологе ключевой выступает логическая модель представления знаний. Продукционные и логические модели: Знания в таких моделях представляются в следующей форме: "Если А, то В". Вместо А и В могут стоять некоторые утверждения, факты, приказы и т.д. Например: "Если диагонали четырехугольника пересекаются под прямым углом, то этот четырехугольник ромб", "Если сделаешь работу то получишь зарплату" и т.д. Из примеров видно что правило состоит из двух частей: посылки (условия) и следствия (заключения). Если А (посылка) имеет место, то В(следствие) также реализуется или может быть реализовано. Посылка может состоять и из нескольких частей т.е: "Если А1,А2,..,АN то В". Запись правила означает, что "Если все посылки от А1 до АN истинны, то следствие В также истинно". Посылки А1..АN есть простые посылки они соединяются с помощью союзов: и,или и могут содержать отрицание не. При реализации правил такого вида из одной или нескольких посылок (знаний) могут быть получены новые знания, поэтому они называются продукционными. Примером может служить следующее правило: Если человек Х является сыном человека У, и человек У является сыном человека Z, и человек Z является мужчиной, то человек Х является внуком человека Z.
Достоинства логических моделей представления знаний
* В качестве «фундамента» здесь используется классический аппарат математической логики, методы которой достаточно хорошо изучены и формально обоснованы.
* Существуют достаточно эффективные процедуры вывода, в том числе реализованные в языке логического программирования Пролог, использующие механизмы автоматического доказательства теорем для поиска и логически осмысленного вывода информации
* В базах знаний можно хранить лишь множество аксиом, а все остальные знания получать из них по правилам вывода, а также Данные, факты и другие сведения о людях, предметах, событиях и процессах.
Не относится к билету
Остальные модели представления знаний.
* продукционные модели – модель основанная на правилах, позволяет представить знание в виде предложений типа: «ЕСЛИ условие, ТО действие». Продукционная модель обладает тем недостатком, что при накоплении достаточно большого числа (порядка нескольких сотен) продукций они начинают противоречить друг другу;
* сетевые модели (или семантические сети) – в инженерии знаний под ней подразумевается граф, отображающий смысл целостного образа. Узлы графа соответствуют понятиям и объектам, а дуги – отношениям между объектами. Обладает тем недостатком, что однозначного определения семантической сети в настоящее время отсутствует; Сетевые модели: В основе сетевых моделей представления знаний лежит идея о том, что любые знания можно представить в виде совокупности объектов (понятий) и связей (отношений) между ними. В отличие от продукционных эти модели более наглядны, поскольку любой пример можно представить в виде ориентированного (направленного) графа. В основе моделей этого типа лежит конструкция, названная семантической сетью. Сетевые модели формально можно задать в виде Н=[I,C1,C2,..,CN,G]. Здесь I множество информационных единиц; С1,..,СN множество типов связей между информационными единицами. Отображение G задает между информационными единицами, входящими в I связи из заданного набора типов связей. В зависимости от типов связей, используемых в модели, различают классифицирующие сети, функциональные сети и сценарии.
16. Интеграция Пролог-процедур
Понятие Dll.
Вспомним процесс программирования в DOS. Преобразование исходного текста в машинный код включал в себя 2 процесса: компиляцию и линковку. Во время линковки в код программы помещались не только объявления функций и процедур, но и их полный код.
В многозадачной среде подобный подход был бы весьма расточителен, так как огромное количество функций, отвечающих за прорисовку элементов пользовательского интерфейса, за обращение к системным ресурсам и т.п. дублировались в каждой программе. В качестве решения возникшей проблемы была предложена концепция динамической компоновки (см. рис. 1).
рис 1.
DLL (библиотека динамической связи) – файл, выступающий в качестве коллективной библиотеки предикатов, которые могут быть использованы одновременно в нескольких приложениях. Prolog способен генерировать DLL, включать DLL статически и загружать динамически.
Вызов в программе на VP процедур и функций на других языках.
Прежде чем вызвать процедуры и функции на других языках их нужно объявить как внешний предикат, упомянув, что он осуществляется на другом языке. При этом необходимо знать количество и порядок входных параметров:
Замечание: обратите внимание, что в VP явно указывается язык процедуры
Передача входных/выходных параметров и возвращение значений.
Размер входных параметров определен однозначно и зависит только от объявленного типа. Выходной параметр – 32 битный указатель на область памяти, где хранится выходное значение.
Следует отметить, что функции на Pascal не могут возвращать значения в формате чисел с плавающей точкой, а функции C - структуры (но могут, конечно, возвращать указатели на них).
Многочисленные декларации.
Предикат VP может иметь различные комбинации входных/выходных параметров, и для каждой из них необходима отдельная процедура. Идентификаторы, используемые в Prolog должны совпадать с идентификаторами в библиотеке + суффикс _X, где X – целое число (порядковый номер процедуры, нумерация начинается с 0). Если существует только один вариант, то суффикс отсутствует.
Примечание: если процедура написана на языке C, то параметры заносятся в стек в обратном порядке (после возврата значений указатель автоматически корректируется VP), в противном случае, параметры заносятся в стек в нормальном порядке (см. таблицу 1).
Форматы объектных файлов в Win32.
Под Win32 используется 2 формата объектных файлов: OMF (объектно-модульный формат – используется, например, Borland C++ ) и COFF (Общий объектно-файловый формат, используется, например, Visual C++ ).
При использовании файла в формате OMF имя предиката должно совпадать с именем функции.
При использовании файла в формате COFF, к имени предиката добавляется знак подчеркивания, и после символа @ указывается количество байт, добавленных в стек (например, если предикат name имеет 2 целых аргумента, то он должен быть объявлен как _name@8 (см. таблицу 1)).
Установка указателя на стек.
Существует два способа установки указателя на стек: при объявлении функции и при ее вызове. Так сложилось, что Pascal устанавливает указатель при объявлении функции, а С – при вызове (см. таблицу 1).
|
Конвертирует имена в верхний регистр. |
Порядок аргументов прямой. |
Устанавливает указатель на стек при объявлении. |
Необходимость конвертировать имена в формат COFF. |
C |
- |
- |
- |
|
pascal |
+ |
+ |
+ |
|
stdcall |
|
+ |
- |
+ |
syscall |
|
+ |
+ |
- |
Таблица 1: вызов модулей из VP.
Неавтоматическое обозначение внешних предикатов.
Идентификатор процедуры или функции в VP не обязательно должен совпадать с идентификатором во внешнем модуле. В этом случае объявление такого предиката имеет вид:GLOBAL PREDICATES
add(integer, integer, integer) – (i,o) language c as “_myadd@12”