Wi!Mi – это инструмент для создания моделей знаний с неограниченным количеством связей, параметров и отношений, обладающий логическим выводом. Скачать данный конструктор можно с официального сайта.
К сожалению, адекватного туториала по данной программе я не нашел, не считая видеоурока на youtube. Поэтому решил написать его самостоятельно.
Цель
Я изначально решил поставить себе определенную прикладную задачу:
«Существует N организация, у которой есть служба ремонта техники. Количество сотрудников 3 человека. Интенсивность поступления оборудования — 2 клиента в час. А интенсивность обслуживания равно 2. Почасовая оплата сотрудника составляет 8 у.е./час. Убыток службы от нахождения клиента в очереди составляет 10 у.е./час. Необходимо вычислить суммарные затраты фирмы».
Теория
Перед тем, как описывать процесс решения данной задачи, проведу краткий экскурс по теории, на которой базируется данная программа. В основе Wi!Mi лежит миварный подход к описанию и формализации любых типов знаний. Этот подход основан на создании эволюционного многомерного динамического пространства унифицированного представления данных и правил. Иначе говоря, получается, что миварный подход обобщает общепринятые подходы — к примеру, такие как когнитивные карты и онтологии.
Создание модели
Для простоты я разбил все данные на входные и выходные, чтобы проще было ориентироваться.
Входные данные модели:
- Интенсивность поступления оборудования lambda;
- Интенсивность обслуживания Mu;
- Оплата сотрудника S;
- Убытки фирмы в случае простоя Ub;
- Число сотрудников K.
Выходные данные модели:
- Загрузка одного сотрудника Ro;
- Клиентов в очереди Q;
- Суммарные затраты фирмы Cp.
Стоит отметить, что в программе присутствует кнопочка изменения языка, которая позволяет на любом этапе создания модели поменять язык интерфейса на английский / русский. К сожалению, во многих программах такой возможности нет (это лирическое отступление — наболевшая проблема).
Вернемся к созданию модели. Создадим два класса «Входные данные модели» и «Выходные данные модели». Для этого нажимаем кнопку «Добавить объект» и выбираем его тип «Класс».
Задаем имя класса и пишем его описание. Потом необходимо добавить параметры в наш класс. Для этого нажимаем на «Добавить параметр», и в открывшимся окне вводим необходимые данные – имя и тип. Стоит вводить и описание, но это не обязательный параметр — просто он позволяет легче ориентироваться в модели и понимать, для чего нужен тот или иной объект.
После того, как мы создадим два класса и наполним их объектами, получим следующий вид:
Далее нам необходимо создать отношения между объектами. Для этого переходим на вкладку «Отношения», нажимаем «Добавить отношение» и выбираем тип «Формула».
Введем формулу загрузки одного сотрудника Ro = lambda / (Mu * K) и нажмем на кнопку «Анализировать формулу». Программа автоматически определит входные и выходные параметры. Аналогичные действия делаем с формулой количества клиентов в очереди
Q =( K * Math.pow(Ro,K+1)) / (1 — Math.pow(Ro,K)) и с суммарными затратами фирмы Cp = K * S + Ub * Q.
Теперь необходимо создать правила. Для этого нажимаем на «Добавить правило» и выбираем тип «Простое правило».
Далее выбираем отношение, с которым мы будем работать. Выбрав его, привязываем к каждому объекту соответствующий параметр. Стоит отметить, что отношение может быть представлено в виде иных значений (x=y+z) — главное, чтобы оно повторяло структуру формулы. Это бывает удобно, когда к отношению привязывается несколько правил. Так как модель небольшая, я для простоты использовал значения, идентичные параметрам.
После того как мы создали все отношения и привязали к ним правила, получаем следующий вид:
Создание модели закончено. Теперь нужно ее проверить. Для этого необходимо перейти во вкладку «Умный калькулятор». Раскроем root и наши два класса. Введем данные из нашего условия и отметим галочкой параметры, которые необходимо получить.
Программа произвела расчет и выдала алгоритм решения.
Шаг № 0
Описание правила: Вычисление загрузки одного сотрудника
Входные параметры:
lambda=2;
Mu=2;
K=3;
Формула:
Ro = lambda / (Mu * K)
Результат: Ro=0.333333333333333;
------------------------------------
Шаг № 1
Описание правила: Вычисление загрузки очереди клиентов
Входные параметры:
K=3;
Ro=0.333333333333333;
Формула:
Q = (K * Math.pow(Ro,K+1)) / (1 - Math.pow(Ro,K))
Результат: Q=0.0384615384615384;
------------------------------------
Шаг № 2
Описание правила: Вычисление затрат фирмы
Входные параметры:
K=3;
S=8;
Ub=10;
Q=0.0384615384615384;
Формула:
Cp = K * S + Ub * Q
Результат: Cp=24.3846153846154;
------------------------------------
Также можно нажать на галочку «Показать граф решения». Будет визуализирован весь алгоритм в виде графа.
В целом инструмент очень простой — даже в реализации интерфейсов. Однако для человека, который не хочет или не умеет программировать (а если умеет программировать, то в Wi!Mi есть специальные «Сложные» отношения, которые позволяют писать их на JavaScript), или не хочет долго вникать, как работать с этой «штукой» — отличный вариант. Хотел сказать еще, что все модели сохраняются в .XML формате.
По сути, остается написать свой интерфейс, распарсить эти данные — и мы получим свою полноценную программку. Лично мне было удобно использовать данный конструктор для быстрого построения логики.
Автор: Kilox