Рыба или удочка?

В качестве картинки для привлечения внимания — фотография «Дети из Революционных училищ и дошкольники получили от Ким Чен Ына в подарок деликатесные виды рыб» из сегодняшней записи [info]juche_songun.

kimfish

А сама запись будет посвящена еще одной дискуссии на тему, «что лучше — рыба или удочка», в которой я поучаствовал в Твиттере. Речь шла про язык программирования Prolog и его изучение. Я посоветовал не тратить время на изучение конкретного инструмента, а посмотреть какие-нибудь хорошие книги по Good Old-Fashioned AI, то есть всяким экспертным системам и тому подобным вещам. Почему? Лично я считаю Prolog попыткой сделать универсальный язык для тех задач, которые относили к «искуственному интеллекту» в 80-х годах. Основа Prolog — это система логического вывода, которая в том или ином виде присутствует во всех системах доказательства теорем, экспертных системах, системах поддержки принятия решений и всей остальной чуши, которую считали AI в 70-х годах.

Казалось бы, решение простое и логичное — если логический вывод присутствует во всех подобных системах, то почему бы не сделать один универсальный язык, позволяющий описывать утверждения и правила вывода? Как мне кажется, такой «абсолютно универсальный» язык — это страшный overkill. Если для решения какой-то задачи так уж необходим логический вывод, то реализация «своей» аналогичной системы не так уж и сложна — например, в SICP в одной из глав рассматривается простой интерпретатор прологоподобного языка. Еще более простые примеры приведены в Principles of Artificial Intelligence Programming Питера Норвига. С моей точки зрения, гораздо более полезным оказывается умение делать такие интерпретаторы, чем использование «данного свыше» готового Prolog.

Почему? Само по себе существование огромного количества разных «систем логического вывода» подсказывает, что специфика разных задач требует и разных подходов. Где-то нужен прямой логический вывод, а где-то обратный. Где-то надо использовать нечеткую логику, где-то возникают специфические требования к производительности. Использование одного лишь Prolog приводит к тому, что разные задачи «подгоняются» под один метод решения, в то время как полезным может оказаться «индивидуальный подход».

Как пример такого «индивидуального подхода» могу привести одну задачу, с которой я недавно столкнулся. Для одной геоинформационной системы потребовалось выводить на карту зоны, в которых необходимо предпринять какие-то действия, описанные в ведомственных инструкциях. Инструкции примерно такие: «если уровень радиации превысил 38 попугаев, то тут зона безвозратных потерь, всем присвоить ГСС посмертно». Логическое программирование — это общепринятый способ для машинного представления подобного рода инструкций. В чем же проблема? Речь идет не об отдельных точках, а об областях на карте. Ни одна готовая система не предполагает работы с картографическими данными, особенно если речь идет о разработках на ГИС-ядре нашего, родного, исконно-посконного КБ «Панорама».

Что же можно сделать в данном случае? В книжке Норвига описана система EMYCIN, в которой допускается работа с «неточными» данными. Каждому утверждению присваивается «показатель уверенности» (confidence factor, CF) — число от 1 до -1. 1 соответствует полной уверенности в истинности утверждения, -1 — уверенности в его ложности, 0 — «не знаю». Дробные значения — это утверждения, относительно истинности которых имеются сомнения. Операциям «И» и «ИЛИ» над утверждениями соответствуют операции с показателями уверенности, которые позволяют приписать такой же показатель и логическим следствиям исходных утверждений. На самом деле все довольно просто и понятно, если кто-то этим интересуется, то очень советую скачать книжку, поставить интерпретатор Common Lisp и погонять примеры.

Естественно, что в роли CF могут выступать не только числа. В описанной выше задаче в их качестве оказалось удобно взять области на карте. Операции «И» соответствует объединение областей, «ИЛИ» — пересечение. В результате получилась система, в которой всякому утверждению обязательно соответствует область на карте, где оно выполнено — и на запрос «А где уже получилась безжизненная пустыня?» система радостно закрасит на карте нужную область.

На этой, можно сказать, оптимистической ноте я бы хотел пригласить в комменты желающих убедить меня в том, что использование Prolog быстрее приближает ядерный апокалипсис :)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *