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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

 

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

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

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





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