Автоматизация решения плохо формализуемых задач на ЭВМ: непроцедурные подходы.

В число основных компонентов интеллектуального интерфейса между поль­зователем и ЭВМ входят решатели задач, позволяющие конечным пользователям решать прикладные задачи при минимальном объеме знаний о программировании. Эти задачи, как правило, плохо формализуемы, т. е. отсутству­ют строгие аналитические методы их решения, и человек обычно использует интуитивные представления, эмпири­ческие правила и эвристические соображения.

Работы в области создания решателей, реализующих некоторую формализованную схему рассуждений при том или ином способе представления знаний, ведутся активно и в нашей стране, и за рубежом. Они особенно активизи­ровались в связи с реализацией в различных странах проектов ЭВМ пятого поколения. Разработка решателей - одно из мало проработанных звеньев этих проектов.

В настоящем разделе рассматриваются перспективные подходы к построению решателей задач конечного поль­зователя.

Логическое программирование

К дедуктивным подходам относится прежде всего ло­гическое программирование, в котором для представления знаний используется формальный аппарат исчисления предикатов первого порядка и его расширения.

Под исчислением (или дедуктивной системой) понимается си­стема, в которой существует некоторое число исходных объектов (аксиом) и некоторое число правил построения (правил вывода) новых объектов из исходных и уже по­строенных.

При этом в исчислениях (в отличие от алго­ритмов) порядок применения правил вывода может быть произвольным. Можно считать, что исчисление предика­тов является расширением классического исчисления высказываний, в котором высказывание рассматривается как единое целое, не обладающее внутренней структурой, а истинность или ложность высказывания фиксирована. В исчислении предикатов основным объектом является переменное высказывание (предикат), истинность или ложность которого зависит от значений входящих в него переменных. Так, истинность предиката

«х был физиком»

зависит от значения переменной х. Если х - это П. Капи­ца, то предикат истинен, если х - М. Лермонтов, то он ложен.

Для обозначения области значений переменных в ис­числении предикатов используются два квантора:

" - квантор всеобщности ;

$ - квантор существования .

Тогда утверждение

"х Р (х)

читается так: «для всех х имеет место Р (х)»,

а утверждение

$x Q (х)

как «су­ществует х такое, что Q (х)», где Р (х) и Q (х) — пре­дикаты.

В исчислении как высказываний, так и предика­тов существует еще одно понятие - формула.

В исчислении высказываний формулы строятся индуктивным способом, используя логические связи:

& - конъюнкция,

V - дизъюнкция,

® - имплика­ция),

ù (отрицание).

Исчисление предикатов включает в себя все формулы исчисления высказываний, а также формулы, содержащие кроме символов высказываний предикатные символы с кванторами. Например, утверждение

" x (Р (х) ® Q(x)

читается так: : «для любого х если Р(х), то имеет место и Q(x)».

Выделенное подмножество тож­дественно истинных формул, истинность которых не за­висит от истинности входящих в них высказываний, называется

аксиомами.

В исчислении предикатов имеется множество правил вывода. В качестве примера приведем классическое правило modus ponens:, которое читается так::

«если истинна формула А и истинно, что из А следует В, то истинна формула В».

Это правило вывода формализует основной закон дедуктивных систем: из истинных посылок всегда следуют истинные заключения. Аксиомы и правила вывода исчисления предикатов первого порядка задают основу формальной дедуктивной системы, в которой про­исходит формализация схемы рассуждения в логическом программировании.

Решаемая задача представляется в виде утверждений (аксиом) F1, F2, ..., Fn исчисления пре­дикатов первого порядка. Цель задачи В также записы­вается в виде утверждения, справедливость которого следует установить или опровергнуть на основании ак­сиом и правил вывода формальной системы. Тогда реше­ние задачи (достижение цели задачи) сводится к выяс­нению логического следования (выводимости) целевой формулы В из заданного множества формул (аксиом)

F1, F2, ..., Fn. Такое выяснение равносильно доказательству общезначности (тождественно-истинности) формулы

F1& F2& ... &Fn ®B

или невыполнимости (тождественно-ложности) формулы

F1& F2& ... &Fn ®ù B

