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 формате.



По сути, остается написать свой интерфейс, распарсить эти данные — и мы получим свою полноценную программку. Лично мне было удобно использовать данный конструктор для быстрого построения логики.

Комментарии (4)


  1. DbLogs
    05.04.2016 18:06
    +1

    Пока что впечатление, что эта штука возможно чуть более умнее Экселя, но уступает по UX.


    1. Kilox
      06.04.2016 14:54

      Excel это сам по себе мощный инструмент, который решает огромный спектр задач. Правда, людей, которые используют его на 100% очень мало. Если необходимо быстро перестроить модель, в случае необходимости, Wi!Mi с этой задачей справится достаточно быстро, даже если меняется структура модели (задачи). По поводу UX: в Wi!Mi мы описываем реальную картину мира и опираемся на «человеческое» представление этой самой картины, так что не уступает, а скорее наоборот!


  1. vvagr
    06.04.2016 01:45

    А чем это лучше Моделики?


    1. Kilox
      06.04.2016 14:55

      Как минимум тем, что очень легка в освоении и опять же, количество реализуемых задач много шире (АСУ, АСОИ, СППР для ситуационных центров и т.д.).