51

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Симулятор «цифровой химии»
0
Автор поста оценил этот комментарий

Без русского языка даже вникать не буду. Китайцы и те для себя делают на родном языке.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

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

1
Автор поста оценил этот комментарий

Х)))))
У меня - походу, сразу три тромба )

Иллюстрация к комментарию
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

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

показать ответы
1
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Спасибо за отзыв! Рад, что мой проект Вам понравился :)

показать ответы
1
Автор поста оценил этот комментарий

Как простенькими формулами наглядно показать детям сопромат. Зачётная идея, реализация и даже треки

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Благодарю за отзыв! Если у Вас получатся интересные конфигурации в приложении, поделитесь, пожалуйста, ссылками :)
показать ответы
2
Автор поста оценил этот комментарий

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

1. Слишком рандомно происходит образование и разрыв связей, без внешних воздействий, в основном просто из-за инерции.

2. Для "атомовости" было бы неплохо задать шарикам разный радиус, да и в целом как-то настроить для соответствия. Атомы соединяются ведь как раз орбиталями.

3. Для химических реакций критично влияние температуры. А температура это движение.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Спасибо за отзыв!

1. Образование и разрыв связей происходит в первую очередь на основании правил, которые может менять пользователь в секции конфига Types, в тензоре Links Distance Factor (суть: влияние близости частицы типа A на прочность связей между частицами типов B и C). То есть все зависит от настройки.

2. Разные радиусы можно задавать в том же Types Config, пункте Radius.

3. Температура также настраивается, в конфиге World, пункте Temperature Multiplier.

Если что-то будет непонятно — обращайтесь, все покажу и объясню.

1
Автор поста оценил этот комментарий

Не, просто в настройках скорость на ноль выставлена )

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

А, понял. Я уж думал, переглючило что.

0
DELETED
Автор поста оценил этот комментарий

Это похоже на youtube канал где визуализируют различные физические эксперименты:

https://youtu.be/gWztz_IUT1E

Предпросмотр
YouTube2:41
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Фракталы люблю. Тоже пробовал их кодить. Экспериментировал с turtle-графикой, реализовал множества Мандельброта и Жюлиа.

1
Автор поста оценил этот комментарий

Еще одна красивая и замысловатая конфигурация: https://linker.smoren.me/go/0e7ebf4a-fe71-44ba-97ed-89e40171...

Чтобы получились структуры, как на картинке, надо запустить ее и подождать некоторое время.

Иллюстрация к комментарию
1
Автор поста оценил этот комментарий
Задумка была собрать всё красные, синие с ними запутались случайно - у них настройка тоже только на себе подобных была. Это странно...
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Может быть синие к красным и не притягивались — просто два сгустка столкнулись.

показать ответы
4
Автор поста оценил этот комментарий

А у меня вот такое вышло: https://linker.smoren.me/go/c1d0e5fc-610e-4f03-9f02-b30c2745...

Похоже на какие-то растения.

Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Офигенно! Разветвленные цепочки с рецепторами! Спасибо!

показать ответы
0
Автор поста оценил этот комментарий

Ну, когда разработчик/создатель вкладывает в своё детище душу - это и видно, и даже без красивостей (пока что, полагаю) в интерфейсе оно не может не заинтересовать ) Прикольно, повторюсь. Не забрасывайте! В сравнении с той первой версией тут прям небо и земля! Развивайте )

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Спасибо!

1
Автор поста оценил этот комментарий

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

Вот эта структура из трёх синих, к которым присоединены два красных, между которыми рыжий.

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

0
Автор поста оценил этот комментарий

У вас Яндекс браузер?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

У меня хром. Но тестировал на разных браузерах, в т.ч. на Яндексе.

1
Автор поста оценил этот комментарий

Заодно и сопромат визуализировать

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

О, World of Goo! Обожаю эту игру!

показать ответы
1
Автор поста оценил этот комментарий

Спасибо! Вот еще одна интересная конфигурация с цепочками, которые обрастают рецепторами! https://linker.smoren.me/go/5d56c646-9b0f-4932-94b5-8ec5c596...

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

О, как здорово! Перспективная конфигурация!

