FuzzyAdvisor – простая экспертная система с нечеткой логикой на F#

ОГЛАВЛЕНИЕ

В данной статье представлена FuzzyAdvisor –  простая экспертная система на базе нечеткой логики, помогающая делать выбор исходя из простых оценок значений параметров.

•    Скачать исходники - 108 Кб

Введение

Более 15 лет назад разрабатывали проект (Brul? и др., 1995), требовавший экспертную систему, выбирающую подходящий вариант исходя из некоторых основных параметров. Были опробованы несколько подходов, в том числе использование исчисления предикатов (т.е. пролог). По сути, ни один  из подходов не работал хорошо. В итоге было опрошено несколько специалистов в области. У них спрашивали, какой выбор бы они сделали с учетом набора параметров, и они всегда отвечали нечто вроде "Если X равно Y, то я бы использовал A, но если X равен Z, то я бы использовал B" -- где X является параметром (т.е. глубина воды), Y и Z являются квалификаторами (глубоко), а A и B являются вариантами для выбора. По сути, они описывали нечеткую систему. В итоге была написана простая экспертная система на базе нечеткой логики, удовлетворительно решившая проблему.

F# служит для функционального программирования. Его возможности хорошо подходят для экспертной системы, подобной разработанной в прошлом веке. Вводные замечания по F# и разработка приложения форм Windows изложены в предыдущей статье, Знакомство с F# - приложение форм Windows.

В данной статье представлена FuzzyAdvisor –  простая экспертная система на базе нечеткой логики, помогающая делать выбор исходя из простых оценок значений параметров. Загружаемый архив содержит три проекта Visual Studio 2008:
•    FuzzyAdvisor – корневая библиотека (*.dll), написанная на F#, реализующая систему консультанта.
•    FuzzyWorkshop - приложение F#, разрешающее определяющие правила, отображение нечетких множеств и тестирование системы FuzzyAdvisor.
•    FuzzyTest - проект C#, использующий FuzzyAdvisor как пример объединения языков.

Код не совсем элегантный и эффектный, но он работает.

Описание системы FuzzyAdvisor

В нефтяном бизнесе и в других отраслях часто необходимо предварительно оценить затраты до поступления большого объема данных. При разработке морских нефтепромыслов стоимость морской платформы или другого типа конструкции аппаратуры очень сильно влияет на затраты, период подготовки перед установкой, ограничения на бурение, экологические риски и т. д. Из-за этих опасений очень важно правильно выбрать аппаратуру в начале проекта, задолго до появления любых других значащих данных. Рассмотренный здесь пример использует некоторые элементарные данные для обоснованного выбора лучшего типа или типов шельфовых нефтепромыслов. Следует заметить, что первая версия системы Fuzzy Advisor(нечеткий консультант) успешно использовалась во многих других аналогичных процессах принятия решений, в том числе в выборе газовых компрессоров, насосов и нефтеперерабатывающего оборудования.

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

Общая конструкция FuzzyAdvisor состоит в том, чтобы обрабатывать нечеткие правила вида:

если <параметр> равен <квантификатор>, то <вариант> <вес>

Например:

если «глубина воды» равна «очень глубоко», то «подводные скважины» (0.9)

В примере глубина воды представляет собой параметр данных, VeryDeep описывает нечеткое множество, SubseaCompletions – вариант для выбора, и 0.9 является весовым коэффициентом, описывающим важность правила.

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

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

При реализации системы FuzzyAdvisor необходимо определить правила, определить нечеткие множества и указать весовые коэффициенты для каждого правила. Хотя детали этого процесса не рассматриваются, предварительные определения обычно определяются путем опроса экспертов в предметной области. Как только предварительные правила, нечеткие множества и веса определены, система реализуется и снова проверяется экспертами. Если они заметят плохое решение, это значит, что требуется скорректировать нечеткое множество или вес, или же добавить другие правила. Осуществление этого выходит за рамки данной статьи.