d9e5a92d

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


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

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

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

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

Процедура "мужчина":

мужчина (иван)

мужнина (василий)

мужчина (петр)

мужчина (федор)

мужчина (юрий)

Процедура «женщина»:

женщина (марья)
женщина (ирина)
женщина (ольга)
женщина (елена)



Процедура "родитель":

родитель (марья, иван) (читать: «Марья — родитель Ивана»)
родитель (иван, елена)
родитель (марья, василий)
родитель (федор, марья)
родитель (петр, ирина)
родитель (петр, иван)
родитель ( федор, юрий)

Процедура «мать*:

Процедура «отец*:

отец (X, Y): мужчина(Х), родитель (X, Y)

Процедура "брат":

брат (X,Y): мужчина (X), родитель (Р, X), родитель (Р, Y), XOY

Процедура «сестра»:

сестра (X, Y): женщина (X), родитель (Р, X), родитель (Р, Y),

Процедура «дядя»:

дядя (X, Y): брат (X, Р), родитель (Р, Y)

Пусть задана некоторая сложная, т.е. опирающаяся не на факт, а требующая вывода, цель (запись цели образует фрейм), с которой мы обратились к этой БЗ, например

дядя (X, Y), тогда решение (вывод) заключается в нахождении всех пар переменных (имен объектов)

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

Изложим последовательность действий.

Находим первый ( и единственный) предикат цели дядя (X, Y). Заменяем найденный предикат правой частью процедуры с этим именем, записанной в БЗ. Получим трансформированную цель — фрейм:

брат (X, Р), родитель (Р, Y).

С первым предикатом этого фрейма действуем аналогично, получаем фрейм:

мужчина (X), родитель (Q, X), родитель (Q, Р), Х<>Р, родитель (Р, Y).

При этом во избежание коллизии, развивая фрейм цели, вводим новые переменные, отличные от тех, которые уже были использованы в записях БЗ.

Вновь входим в процедуру с именем первого предиката цели и начинаем первый уровень ветвления, используя первый клоз процедуры — факт мужчина (иван). С его помощью производим первое связывание переменных, т.е. подстановку конкретного значения.

 

Предикат цели, породивший это связывание, из трансформируемой цели исключается, т.е. заменяется своей «пустой» правой частью:

родитель (Q, иван), родитель (Q, Р), иван <>Р, родитель (P,Y).

Обращаемся к процедуре "родитель", начиная второй уровень ветвления. Первый клоз этой процедуры родитель (марья, иван) определяет дальнейшее связывание переменных:

родитель (марья, Р), иван <> Р, родитель (Р, Y).

 

Вновь входим в процедуру "родитель" (третий уровень ветвления), находим клоз родитель (марья, иван). Трансформируем цель, получаем новый фрейм:

иван <> иван, родитель (иван, Y).

Возникает противоречие, т.е. унификация не проходит.

Ищем на данном шаге ветвления другой вариант связывания, находим следующий клоз:

родитель (марья, василий).

Трансформируем цель:

.иван <> василий, родитель (василий, Y)

Вновь входим в процедуру "родитель", но не находим клоза, в котором василий указан как чейлибо родитель, т.е. вновь унификация не проходит.

Реализуем стратегию поиска с ветвлением и возвращением назад — backtraking. На втором уровне ветвления исследуем клоз, в котором иван указан как сын: родитель (петр, иван). Цель трансформируется в следующий фрейм:

родитель (петр, Р), иван <> Р, родитель (Р, Y).

Вновь (на третьем уровне ветвления) обращаемся к процедуре "родитель" и выбираем первый клоз, в котором петр указан как отец —родитель (петр, ирина).

Цель трансформируется:

иван <> ирина, родитель (ирина,

Входим в процедуру "родитель", но в ней нет клоза, в котором ирина указана как родитель. Унификация не проходит.

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

Цель принимает вид (фрейм):

родитель (Q, василий), родитель (Q, Р), василий <>Р, родитель (Р, Y).

На втором уровне ветвления находим единственный клоз, в котором василий указан как сын. Цель трансформируется в соответствии с новым связыванием переменных, обусловленным найденным клозом родитель (марья, василий):

родитель (марья, Р), василий <>Р, родитель (Р; Y).

На третьем уровне ветвления находим первый среди клозов, где марья указана как родитель: родитель (марья, иван). Связываем тем самым переменные, цель трансформируется:

Василий родитель (иван, Y).

 

В процедуре «родитель» находим клоз, в котором иван указан как родитель, —родитель (иван, елена). Цель выродилась, значит:

дядя (X, Y) = дядя (василий, елена) одно из решений задачи.

 

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

В основе распараллеливания решения этой задачи лежит способ размножения вариантов на основе трансформации цели. Способ обеспечивает отсутствие backtracing'a (ветвление есть, а возврата нет), простоту процедуры вывода, возможность неограниченного использования ИЛИ параллелизма (одновременной независимой обработки многих вариантов связывания переменных), конвейерную реализацию И параллелизма (распараллеливания обработки одного варианта связывания переменных на конвейере, так как каждый раз обрабатывается лишь первый предикат каждого фрейма).

Однако представляется, что нейросетевая технология, основанная на естественном параллелизме, может оказаться эффективнее.




Содержание раздела