Информационно-образовательный сайт для студентов, аспирантов и коллег Тушавина В. А., созданный и наполняемый им самим безвозмездно в свободное от остальных забот время
Метод Анализа Иерархий (МАИ, англ. analytic hierarchy process (AHP)) — математический инструмент системного подхода к сложным проблемам принятия решений. Определенный практический интерес представляет его реализация в GNU R. Рассмотрим это подробнее.
Для работы с приведенными примерами необходимо, чтобы был установлен R, а также RStudio. Ссылки на ПО есть на соответствующей странице.
Для работы необходимо установить некоторые пакеты (просто скопируйте приведенные команды в консоль и нажмите Enter)
После установки пакетов вы готовы к запуску графической оболочки. Наберите команды.
library(ahp)
RunGUI()
Если все сделано правильно, должно запуститься окно браузера.
Может возникнуть ошибка, вызванная тем, что какой-то из пакетов не встал, например, из-за сетевого сбоя. Если обратить внимание на текст сообщения при установке, то можно заметить, что пакет ahp при инсталляции также ставит необходимые для своей работы пакеты: jsonlite, httpuv, xtable, htmlwidgets, shiny, rstudioapi, visNetwork, data.tree, formattable, DiagrammeR. Если вместо окна браузера появляется ошибка, то надо просто установить недостающий пакет командой install.packages или из меню приложения.
В данной задаче необходимо выбрать из трех кандидатов одного на должность руководителя. Кандидаты оцениваются по критериям: возраст, опыт, образование и личные качества. На рисунке показана иерархия для этой задачи. Простейшая иерархия содержит три уровня: цель, критерии и альтернативы. Числа на рисунке показывают приоритеты элементов иерархии с точки зрения цели, которые вычисляются в МАИ на основе парных сравнений элементов каждого уровня относительно связанных с ними элементами вышерасположенного уровня. Приоритеты альтернатив относительно цели (глобальные приоритеты) вычисляются на заключительном этапе метода путем линейной свертки локальных приоритетов всех элементов. В данном примере лучшим кандидатом является Дик, так как имеет максимальное значение глобального приоритета.
Данный пример уже имеется в системе, достаточно выбрать его из выпадающего меню (tom_dick_harry.ahp)
Перейдем на вкладку Visualize и посмотрим на схему задачи
На вкладке анализ мы увидим результаты расчетов
Аналогичные результаты можно получить и из командной строки.
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) # Результаты в графическом виде
Известные проблемы и пути их решения
Главная проблема — пока не удалось заставить работать с русским языком в 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
Результат сохраняется в графический файл, который можно использовать в дальнейшей работе.
Что же касается табличной части, то Analize возвращает результат в текстовом виде, который можно просто отредактировать. Останавливаться на этом не буду.