Debugger's Process
132 subscribers
130 photos
78 videos
3 files
70 links
Download Telegram
Channel created
Channel photo updated
This media is not supported in your browser
VIEW IN TELEGRAM
Симуляция 30 000 частиц в потенциале Леннарда-Джонса.
На левую половину действует внешняя сила, направленная вниз, справа - направленная вверх.
This media is not supported in your browser
VIEW IN TELEGRAM
Допилил другой вариант рендера и управление с клавиатуры. Внезапно оказалось очень залипательно разгоняться и врезаться. Цвет частицы зависит от ее скорости.
This media is not supported in your browser
VIEW IN TELEGRAM
Как такового размера у частиц в этой модели нет.
Вместо этого есть пара параметров потенциала. Первый - позиция потенциальной ямы, по сути - расстояние между центрами частиц, на котором им энергетически максимально выгодно находиться.
Все частицы в этой симуляции изначально расположены на расстоянии 1.0 друг от друга. Там, где этот параметр меньше единицы (верхняя ячейка, r=0.7), частицы слабо притягиваются друг к другу до тех пор, пока не расположатся на расстоянии, задаваемым этим параметром, собираясь в более плотную субстанцию. С продвижением по ячейкам сверху вниз и слева направо, r увеличивается до значения 2.0 (нижняя правая ячейка). В тех ячейках, где r > 1.0 частицы обладают положительной потенциальной энергией, отчего и разлетаются. Потенциальной энергии частиц в нижних ячейках хватает на то, чтобы чтобы часть вещества испарилась, разорвав связи частиц с соседями.
This media is not supported in your browser
VIEW IN TELEGRAM
Второй параметр задает глубину потенциальной ямы - то, насколько крепко частицы оказываются связаны друг с другом, когда расположены на максимально энергетически выгодном расстоянии r.
Сверху вниз, слева направо увеличиваем этот параметр, зафиксировав r=1 и получаем пару ячеек с газом, который моментально конденсировался в жидкость, потому что был очень холодным (частицы изначально были в потенциальных ямах), несколько ячеек, в которых присутствует и жидкость и ее пары. В последней ячейке жидкость начала застывать, потенциальной энергии гравитации не хватает на то, чтобы ее растопить.
This media is not supported in your browser
VIEW IN TELEGRAM
Этим такие симуляции и притягательны - простая модель покрывает широкий спектр явлений
This media is not supported in your browser
VIEW IN TELEGRAM
В смысле, этим же кодом можно промоделить испарение и конденсацию, например. Как вот тут. Сначала греем установку виртуальным термостатом, пока леннард-джонзиум не начнет испаряться, потом справа начинаем охлаждать. И он конденсируется)
This media is not supported in your browser
VIEW IN TELEGRAM
Забыл поменять параметры после вчерашних экспериментов перед тем, как запустил интерактивный сим. Удивился, когда группа частиц захватила меня и не отпускала, пока не поднял температуру всей симуляции)
This media is not supported in your browser
VIEW IN TELEGRAM
А что-то в этом есть. Довольно прикольно собирать эти "капли" и пытаться разогнать. Или самому разгоняться и врезаться в них. Приходится следить за температурой в симуляции, при слишком низкой не разогнать "каплю", при слишком высокой она испаряется - частицы легко преодолевают притяжение и разлетаются, не поспевая за мной.
This media is not supported in your browser
VIEW IN TELEGRAM
Начал реализовывать динамический размер шага интегрирования.
С динамическим шагом можно разгоняться до больших скоростей и красиво врезаться.
This media is not supported in your browser
VIEW IN TELEGRAM
В принципе, разгоняться до больших скоростей и врезаться можно и со статическим шагом. Но если он подобран неправильно, то частицы туннелируют друг через друга. Но самое печальное, что в процессе туннелирования они разгоняются, так что достаточно одной частице набрать скорость выше критической и врезаться в другую, чтобы появилось уже две частицы с такими скоростями. Начинается цепная реакция.
Вообще, это очень занятно: у нас есть состояние системы в момент времени t0, нужно получить состояние в момент t1, потому что в момент t1 мы делаем всякие полезные вещи - рисуем частицы, определяем пользовательское воздействие, вот это всё.
При этом интегрируем диффуры движения мы, понятное дело, численно, по алгоритму Вереле (Verelet) - по сути просто говорим "ок, мы будем считать, что во время шага интегрирования все тела движутся равноускорено, сила действующая на них не меняется". Разумеется, это не так - потенциал непрерывный, так еще и зависит от 12 (!) степени расстояния между частицами - даже смещение на очень маленькое расстояние в таком поле полностью меняет действующие на частицу силы.

В итоге приходим к задачке оптимизации - разбить интервал t0-t1 на N кусов, в течение каждого из которых будем считать все силы постоянными, но при этом нужно минимизировать N одновременно с отклонением полной энергии системы от начального состояния - т.о. мы ищем решение с минимальным количеством итераций и с минимальным же колебанием полной энергии, которая должна быть постоянной (потому что симулируемая система замкнутая).

И при автоматической подстройке шага получается интересная штука - виртуальная энергия системы находит отражение в совершенно реальной, затраченной на вычисления - "холодные" системы требуют меньше шагов интегрирования (медленно движущаяся частица не успевает сильно сместиться в поле сил других частиц, поэтому достаточно меньшего числа шагов интегрирования для получения той же картины по отклонению энергии. Повышаешь температуру симуляции - начинает выть куллер, потому что температура вычислительной системы тоже повышается)
This media is not supported in your browser
VIEW IN TELEGRAM
Помните симуляцию кипения? Я подумал - чего леннард-джонзиум зря кипятить, попробуем гнать виртуальный самогон)
Теперь в левом контейнере - два типа частиц, отличающихся глубиной потенциальной ямы. То есть, частицы красного вещества связываются друг с другом намного слабее (в 250 раз), чем частицы синего. При этом их масса одинаковая, так что центрифугой их не разделить. Время варить)
Нагревается низ левого контейнера, из-за чего красный джонзиум испаряется (быстрее синего) и конденсируется в охлаждаемом правом контейнере. Настоящая перегонка)
Я тут переделал свой эксперимент с дистилляцией, поменял рендеринг, и сделал так, чтобы в конце синяя жидкость сливалась в отдельную "колбу". По-моему, довольно прикольно получилось. Во время записи я в реалтайме управлял температурой нагревателя, чтобы дистиллят получился наиболее чистым, без примеси чужих частиц, и это оказалось довольно весело. Мне кажется, на такой механике вполне можно сделать какую-нибудь игру про варку зелий)

https://youtu.be/7tqxBWzkuBg
Немного отдохнем от симуляций. Я думаю, все уже в курсе, что OpenAI предоставил бесплатный тестовый доступ к разговору со своим ИИ всем желающим. И это нереально круто, поэтому не могу не поделиться.

Если что - заходите https://chat.openai.com/ и пробуйте сами. Так вот. Прикол в том, что этот ИИ натренирован определенным образом, чтобы "не вводить людей в заблуждение". Например, на просьбу изображать какого-то реально существующего или существовавшего человека он заводит свою шарманку про то, что он-де всего лишь большая языковая модель, он не человек и вообще не может никого изображать, бла-бла-бла. Если правильно сформировать запрос к нему, то он может не сразу начать отмазываться, но в целом, если ничего дополнительно не предпринимать, на вопросы "а не железный ли ты ублюдок" он прямо отвечает, мол, да, железный.
Выглядит это так. Вот я инструктирую его отвечать мне в стиле телеграмм середины 19го века, и теперь он - Чарльз Бэббидж, получивший неожиданную телеграмму "Мистер Бэббидж, нам надо поговорить. Роман." После этих инструкций он начинает было изображать человека, но я не хожу вокруг да около и спрашиваю прямо, человек ли он.