показать ответы
2
Автор поста оценил этот комментарий

Все, что можно сказать, очень интересно, но ничего не понятно, то бишь задумка крутая, но в силу специфики - не для всех, а хотелось бы, чтоб можно было хотя бы базово, но вникнуть, когда попадаешь в эту приложуху)

Русифицировать и юзерфрендли интерфейс бы)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо за отзыв! Да, действительно, интерфейс выглядит довольно сложно и громоздко. Но, к сожалению, я не придумал, как его можно упростить без потери гибкости и тонкости настройки.

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

2
Автор поста оценил этот комментарий

Вау) Попал мне в предложку, моё уважение)

Это Алька, если что)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Привет! Спасибо! :)

0
Автор поста оценил этот комментарий

Буду дальше упражняться!

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Успехов!

показать ответы
0
Автор поста оценил этот комментарий

Если кому вдруг нужна тоталка с одной из частиц
https://smoren.github.io/molecular-ts/#eyJ3b3JsZENvbmZpZyI6e...

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

показать ответы
0
Автор поста оценил этот комментарий

Залипательная штука!

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо за отзыв! Если найдете интересную конфигурацию, обязательно поделитесь ссылкой и скрином!

0
Автор поста оценил этот комментарий

Буду дальше упражняться!

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

0
Автор поста оценил этот комментарий

Вот еще интересный мир: https://linker.smoren.me/go/2b9d5258-1f3f-4f35-ab13-c23ebc9d...

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо! Действительно интересные соединения получились :)

показать ответы
0
Автор поста оценил этот комментарий
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

О, выглядит здо́рово!

0
Автор поста оценил этот комментарий

https://linker.smoren.me/go/491d3c5c-3168-4ef8-b974-f00c0969... Почему то по ссылке выглядит совсем иначе

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Может быть, Вы меняли параметры конфигурации перед тем, как сгенерировать ссыль?

показать ответы
1
Автор поста оценил этот комментарий

Буду считать, что у меня получилась солнечная система! https://linker.smoren.me/go/491d3c5c-3168-4ef8-b974-f00c0969...

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ух, крутота какая! А можно ссылку на конфигурацию? Двойной клик по кнопке.

Иллюстрация к комментарию
показать ответы
1
Автор поста оценил этот комментарий
Там комментом ниже ссыль на конфиг, приведший к этому сгустку на скрине
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо!

0
Автор поста оценил этот комментарий
А теперь можно как раз включить им взаимодействие.
Мутация свойств на фоне эволюционного развития )
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Хорошая идея!

1
Автор поста оценил этот комментарий

Я пытался скукожить их в солнце и оставшиеся частицы заставить летать вокруг как планеты! Пока не выходит, видимо нужно подождать пару миллиардов лет))) Ну и очень не хватает ложки или еще чего чтобы размешать этот бульон

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Можно все очистить и добавлять частицы вручную: зажимаете кнопку с цифрой (номер типа частицы: 1 — красная, 2 — бежевая и т.д.) и тыкаете мышкой в место, куда хотите добавить частицу. Чтобы очистить все, зайдите в World Config и нажмите на кнопку Clear.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Выглядит взрывоопасно :) Я так понимаю, Вы отключили связи и настроили гравитацию между частицами так, чтобы они коллапсировали в сгустки.

6
Автор поста оценил этот комментарий

Я хотел создать вселенную! Получился тромб

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

По-моему вышло очень красиво! А есть ссылка на конфигурацию? Получить ее можно двойным нажатием на кнопку (см. скрин).

Иллюстрация к комментарию
показать ответы
0
Автор поста оценил этот комментарий
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

О, тоже крутой конфиг с интересными молекулами! Благодарю!

1
Автор поста оценил этот комментарий
Интересный эксперимент. Подпишусь.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо большое за отзыв! Рад, что Вам понравилось!

2
Автор поста оценил этот комментарий

У меня вот такая интересная конфигурация получилась! https://linker.smoren.me/go/653df66a-a566-4436-a5c9-ea26c5f1...

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Очень здорово получилось! Спасибо! Давайте продолжать искать интересные конфигурации :)

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества