Экспертные системы: как реализовать преобразователь обратной цепочки в 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. Он все еще находится на начальной стадии, но если вы сочли эту статью полезной, подписка на ее рассылку будет лучшим способом воодушевить меня ❤️