Шаг 53.
Парадигмы программирования в задачах искуственного интеллекта

    На этом шаге мы рассмотрим парадигмы программирования, применяемые в задачах искусственного интеллекта.

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

    Среди языков программирования искусственного интеллекта ведущее место занимают LISP и PROLOG. В США и в Японии несмотря на широко известный проект создания компьютеров пятого поколения, где декларировалось использование языка PROLOG, доминирует LISP, в Европе предпочтение отдается языку PROLOG. Эти языки - классические представители декларативного ( PROLOG) и функционального (LISP) подходов к программированию. В процессе исследований в области искусственного интеллекта возникали новые подходы и языки. Однако к настоящему времени лишь немногие из этих языков получили хотя бы ограниченное распространение - сюда можно отнести POP, Tablog, LOGO, LogLisp, SNOBOL, Рефал. Утвердиться на рынке смогли пока лишь PROLOG, LISP и в некоторой степени OPS5.

    LISP (а вернее, его современные диалекты) - не единственный язык, используемый для задач искусственного интеллекта.

    Например,  POP-2 - язык программирования, разработанный в Эдинбургском университете (Великобритания) с ориентацией на исследования в области искусственного интеллекта. POP-2 представляет возможности для манипулирования связанными структурами данных - так же как язык LISP, но имеет более простую структуру процедур, поэтому он стал более доступным для программистов, работавших ранее с языком ALGOL.

    Уже в середине 60-х годов, т.е. на этапе становления языка LISP, разрабатывались языки, предлагающие другие концептуальные основы. Наиболее важными из них в области обработки символьной информации являются SNOBOL, разработанный в лаборатории Белла, и Рефал, созданный в ИПМ АН СССР.

    Язык SNOBOL - язык обработки строк, в рамках которого впервые появилась и была реализована в достаточно полной мере концепция поиска по образцу. Язык SNOBOL был одной из первых практических реализаций развитой продукционной системы. Наиболее известная и интересная версия этого языка - SNOBOL-IV. Здесь техника задания образцов и работа с ними существенно опередили потребности практики. Может быть, именно это, а также политика активного внедрения языка LISP помешали широкому использованию языка SNOBOL в области искусственного интеллекта. По существу, он так и остался "фирменным" языком программирования, хотя концепции языка SNOBOL, безусловно оказали влияние и на LISP, и на другие языки программирования задач искусственного интеллекта.

    В основу языка Рефал положено понятие рекурсивной функции, определенной на множестве произвольных символьных выражений. При обработке символов активно используется концепция поиска по образцу, характерная для языка SNOBOL. Таким образом, Рефал вобрал в себя лучшие черты наиболее интересных языков обработки символьной информации 60-х годов. В настоящее время язык Рефал-5 используется для автоматизации построения трансляторов, систем автоматических преобразований, а также, подобно языку LISP, в качестве инструментальной среды для реализации языков представления знаний.

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

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

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

    Таким образом, современный этап программирования интеллектуальных систем характеризуется тенденцией смешанного использования разных парадигм.

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

  1. Можно предположить, что LISP еще значительное время будет оставаться основным языком для реализации интеллектуальных систем.
  2. Уже в ближайшее время можно ожидать появления языков, вобравших в себя лучшие черты языка LISP и, например, PROLOG.
  3. Наблюдается явная тенденция к созданию параллельных версий языков обработки символьной информации и языков для программирования задач искусственного интеллекта.
  4. По-видимому, наиболее быстрыми темпами в разработку систем, основанных на знаниях, будет входить объектно- ориентированная парадигма и, как следствие, языки типа Smalltalk. Вместе с тем можно предположить, что LISP (как это уже было в прошлом) попытается совершить еще одну мутацию и за счет этого вернуть лидирующие позиции.
  5. Языки типа LISP, PROLOG, Рефал (а также всевозможные модификации и "смеси" этих и(или) других языков символьной обработки) будут все больше уступать свои позиции на уровне инженеров по знаниям специальным языкам представления знаний, оставаясь инструментарием системных программистов.



(1)Искусственный интеллект: - В 3-х кн. Кн.3. Программные и аппаратные средства: Справочник / Под ред В.Н.Захарова, В.Ф.Хорошевского. - М.: Радио и связь, 1990. - 368 с.


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




Предыдущий шаг Содержание Следующий шаг