Вопрос

Каковы (практические) области применения Объединение?Где это на самом деле используется в реальном мире?

Я не мог понять всей идеи о том, что это такое на самом деле и почему это рассматривается как часть искусственного интеллекта.

Это было полезно?

Решение

Объединение - это, по сути, процесс замена.Я видел, что это называется "двустороннее сопоставление".

В Prolog, на других языках логического программирования и на языках, непосредственно основанных на логике перезаписи (Мод, Элан, и т.д. ...) - это механизм, с помощью которого свободные (логические) переменные привязываются к терминам / значениям.В параллельном прологе эти переменные интерпретируются как каналы связи.

ИМО, лучший способ понять это с некоторыми примерами из математики (унификация была / является базовым ключевым механизмом, например, в контексте исследования автоматизированных доказательств теорем, подполя искусственного интеллекта;другое использование в в алгоритмы вывода типов).Приведенные ниже примеры взяты из контекста системы компьютерной алгебры (CAS):

Первый пример:

учитывая множество Q и две двоичные операции * и + над ним, тогда * является левораспределительным над +, если:

X * (Y + Z)   =   (X * Y) + (X * Z)   |1|

это - правило перезаписи (набор правил перезаписи - это система перезаписи).

Если мы хотим применить это правило перезаписи к конкретному случаю, скажем:

a * (1 + b)   |2|

мы объединить (с помощью алгоритма объединения) этот термин, |2|, с левая сторона (ЛСЗ) из |1| и мы имеем эту (тривиальную по назначению) замену (the самый общий объединитель, мгу):

{X/a, Y/1, Z/b}   |3|

Теперь, применяя |3| к правая сторона (резус - фактор) из |1|, мы имеем, наконец:

(a * 1) + (a * b)

Это было просто, и чтобы оценить, что может сделать объединение, я покажу немного более сложный пример.

Второй пример:

Учитывая это правило перезаписи:

log(X,Y) + log(X,Z)   =>   log(X,Y*Z)   |4|

мы применяем его к этому уравнению:

log(e,(x+1)) + log(e,(x-1)) = k   |5|

(ЛСЗ из |5| объединить в ЛСЗ из |4|), таким образом, мы имеем это мгу:

{X/e, Y/(x+1), Z/(x-1)}   |6|

Обратите внимание, что X и x - это две разные переменные.Здесь у нас есть две переменные, X и Y, которые соответствуют двум сложные термины, (x+1) и (x-1), а не простые значения или переменные.

Мы применяем это мгу, |6|, к резус - фактор из | 4 | затем и мы помещаем обратно это в | 5 |;итак, у нас есть:

log(e,(x+1)*(x-1)) = k   |7|

и так далее.

(Надеюсь, я не допустил никакой ошибки, иначе это может еще больше запутать неофитов.)

Другие советы

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

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

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

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

Другая простая форма унификации - это когда вы используете регулярное выражение для сопоставления, например, в командной строке вы можете сказать dir x*y*.z* который будет соответствовать некоторым, но не всем именам файлов.

Искусственный интеллект любит использовать механизмы вывода, пытаясь имитировать рассуждения на основе совокупности знаний, обычно в форме логических утверждений.Чтобы привести глупый пример, вы могли бы "знать", что "все люди смертны", как в forall(x)(man(x) implies mortal(x)).Тогда, если вы зададите вопрос "смертен ли Сэм", как mortal(Sam)?, вы могли бы объединить это с правилом, чтобы получить новый вопрос "является ли Сэм мужчиной". man(Sam)?

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top