3.2. Принцип резолюций

Из практических соображений удобнее использовать доказательство от противного, т. е. доказывать невыпол­нимость формулы. На доказательстве от противного осно­вано и ведущее правило вывода, используемое в логи­ческом программировании, - принцип резолюций. При использовании его формулы исчисления пре­дикатов с помощью несложных преобразований при­водятся к так называемой дизъюнктивной форме, т. е. представляются в виде набора дизъюнктов.

под дизъюнктом понимается дизъюнкция литералов, каждый из которых является либо предикатом, либо отрицанием предиката.

Приведем пример дизъюнкта:

(" x) (Р (х, с1) V ù Q (х,с2)). (3.1)

Пусть предикат Р - уважать, предикат Q - знать, константа с1- Ключевский, а константа с2 - история. Тогда выражение (3.1) перепишется:

(" x) (уважать (х, Ключевский) V ù знать (х, история)). (3.2)

Дизъюнкты, используемые в логическом программиро­вании, можно упростить следующим образом: кванторы всеобщности опустить, предикаты переписать в бес

ско­бочном виде, а связку V ù заменить на импликацию (®) или слово «если». Тогда выражение (3.2) примет та­кой вид:

х уважать Ключевский, если х знать историю,

что читается так: «каждый, кто знает историю, уважает Ключевского». Кроме того, дизъюнкты, все литералы ко­торых отрицательны, обычно переписываются в эквива­лентную форму отрицательной конъюнкции. Например, формула

(" x) ( ù Р (х, с1) V ù Р (х,с2))

перепишется в виде

(" x) ù (Р (х, с1) & Р (х,с2)) (3.3)

Если в формуле (3.3) принять, что предикат Р - это «знать», а константы с1 и с2 — это «физика» и «история» соответственно, то получим

(" x) ù (знать (х, физика) & знать (х, история)). (3.4)

Выражение (3.4) в упрощенном виде можно перепи­сать как

? х знать физика & х знать история (3.4 а)

и прочитать как запрос: «кто знает физику и историю одновременно?».

Таким образом, и условия решаемых задач (факты), и целевые утверждения задач (запросы) можно выразить в дизъюнктивной форме логики предикатов первого порядка.

Вернемся к принципу резолюции. Главная идея этого правила вывода заключается в проверке того, содержит ли множество дизъюнктов R пустой (ложный) дизъюнкт l. При положительном ответе множество R (и соответствующая ему формула) невыполнимо (проти­воречиво). При отрицательном ответе выводятся новые дизъюнкты до тех пор, пока не будет получен пустой дизъюнкт, что всегда будет иметь место для противоречи­вого R. Таким образом, принцип резолюции можно рас­сматривать как правило вывода, с помощью которого порождаются новые дизъюнкты из R. В общем случае каждый шаг резолюции начинается с некоторой пары дизъюнктов (предков) такой, что некоторый литерал А в одном из дизъюнктов должен быть сделан дополнитель­ным литералу В другого дизъюнкта из пары. Заметим, что дополнительными называются литералы А и ù А. Чтобы сделать литералы А и В дополнительными, необходимо провести их унификацию, т. е. сделать их идентичными с помощью некоторой подстановки q, называемой унифика­тором: А q = В q. Тогда говорят, что два выбранных литерала резольвируют. Затем с помощью правила ре­золюции выводится новый дизъюнкт - резольвента - следующим образом. Литералы дизъюнктов-предков, за исключением тех, которые резольвировали, объединяются и к результату применяется подстановка q.

Приведем пример:

первый предок (дизъюнкт): ù Петр уважает у

второй предок (дизъюнкт): х уважает Ивана, если отец (Иван)

уважает х

резольвирующие литералы: то, что подчеркнуто

унификатор: q = (х:=Петр, у: = Иван)

резольвента: ù отец (Иван) уважает Петр

Последнее утверждение (резольвента) читается как «отец Ивана ува­жает Петра?»

Правило резолюции обладает свойством полноты в том смысле, что с помощью него всегда можно найти пу­стой дизъюнкт, если исходное множество дизъюнктов R противоречиво. Однако вследствие неразрешимости логи­ки предикатов первого порядка для выполнимого (не­противоречивого) множества дизъюнктов процедура, ос­нованная на принципе резолюции, может работать бес­конечно долго.

Обычно резолюция применяется алогическом програм­мировании в совокупности с прямым или обратным ме­тодом рассуждения. Прямой метод (от посылок) из посылок А, А ® В выводит заключение В (правило modus ponens). Основной недостаток прямого метода рас­суждения состоит в его ненаправленности: повторные применения метода обычно приводят к резкому росту про­межуточных заключений, не связанных с целевым заклю­чением.

Обратный метод (от цели) является направ­ленным: из желаемого заключения В и тех же посылок он выводит новое подцелевое заключение А. Каждый шаг вывода в этом случае всегда связан с первоначально поставленной целью. Для использования правила резо­люции необходимо, чтобы доказательство того, что данная посылка А влечет желаемое (целевое) заключение С, было переформулировано в утверждение, что А несовмес­тимо с ùС. Например, чтобы доказать утверждение Р из посылок Q, Q ® Р, обратное рассуждение с помощью пра­вила резолюции выводит ù Q (из ù Р и Q ® Р), а затем выводит пустой дизъюнкт (опровержение) (из ù Q и Q).

Модифицированный принцип резолюций

Существенный недостаток принципа резолюции заклю­чается в формировании на каждом шаге вывода множест­ва резольвент - новых дизъюнктов, большинство из которых оказываются лишними. В связи с этим разра­ботаны различные модификации принципа резолюции, использующие более эффективные стратегии поиска и различного рода ограничения на вид исходных дизъюнк­тов. В этом смысле наиболее удачной и популярной си­стемой является система ПРОЛОГ, которая использует специальные виды дизъюнктов, называемые дизъюнктами Хорна. Кратко рассмотрим эту систему, тем более что под логическим программированием в узком смысле слова обычно понимают программирование на языке ПРОЛОГ (PROgramming in LOGic).

дизъюнктами Хорна являются дизъ­юнкты, имеющие не более одного положительного лите­рала.

Они могут быть трех типов:

(1) допущениями без условий (или фак­тами)

В (t)

Например, Иван нравится история

(2) условными допущениями (или импли­кациями) - правилами

B (t) V ù A1 (t)V ù A2(t) V ù:V ... ùAn(t),

или в эквивалентной форме

B (t) ¬ A1 (t) & A2 (t) & ... & An (t),

Например, Петр уважает х, если х нравится логика & Петр знает х;

(3) отрицаниями

ù С1(t) V ù C2 (t) V ù ... V ù Ck (t) или

ù С1(t) & C2 (t) &... & Ck (t)

Например, ù (х нравится логика & х нравится мате­матика).

Для реализации очень важен тот факт, что дизъюнкты Хорна обладают простой процедурной интерпретацией. Дизъюнкты типа (1) и (2) интерпретируются как процеду­ры, а типа (3) - как целевые утверждения. Так, дизъюнкт типа (2) интерпретируется как процедура с заголовком B (t), телом которой является вызов процедур A1 (t), A2 (t), ...,

An (t), а дизъюнкт типа (3) — как последова­тельность вызовов процедур С1(t), C2 (t),..., Ck г.*. Тогда каждый шаг обратного рассуждения есть управление вызовом процедуры, которое начинается с выделения вызова некоторой процедуры Ci {t) из текущей цели. За­тем выделяется некоторая процедура, заголовок которой (положительный литерал, например B (t) в выражении (2)) унифицируется с помощью некоторой подстановки q с выбранным вызовом Ci {t) . Далее выделяется тело про­цедуры (в данном примере B (t)), представляющее собой, в свою очередь, последовательность вызова других про­цедур (в данном примере A1 (t), A2 (t), ..., An (t)). Унифи­катор q применяется к результату. Процесс итеративно повторяется. Аргументы литералов (предикатов) соответ­ствуют параметрам вызванных процедур. Унификация интерпретируется как связь данных между вызовами и процедурами .

Процесс доказательства (или вычисления) целевого утверждения S в общем случае можно представить сле­дующим образом.

Пусть целевое утверждение S имеет вид

¬ С1, ..., Сj, ..., Ck

и в нем выделен литерал Сj, и пусть существует правило

Г = В ¬ A1, А2, ..., А n.

Тогда если q-унификатор для ли­тералов Сj и В, то говорят, что подцель S/ = ¬q ( С1, ..., Сj-1, A1, .... An, В, Cj+1, ..., Сl)

выводится из S с помощью правила Г и подстановки q.

Получение S/ из S является элементарным шагом в языке ПРОЛОГ. Он может завершиться и неудачей, так как может не существовать унификатора для Сj и В.

Выводом (вычислением) целевого утверждения S назы­вается последовательность промежуточных подцелей S1, S2, ..., S m такая, что Si = S и Si+1 выводима из S.

Если из подцели Sm невыводима ни одна подцель, то вычисление считается конечным. При этом если Sm - не пустой дизъюнкт, то вывод является тупиковым, а если Sm - пустой дизъюнкт, то вывод является успешным и с ним связывается подстановка

q = qm-1, qm-2, ..., q2, q1,

где qi - подстановка, с помощью которой выводима подцель Si+1 из S.

Вывод цели удобно представлять в виде дерева И/ИЛИ с корнем в целевой вершине. Напомним, что под дере­вом понимается графовая структура (т. е. структура, кото­рую можно изобразить в виде вершин и связей), любые вершины-потомки которой имеют не более одной верши­ны-предка. Вершине типа И дерева соответствует конъюнк­ция условий некоторого правила (т. е. A1, А2, ... , А n), вершине типа ИЛИ соответствует вариант, когда к одному и тому же заключению (резольвенте) приводят различ­ные правила.

В любой системе логического программирования, в том числе и в системе ПРОЛОГ, реализуется некоторая стратегия обхода дерева поиска, т. е. используется та или иная встроенная в систему стратегия поиска решения задачи. В основном эти стратегии имеют последователь­ный характер. В последнее время начинают появляться реализации стратегий параллельного типа. Они резко повышают эффективность систем логического программи­рования.

Наиболее распространенной стратегией после­довательного типа является стратегия «сначала в глубину». При этом дерево поиска упорядочивается с помощью двух линейных порядков: «слева направо» для литералов цели типа (3) и «сверху вниз» для правил типа (1), (2). Тогда на каждом шаге поиска выделенным оказывается первый слева литерал цели и к нему приме­няется первое сверху правило. При этом запоминаются всевозможные разветвления. Если поиск заходит в тупик, то происходит возврат к месту последнего разветвления с помощью механизма backtracking. Одновременно отме­няются результаты всех подстановок, сделанных после это­го разветвления. Возврат осуществляется также и при ус­пешном исходе для получения других ответов. Работа за­канчивается, когда список разветвлений пуст.

Основное достоинство этой стратегии - простота ее реализации, недостаток - большой перебор для некоторых классов подцелей. Кроме того, если дерево поиска содержит бес­конечную ветвь, то попав в нее, система не выйдет оттуда и правильные ответы, находящиеся правее этой цели на дереве, не будут получены.

При стратегии «сначала в ширину» дерево поиска обходится ярус за ярусом сверху вниз. Она гарантирует нахождение решения, если оно существует. Однако стра­тегия требует значительно большего объема памяти и по­этому получила сравнительно небольшое распространение.

Одно из достоинств языков логического программиро­вания состоит в том, что на их основе достаточно удобно реализовать стратегии параллельного типа, причем порядок обхода дерева не столь важен; существен лишь тот факт, что должно быть обойдено все дерево. Именно последнее обстоятельство и дает принципиальную возможность вести поиск параллельно. Обычно различают два типа параллелизма: ИЛИ -параллелизм, означающий одновременное применение для выделенной подцели из цели всех правил из базы знаний, и И -параллелизм, означающий параллельную обработку одновременно всех литералов (подцелей) целевого утверждения. Кроме того, параллелизм возможен и необходим при унификации (так как эта операция применяется часто). Наибольшие перспективы имеют именно параллельные стратегии, но для их эффективной реализации необходимы соответствующие процессоры, использующие принципы параллельной архи­тектуры.

Предлагаю ознакомиться с аналогичными статьями: