Быстрый старт для решения собственных классических задач ИИ
В последнее время большое внимание средств массовой информации уделяется новым технологиям искусственного интеллекта, таким как глубокое обучение и обещание квантовых вычислений для сложных задач оптимизации. [1] В этой среде легко упустить из виду более приземленные достижения в решении обычных задач искусственного интеллекта. Усовершенствования символических языков ИИ, дизайна ЦП и параллельной обработки продолжают давать новую жизнь старым алгоритмам ИИ. Старый добрый ИИ, как его часто называют, по-прежнему остается основным подходом к решению большинства практических задач, требующих эффективного сочетания базовых знаний с вычислительной эффективностью.
В этой статье описывается программа (под названием «Wouldwork»), которую каждый может использовать для решения традиционных задач ИИ небольшого размера на своем компьютере. В отличие от более новых технологий искусственного интеллекта, он не требует сложного аппаратного или программного обеспечения, хотя для решения больших задач полезен обычный многоядерный процессор.
Задачи указаны в формате, похожем на английский, и программа использует спецификацию для поиска целевого условия из заданного начального состояния. Предполагается некоторое знание программирования, однако большая часть спецификации задачи следует заданному шаблону. Большая часть работы заключается в составлении точного (и, возможно, умного) описания проблемы, которую вы пытаетесь решить. Примеры традиционных задач ИИ включают поиск в пространстве состояний, планирование, удовлетворение ограничений и состязательные игры.
Чтобы дать представление о работе «Wouldwork», рассмотрим робота, которому нужно добраться до определенного места в сложной среде. На следующем рисунке показана компоновка.

Цель состоит в том, чтобы перейти из области 1 в область 4, размещая коробки на нажимных пластинах, которые открывают соответствующие ворота. Спецификация задачи будет включать в себя объекты (например, коробки, пластины, ворота, области), свойства и отношения (местоположение объектов, связь между воротами и областью, коробки на пластинах и т. д.), а также начальные условия и цель. В нем также будут указаны допустимые действия, которые может выполнять робот (переместиться в новую область, если ворота открыты, поднять коробку, поставить коробку на прижимную пластину и т. д.).
Затем будет пытаться найти оптимальную (или, при желании, всевозможную) последовательность действий для достижения цели. Если вам нравится решать проблемы, вы можете лучше понять стратегию «Wouldwork», разработав решение для себя. (Первое действие должно быть pickup box1.)
В этом простом случае оптимальная последовательность необходимых действий состоит всего из 10 шагов, основанных на анализе всего 50 возможных шагов. Но в более сложных средах «Wouldwork» может рассмотреть миллионы возможностей и, в конце концов, найти одну пресловутую иголку в стоге сена, которая решит проблему.
Надеемся, что это краткое введение предоставит достаточно информации, чтобы начать решать ваши собственные старомодные проблемы с ИИ, какими бы они ни были. Вы можете скачать Wouldwork с https://github.com/davypough/wouldwork, который включает в себя ряд традиционных спецификаций задач ИИ и их решения. Существует также подробное руководство пользователя, объясняющее детали того, как написать правильное описание проблемы.
Чтобы настроить свою вычислительную среду для использования Shouldwork, вам необходимо сначала загрузить и установить SBCL для вашей платформы с http://www.sbcl.org/platform-table.html, загрузить Quicklisp с https://www. quicklisp.org/beta/, запустите sbcl.exe и загрузите Quicklisp с помощью (загрузите quicklisp.lisp), а затем загрузите Willwork, как описано в руководстве пользователя. Не стесняйтесь, пишите мне на [email protected], если у вас есть дополнительные вопросы. Получайте удовольствие, изучая собственные решения для искусственного интеллекта!
[1] Так называемая сложная задача (также известная как NP-полная задача) — это задача, которую в настоящее время нельзя решить с помощью полиномиального алгоритма.