Экспертные системы: как реализовать преобразователь обратной цепочки в Python
Обоснование вывода с использованием Python
Экспертная система - это инструмент, способный воспроизводить когнитивные механизмы. Он способен разрешать запросы на основе набора известных фактов и правил. Эта система вычетов полезна для принятия решений или когда вы хотите что-то доказать. Это один из путей, ведущих к системам искусственного интеллекта.
Эта статья даст вам основные понятия о том, как можно решить подобную систему. В конце концов, вы сможете реализовать собственный обратный преобразователь 😊.
Экспертная система
Правила
Сначала система получает набор правил. Правила - это уравнения, сочетающие facts
с connectors
. Facts
в этом случае представлены прописными буквами, а connectors
может быть одним из:
&
: И - все операнды должны бытьTrue
.|
: ИЛИ -True
должен быть только один операнд.^
: XOR - один операнд должен бытьTrue
, а другойFalse
.=>
: IMPLY - Если левая сторона равнаTrue
, то правая сторона должна бытьTrue
.
Таблица истинности вывода
В этой таблице описана логика вывода. Например, в p => q
, если левая часть равна false
, мы ничего не можем сказать о правой части, потому что это может быть либо false
, либо true
. Если левая часть равна true
, тогда правая часть должна быть true
, иначе это значение неверно.
Факты и запросы
Факты обозначаются заглавными буквами. Мы скажем, что по умолчанию все факты false
. Факт может стать правдой, если он входит в набор исходных фактов (с использованием декларации =XXX
) или путем вывода из правил.
Искомые запросы объявляются с использованием нотации ?XXX
.
Реализация резольвера
Прямая и обратная цепочка
Решить экспертную систему можно двумя способами:
- Прямая цепочка. Мы исходим из фактов и вычитаем результат.
- Обратная цепочка. Мы работаем в обратном направлении, от гипотез к фактам.
Эта статья будет посвящена только обратному преобразователю. Решатель будет использовать ту же структуру, что и график первого изображения. Каждый элемент на графике называется Node
. Существует 2 подтипа узлов:
AtomNode
, например A, B или C.ConnectorNode:
дляAND
,XOR
,OR
иIMPLY
Вот почему Python, кажется, лучше всего подходит благодаря своей простоте и объектно-ориентированным свойствам.
Структура данных
Node класс
Узлы - самые важные элементы графа. Они обрабатывают логику и сохраняют свои состояния. Они связаны между собой списком children
. Если мы знаем значение дочернего элемента, мы можем вычесть значение родительского элемента. Например, для правила A => B
, A
является дочерним по отношению к =>
дочернему элементу B
. Если A
истинно, то мы вычитаем B
истинно.
Все подклассы AtomNode
и ConnectorNode
наследуются от этого класса.
AtomNode класс
ConnectorNode класс
Резольвер
Шаг 1 - Создайте список уникальных атомов
Первый шаг состоит в анализе ввода и создании уникального списка atoms
. Это означает, что одна и та же буква в разных правилах всегда будет указывать на один и тот же AtomNode
экземпляр.
Шаг 2. Создайте RPN-представление всех правил
RPN - обратная польская нотация
Нотация обратной полировки дает однозначный способ писать арифметические формулы без использования круглых скобок.
У этой техники много преимуществ:
- Сохраняет порядок операндов
- Вы читаете это слева направо
- Операнды, предшествующие оператору, и операнд исчезает, чтобы заменить его вычисленным значением.
Шаг 3 - Создайте отношения между узлами
Шаг 4. Решите вопросы
Надеюсь, я дал вам лучшее представление о том, как работает подобная система. Если вы хотите получить доступ к полной реализации Python, я связал свой репозиторий ниже 😊.
Я открываю новый сайт под названием myopen.market. Он все еще находится на начальной стадии, но если вы сочли эту статью полезной, подписка на ее рассылку будет лучшим способом воодушевить меня ❤️