Архитектура, управляемая шаблонами
В данном разделе под системами, управляемыми шаблонами, подразумевается одна из разновидностей архитектур для программных систем. Такая архитектура в большей степени подходит для решения задач определенных типов, чем системы, организованные обычным образом. К числу задач, которые естественным образом укладываются в рамки архитектуры, управляемой шаблонами, относятся многие приложения искусственного интеллекта, например экспертные системы. Основное различие между обычными системами и системами, управляемыми шаблонами, заключается в использовании разных механизмов вызова программных модулей. При обычной организации программы модули системы вызывают друг друга в соответствии с фиксированной, явной, заранее определенной схемой. В каждом модуле программы принимается решение о том, какой модуль должен быть выполнен следующим, путем явного вызова других модулей. В соответствии с этим поток выполнения является последовательным и детерминированным.
В противоположность этому при использовании организации программы, управляемой шаблонами, модули системы не вызываются явно другими модулями. Вместо этого их вызов осуществляется при обнаружении шаблонов, которые встречаются в их "среде определения данных". Поэтому такие модули и называются модулями, управляемыми шаблонами. Программа, управляемая шаблонами, представляет собой коллекцию модулей, управляемых шаблонами. Каждый модуль определен с помощью следующих компонентов.
1. Шаблон предварительного условия.
2. Действие, которое должно быть выполнено, если среда определения данных согласуется с этим шаблоном.
Операции вызова на выполнение модулей программы активизируются шаблонами, которые обнаруживаются в среде системы. Среда определения данных обычно именуется базой данных. Такая система условно изображена на рис. 23.2,
Среда □пределен денных |
Рис. 23.2. Система, управляемая шаблонами. В виде прямоугольников показаны модули, управляемые шаблонами, а стрелки по-называют, как активизируются модули при обнаружении шаблонов о данных
576 Часть II. Применение рзыка Prolog e области искусственного интеллекта
Изучение среды, показанной на рис. 23.2, позволяет сделать некоторые важные выводы. В этой системе не определена иерархия модулей и не даны явные указания на то, какие модули могут вызываться другими модулями. Модули скорее взаимодействуют с базой данных, а не непосредственно с другими модулями. Сама эта структура в принципе допускает возможность параллельного выполнения нескольких модулей, поскольку состояние базы данных может одновременно удовлетворять нескольким предварительным условиям и поэтому активизировать сразу несколько модулей. Следовательно, такая организация может также служить естественной моделью параллельного вычисления, в которой каждый модуль физически реализован с помощью отдельного процессора.
Архитектура, управляемая шаблонами, имеет несколько преимуществ. Одно из основных преимуществ состоит в том, что при проектировании системы не требуется заранее тщательно планировать и определять все связи между модулями. Поэтому возникает возможность проектировать и реализовывать каждый модуль относительно автономно. Благодаря этому обеспечивается весьма высокая степень модульности. Преимущество такой модульности выражается, например, в том, что удаление некоторого модуля из системы не обязательно приводит к фатальным последствиям. После их удаления система сохраняет способность решать свои задачи, но способ решения этих задач может стать иным. Это утверждение остается справедливым также в отношении добавления новых модулей и модификации существующих. Если аналогичные модификации проводятся в системах с обычной организацией, то возникает необходимость, по меньшей мере, модифицировать соответствующим образом вызовы между модулями.
Высокая степень модульности особенно желательна при создании систем со сложными базами знаний, поскольку невозможно заранее предвидеть все способы взаимодействия отдельных фрагментов знаний в этой базе. Архитектура, управляемая шаблонами, предоставляет наиболее приемлемое решение этой задачи: каждый фрагмент знаний, представленный в виде правила импликации, может рассматриваться как отдельный модуль, управляемый шаблонами.
Рассмотрим дополнительное уточнение основной схемы функционирования систем, управляемых шаблонами, с точки зрения их реализации. Изучение схемы, приведенной на рис. 23.2, позволяет сделать вывод, что для таких систем наиболее подходящей является параллельная реализация. Но предположим, что такая система должна быть реализована на обычном последовательном процессоре, В таком случае при возникновении ситуации одновременной активизации в базе данных шаблонов нескольких модулей возникает конфликт, связанный с определением того, какой из всех этих потенциально активных модулей должен быть фактически вызван на выполнение. Такое множество потенциально активных модулей называется конфликтным множеством. Для фактической реализации схемы (см. рис. 23.2) на последовательном процессоре требуется дополнительный программный модуль, называемый управляющим модулем. Управляющий модуль разрешает конфликт, выбирая и активизируя только один модуль из конфликтного множества. Процедура разрешения конфликтов может быть основана на простом правиле, которое предусматривает заранее определенное, постоянное упорядочение модулей.
Таким образом, основной жизненный цикл систем, управляемых шаблонами, состоит из трех описанных ниже этапов.
1. Сопоставление с шаблоном. Найти в базе данных все вхождения шаблонов условия вызова программных модулей, что влечет за собой формирование конфликтного множества.
2. Разрешение конфликта. Выбрать один из модулей в конфликтном множестве.
3. Выполнение. Вызвать на выполнение модуль, который был выбран на этапе 2.
Такая схема реализации показана на рис, 23.3.
Глава 23. Метапрограммирование
Конфликтное множество
Модуль 1 Условие 1