Метод анализа иерархий в R

Метод Анализа Иерархий (МАИ, англ. analytic hierarchy process (AHP)) — математический инструмент системного подхода к сложным проблемам принятия решений. Определенный практический интерес представляет его реализация в GNU R. Рассмотрим это подробнее.

Для работы с приведенными примерами необходимо, чтобы был установлен R, а также RStudio. Ссылки на ПО есть на соответствующей странице.

Для работы необходимо установить некоторые пакеты (просто скопируйте приведенные команды в консоль и нажмите Enter)

install.packages("ahp")
install.packages("shinythemes")
install.packages("shinyAce")
install.packages("shinyjs")

После установки пакетов вы готовы к запуску графической оболочки. Наберите команды.

library(ahp)
RunGUI()

Если все сделано правильно, должно запуститься окно браузера.

Окно браузера для МАИ
Окно браузера для МАИ

Может возникнуть ошибка, вызванная тем, что какой-то из пакетов не встал, например, из-за сетевого сбоя. Если обратить внимание на текст сообщения при установке, то можно заметить, что пакет ahp при инсталляции также ставит необходимые для своей работы пакеты: jsonlite, httpuv, xtable, htmlwidgets, shiny, rstudioapi, visNetwork, data.tree, formattable, DiagrammeR. Если вместо окна браузера появляется ошибка, то надо просто установить недостающий пакет командой install.packages  или из меню приложения.

Рассмотрим решение задачи выбора лидера из статьи, описанной в Wikipedia.

Постановка задачи выбора лидера (c) Википедия
Постановка задачи выбора лидера (c) Википедия

В данной задаче необходимо выбрать из трех кандидатов одного на должность руководителя. Кандидаты оцениваются по критериям: возраст, опыт, образование и личные качества. На рисунке показана иерархия для этой задачи. Простейшая иерархия содержит три уровня: цель, критерии и альтернативы. Числа на рисунке показывают приоритеты элементов иерархии с точки зрения цели, которые вычисляются в МАИ на основе парных сравнений элементов каждого уровня относительно связанных с ними элементами вышерасположенного уровня. Приоритеты альтернатив относительно цели (глобальные приоритеты) вычисляются на заключительном этапе метода путем линейной свертки локальных приоритетов всех элементов. В данном примере лучшим кандидатом является Дик, так как имеет максимальное значение глобального приоритета.

Данный пример уже имеется в системе, достаточно выбрать его из выпадающего меню (tom_dick_harry.ahp)

 

 

pic01_1

Перейдем на вкладку Visualize и посмотрим на схему задачи

pic01_2

На вкладке анализ мы увидим результаты расчетов

pic01_3

Аналогичные результаты можно получить и из командной строки.


ahpFile <- system.file("extdata", "tom_dick_harry.ahp", package="ahp")
tomAhp <- Load(ahpFile)
Visualize(tomAhp)

rplot01


Calculate(tomAhp) # Пересчитать
Analyze(tomAhp)  # Результаты в текстовом виде
# Weight  Dick   Tom Harry Inconsistency
# 1 Choose the Most Suitable Leader 100.0% 48.1% 38.5% 13.4%          4.4%
# 2  ¦--Experience                   54.8% 34.9% 14.1%  5.7%          3.3%
# 3  ¦--Charisma                     27.0%  5.2% 20.1%  1.7%          6.1%
# 4  ¦--Education                    12.7%  4.2%  2.8%  5.6%            NA
# 5  °--Age                           5.6%  3.8%  1.5%  0.4%          2.5%
AnalyzeTable(tomAhp) # Результаты в графическом виде

rplot

 

Известные проблемы и пути их решения

Главная проблема — пока не удалось заставить работать с русским языком в Windows. В Mac OS X все работает прекрасно, a в Windows скрипт вылетает по ошибке. Проблема понятна и она заключается в кодовых страницах, поскольку R понимает latin1 и UTF-8, а в OS X кодировка одна, UTF-8, то проблем нет. В Windows же кодировка  windows-1251 и иногда возникают ошибки, в случае, если приложение не адаптировано к иным языкам, отличным от английского.

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

cat(GetGraph(tomAhp)$dot_code)

Получаем описание схемы на языке dot, которую можно отредактировать простыми поиском и заменой в любом текстовом редакторе

Я предпочитаю редактировать в Notepad++. Первым делом заменяем все одинарные кавычки (‘)  на двойные («). Иначе потом будут ошибки. Дальше меняем слова групповой заменой и вставляем в редактор gvedit

bezymyannyy

 

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

test

Что же касается табличной части, то Analize возвращает результат в текстовом виде, который можно просто отредактировать. Останавливаться на этом не буду.

 

Список источников

1. Christoph Glur (2016). ahp: Analytic Hierarchy Process. R package version 0.2.8.  https://CRAN.R-project.org/package=ahp

2. Саати Т. Принятие решений. Метод анализа иерархий. — М. : Радио и связь, 1993. — 278 с.