51

Симулятор «цифровой химии»1

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

Это своего рода симуляция «цифровой химии» — межатомных взаимодействий в 2D- и 3D-пространствах:

  • коллизии и отскоки частиц при контакте;

  • силы притяжения и отталкивания между частицами;

  • связи между частицами и влияние других частиц на эти связи;

  • влияние температуры и других факторов среды (макропараметров) на поведение частиц.

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

Частицы разных типов визуализируются разными цветами. От типа частицы зависят их свойства, представленные в конфигурации мира:

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

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

  3. Список лимитов связей показывает, какое максимальное количество связей могут иметь частицы каждого типа.

  4. Матрица лимитов связей показывает, какое максимальное количество связей могут иметь частицы каждого типа с частицами разных типов.

  5. Тензор влияния частиц на связи своих соседей (как близость частицы типа A влияет на прочность связи частицы типа B с частицей типа C).

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

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

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

Вот ссылки на демо нескольких любопытных конфигураций со сложным поведением частиц:

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

Кстати, встретив интересный набор законов, не хочется, чтобы он канул в лету после закрытия окна браузера, — поэтому я внедрил кнопку создания ссылки на запуск симуляции с заданным набором параметров. А поделиться ссылками на интересные конфигурации можно в специальном issue либо здесь, в комментариях.

Спасибо за внимание!

Симулятор «цифровой химии» Химия, Химия и жизнь, Молекулярная биология, Молекулярная химия, Физика, Эксперимент, Программирование, Наука, Научпоп, Видео, YouTube, Длиннопост