После года разработки CLUBASID я хотел бы поделиться своим путешествием. CLUBASID — это инструмент моделирования инфекционных заболеваний, а также инструмент визуализации и анализа данных. Я начал работать над CLUBASID 15 марта 2020 года как полноценный сольный проект и до сих пор работаю над этим программным обеспечением как сольный проект. Я хочу поделиться тем, как этот проект развивался с течением времени и как он оказался там, где он находится сейчас. В этом проекте я использовал движок Unity (с языком C# и небольшим количеством HLSL). Выбор технологии сделал этот проект в чем-то сложнее, а в чем-то проще. Поскольку Unity — это в первую очередь игровой движок, многие вещи не вышли из коробки, и мне пришлось их реализовать (например, диалоговые окна, графики и окно выбора файлов — все пришлось создавать с нуля). С другой стороны, я получил цикл обновления Unity, который сыграл важную роль в аспекте моделирования этого программного обеспечения.

с 15 марта по 17 марта 2020 г. (минимально жизнеспособный продукт)

15 марта 2020 года я начал работать над программным обеспечением для моделирования распространения Covid-19 в небольшой группе населения. Идея заключалась в том, чтобы связка точек представляла отдельных людей в популяции. Белые точки представляли неинфицированных людей, синие точки представляли бессимптомных инфицированных людей, а красные точки представляли инфицированных людей с симптомами. Как только неинфицированный человек приближается к инфицированному человеку, у неинфицированного человека появляется шанс (скажем, X) заразиться, где X находится в диапазоне от 0 до 100. После инкубационного периода у бессимптомных инфицированных людей начинают проявляться симптомы, после чего они могут либо выздороветь или умереть. На тот момент программное обеспечение называлось «Симулятор пандемии Covid-19».

20 марта 2020 г. (график и кластеры в реальном времени)

К 20 марта мне удалось сгруппировать население по кластерам. В полях, которые вы видите ниже, представлены границы для каждого кластера. Я также добавил график в реальном времени справа, чтобы отобразить результат того, что происходит (в то время на графике все еще были проблемы с ошибками).

29 марта 2020 г. (рабочий график и графики)

Как упоминалось ранее, я использую движок Unity для создания этого программного обеспечения. Сама структура не поставляется с пользовательским интерфейсом диаграммы. Так что мне пришлось создавать свой с нуля. Я начал с создания круговых диаграмм и гистограмм. Также мне удалось исправить ошибки на графике справа.

3 апреля 2020 г. (общественные места, карантины и изолятори)

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

16 апреля 2020 г. (анализ графиков и др.)

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

В этот момент я переименовал программное обеспечение в «симулятор пандемии».

19 июля 2020 г. (аэрозольное распространение)

Именно в этот момент я решил изменить название на CLUBASID (CLUster BAsed Simulation of Infectious Diseases). Я добавил симуляции для других способов передачи, таких как аэрозоль, ЗППП, прямой и непрямой контакт. На изображении ниже показано моделирование болезни, которая распространяется через аэрозоль. Синие кружки обозначают зараженную область. Например, когда человек чихает, зараженные частицы перемещаются по воздуху и некоторое время остаются в нем.

27 июля 2020 г. (ИППП)

В моделировании ИППП люди будут спариваться с противоположным полом и того же возраста на основе знакомства. Когда человек вступает в контакт с кем-то противоположного пола и того же возраста, они начинают «узнавать друг друга», узнавая друг друга, они оба сохраняют идентификаторы друг друга и общее количество времени, которое они знали. Как только это количество времени достигнет определенного порога, они оба вступят в брак. Порог определяется переменной, называемой «уровень распущенности». Чем выше «уровень распущенности», тем ниже порог и наоборот. Также частое использование презервативов снизит вероятность распространения заболеваний (определяется переменной «использование презервативов»).

22 августа 2020 г. (Инструмент для простого добавления большого населения, а также новый график)

Инструмент, который позволит пользователю легко добавлять большое количество населения (до 50 000 человек) с различными вариантами, которые пользователь может контролировать (например, население на кластер и т. д.).

17 сентября 2020 г. (Вакцинация и медицинское вмешательство)

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

10 ноября 2020 г. (симуляция с несколькими ограничениями)

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

Основное решение от 10 декабря 2020 г.

Я принял важное решение 10 декабря 2020 года. Я спросил себя, почему пользователь не может импортировать в CLUBASID данные из моделирования, которое он должен был выполнить с помощью другого программного обеспечения, и использовать визуальные эффекты в CLUBASID. Затем я подумал, что импорт CSV-файла был бы хорош, так как это стандартный формат для большинства данных. Это выходит за рамки инфекционных заболеваний. Пока мы импортируем данные CSV в программное обеспечение. Такими данными могут быть финансовые данные, медицинские данные и т. д. Что бы это ни было, вы можете импортировать их и использовать в CLUBASID. Это был серьезный сдвиг в развитии.

10 января 2021 г. (Визуализация данных)

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

30 января 2021 г. (3-й график)

Я добавил 3D-график (все еще в сыром виде). Вы можете легко увидеть взаимосвязь между тремя атрибутами по осям X, Y и Z.

15 февраля 2021 г. (больше графиков и исправлений ошибок)

Я добавил несколько диаграмм, включая столбчатую гистограмму, диаграмму диапазона, линейную диаграмму и гистограмму гонки. Серьезные улучшения также были внесены в 3D-графику.

6 марта 2021 г. (больше диаграмм)

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

11 марта 2021 г. (Геокарта)

Я разработал карту мира, используя блендер (программное обеспечение для 3D-моделирования и многое другое). Затем я перенес 3D-модель карты в Unity. Карта в настоящее время содержит около 156 стран.

Уроки на данный момент

Шаблоны проектирования и чистая архитектура программного обеспечения очень важны. Это никогда не было более важным, чем когда-либо. В настоящее время этот проект содержит более 300 файлов классов и более 50 тысяч строк кода. Вот несколько хороших советов, которым я искренне следовал:

  1. Называйте свои переменные и функции настолько хорошо, что вам не нужны комментарии для их объяснения. Например, если у вас есть функция, которая получает среднюю заработную плату работников в определенной стране, я бы назвал эту функцию getAverageSalaryOfWorkersInCountry(string country_name).
  2. Будьте строги со своими соглашениями об именах.
  3. Наличие диаграмм UML для вашего программного обеспечения очень важно.
  4. Шаблоны проектирования очень важны, и я выбрал те, которые очень хорошо подходят для моего проекта.
  5. Контроль версий очень важен. Мне нравится сохранять новую версию после того, как в программу были внесены существенные изменения.
  6. Тестирование! Тестирование! Тестирование! Не просто модульное тестирование, а практическое использование программного обеспечения, как это сделал бы конечный пользователь.
  7. Постоянно получать обратную связь от других.
  8. Добавляйте новые функции, когда это необходимо.
  9. Документируйте каждый шаг на этом пути.
  10. Всегда пытайтесь провести рефакторинг, когда это необходимо.

Почему я использовал движок Unity

Аспект моделирования болезней сделал Unity хорошим выбором. Поскольку аспект симуляции требовал постоянного обновления (точно так же, как и игра), он должен был работать в цикле обновления, это не могла быть система, основанная на событиях.

Также я использую Unity около 6 лет и чувствую себя очень комфортно. Кроме того, тот факт, что Unity изначально является игровым движком, упрощает реализацию некоторых вещей, таких как трехмерный пространственный график.

Куда направлен товар

Честно говоря, на данный момент я просто продолжаю добавлять функции за функциями. Следующим шагом будет добавление алгоритмов классификации и кластеризации для машинного обучения данных. После дополнительных месяцев полировки я вижу, что это программное обеспечение используется многими людьми для визуализации и анализа данных. Аспект моделирования заболеваний будет по-прежнему оставаться нишевой частью, поскольку не так много людей, которым это нужно будет делать (по сравнению с визуализацией данных и аналитическим аспектом программного обеспечения).

CLUBASID запущен и доступен в магазине Microsoft. https://www.microsoft.com/en-us/p/pandemic-simulator/9n86x1xhz765?activetab=pivot:overviewtab