пятница, 20 ноября 2015 г.

Релиз системы моделирования VisualAivika 5

Всем привет! Недавно выпустил версию своей визуальной системы моделирования для системной динамики VisualAivika.


Функциональное программирование здесь при том, что на конечном этапе исходная система диффуров преобразуется в модель в терминах моей библиотеки Айвика, которая написана на языке F#, который, как говорят его создатели, functional first.

Может быть интересна история создания Айвики. Первоначальная идея возникла при изучении Haskell, но я очень быстро переключился реализовывать идею на F#.  Первая версия на F# была ужасна. Ее до сих пор можно найти на простора интернета, но я не хочу давать ссылку на нее - пусть останется для истории.

Мне всегда было очень интересно реализовать Айвику на Haskell. И попытка переписать с F# на Haskell была неудачной. Нарвался на то, что компилятор Haskell предполагает ссылочную прозрачность, и соответственно оптимизирует код. Это решается с помощью прагм, что некрасиво, но главная нехорошесть была в другом. У меня там возникал вложенный двухэтажный одноименный тип в сигнатурах, что было прямым указанием на какую-то логическую ошибку.

Прояснение пришло не сразу. Сначала я пытался все выразить в рамках одного вычисления, т.е. монады. Все кардинально упростилось, когда я понял, что мне нужно ввести несколько вычислений. В итоге полностью избавился от нехорошего unsafePerformIO, сигнатуры функций стали понятными с первого взгляда, код целиком стал ссылочно-прозрачным. Просто красота! Так родилась версия Айвики для Haskell.

Потом я уже переписал обратно c Haskell на F#. Пришлось пойти не некоторые упрощения и хитрости, но в целом, версия Айвики на F# примерно соответствует своей старшей сестрице, хотя и будет немного слабее. Именно переписанная версия теперь используется у меня в визуальной системе моделирования.

Возвращаясь к исходной теме. Даже если имитационное моделирование не входит в область ваших интересов, то может быть интересно то, что VisualAivika позволяет создавать так называемые Casual Loop Diagrams (CLD), область применения которых довольно широка. Это Systems Thinking или системное мышление.

Ниже показан пример такой диаграммы, которую я накидал в своей VisualAivika за минуту-две.



Здесь знак плюса указывает на положительную связь, знак минуса - на отрицательную. Видим, что приведенный цикл является устойчивым. Нет ни бурного роста, ни активного падения.

пятница, 12 июня 2015 г.

Обновленная Aivika for .NET

Открыл по лицензии GNU дополнительные компоненты к версии своей библиотеки имитационного моделирования Айвика, написанной на языке F#. Теперь по открытой лицензии доступны не только разработка и запуск модели в Visual Studio или Xamarin Studio, но можно также сохранять результаты, строить графики и т.п. Все это удовольствие автоматизируется несколькими дополнительными строками кода.


В дополнение к существующей документации в формате PDF выложил исходники примеров, которые охватывают наиболее известные области имитационного моделирования: системная динамика, дискретно-событийное моделирование (управляемое временем, событиями и процессами), базовое агентное моделирование.

Здесь замечу, что версия на Haskell по-прежнему остается более функциональной, и она имеет более чистый дизайн. В случае с F# пришлось пойти на некоторые упрощения. Зато доступна Visual Studio с IntelliSense, хотя лично я предпочитаю Aquamacs и runghc / cabal в терминале :)

понедельник, 4 мая 2015 г.

Зарелизил Aivika for .NET

Выпустил движок имитационного моделирования Aivika for .NET по двойной лицензии: GPLv3 и коммерческая. Коммерческая версия имеет дополнительные плюшки в виде модулей для быстрого и удобного возвращения результатов, обработки и анализа. Но сам движок полностью самодостаточен, и он лежит теперь на гитхабе:

https://github.com/dsorokin/aivika-fsharp-ce

пятница, 1 мая 2015 г.

Айвика для .NET Framework и Mono

Айвика для .NET Framework и Mono

Портировал свою библиотеку имитационного моделирования Айвику на .NET Framework и Mono. Если кратко, это такая библиотека, которая поддерживает большинство известных парадигм имитационного моделирования. Звучит очень амбициозно, но это действительно так. Можете проверить, взяв открытую версию для Haskell. Код доступен. Есть примеры. Есть документация. Даже Google очень уважает мою библиотеку по поисковой фразе «simulation library», хотя замечу, что его выдача бывает нестабильной и зависит от многих факторов.


Теперь есть порт для .NET и Mono. Написано на F#. В отличие от открытой версии для Haskell, этот порт закрыт, но доступна документация в формате PDF по ссылке в конце  приведенной выше страницы Wiki. Больше 100 страниц с описанием основного API, примерами, графиками и т.п.

Что может дать новая версия? 

Как и в случае Haskell, можно составлять имитационные модели практически любой степени сложности и нетривиальности, используя очень простую концепцию, где основные моделируемые активности представлены как вычисления. По сути, это функциональное программирование в чистом виде: монады, потоки, стрелки и т.п., но этим можно особо не заморачиваться, поскольку F# создает иллюзию простоты, насколько возможно.

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

Библиотека охватывает такие вещи, как обыкновенные диффуры, так и вытесняющую многопроцессность для систем массового обслуживания. Например, вытеснение ресурса позволяет с легкостью моделировать поломку станков. А потоки с мультиплексированием позволяют моделировать станки параллельно.

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


Теперь это все доступно на платформах .NET Framework и Mono. Работает на Windows, OS X и Linux. Можно составлять модели в удобном редакторе Visual Studio или Xamarin Studio с подсветкой типов и автодополнением.  Возможно создание интерактивных тренажеров. Можно интегрировать с существующими решениями, использующими .NET.