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 частицы обладают положительной потенциальной энергией, отчего и разлетаются. Потенциальной энергии частиц в нижних ячейках хватает на то, чтобы чтобы часть вещества испарилась, разорвав связи частиц с соседями.
Вместо этого есть пара параметров потенциала. Первый - позиция потенциальной ямы, по сути - расстояние между центрами частиц, на котором им энергетически максимально выгодно находиться.
Все частицы в этой симуляции изначально расположены на расстоянии 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 и получаем пару ячеек с газом, который моментально конденсировался в жидкость, потому что был очень холодным (частицы изначально были в потенциальных ямах), несколько ячеек, в которых присутствует и жидкость и ее пары. В последней ячейке жидкость начала застывать, потенциальной энергии гравитации не хватает на то, чтобы ее растопить.
Сверху вниз, слева направо увеличиваем этот параметр, зафиксировав 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 одновременно с отклонением полной энергии системы от начального состояния - т.о. мы ищем решение с минимальным количеством итераций и с минимальным же колебанием полной энергии, которая должна быть постоянной (потому что симулируемая система замкнутая).
И при автоматической подстройке шага получается интересная штука - виртуальная энергия системы находит отражение в совершенно реальной, затраченной на вычисления - "холодные" системы требуют меньше шагов интегрирования (медленно движущаяся частица не успевает сильно сместиться в поле сил других частиц, поэтому достаточно меньшего числа шагов интегрирования для получения той же картины по отклонению энергии. Повышаешь температуру симуляции - начинает выть куллер, потому что температура вычислительной системы тоже повышается)
При этом интегрируем диффуры движения мы, понятное дело, численно, по алгоритму Вереле (Verelet) - по сути просто говорим "ок, мы будем считать, что во время шага интегрирования все тела движутся равноускорено, сила действующая на них не меняется". Разумеется, это не так - потенциал непрерывный, так еще и зависит от 12 (!) степени расстояния между частицами - даже смещение на очень маленькое расстояние в таком поле полностью меняет действующие на частицу силы.
В итоге приходим к задачке оптимизации - разбить интервал t0-t1 на N кусов, в течение каждого из которых будем считать все силы постоянными, но при этом нужно минимизировать N одновременно с отклонением полной энергии системы от начального состояния - т.о. мы ищем решение с минимальным количеством итераций и с минимальным же колебанием полной энергии, которая должна быть постоянной (потому что симулируемая система замкнутая).
И при автоматической подстройке шага получается интересная штука - виртуальная энергия системы находит отражение в совершенно реальной, затраченной на вычисления - "холодные" системы требуют меньше шагов интегрирования (медленно движущаяся частица не успевает сильно сместиться в поле сил других частиц, поэтому достаточно меньшего числа шагов интегрирования для получения той же картины по отклонению энергии. Повышаешь температуру симуляции - начинает выть куллер, потому что температура вычислительной системы тоже повышается)
This media is not supported in your browser
VIEW IN TELEGRAM
Помните симуляцию кипения? Я подумал - чего леннард-джонзиум зря кипятить, попробуем гнать виртуальный самогон)
Теперь в левом контейнере - два типа частиц, отличающихся глубиной потенциальной ямы. То есть, частицы красного вещества связываются друг с другом намного слабее (в 250 раз), чем частицы синего. При этом их масса одинаковая, так что центрифугой их не разделить. Время варить)
Нагревается низ левого контейнера, из-за чего красный джонзиум испаряется (быстрее синего) и конденсируется в охлаждаемом правом контейнере. Настоящая перегонка)
Теперь в левом контейнере - два типа частиц, отличающихся глубиной потенциальной ямы. То есть, частицы красного вещества связываются друг с другом намного слабее (в 250 раз), чем частицы синего. При этом их масса одинаковая, так что центрифугой их не разделить. Время варить)
Нагревается низ левого контейнера, из-за чего красный джонзиум испаряется (быстрее синего) и конденсируется в охлаждаемом правом контейнере. Настоящая перегонка)
Я тут переделал свой эксперимент с дистилляцией, поменял рендеринг, и сделал так, чтобы в конце синяя жидкость сливалась в отдельную "колбу". По-моему, довольно прикольно получилось. Во время записи я в реалтайме управлял температурой нагревателя, чтобы дистиллят получился наиболее чистым, без примеси чужих частиц, и это оказалось довольно весело. Мне кажется, на такой механике вполне можно сделать какую-нибудь игру про варку зелий)
https://youtu.be/7tqxBWzkuBg
https://youtu.be/7tqxBWzkuBg
YouTube
Boiling and distillation simulation (20 000 Lenard-Jones particles)
Boiling and distillation simulation in my python simulator, Simba (Simulation-with-Numba).
There are Lennard-Jones particles of two types with same mass, but with different depth of potential well (250 for blue, 1 for red) in the "distillery", which leads…
There are Lennard-Jones particles of two types with same mass, but with different depth of potential well (250 for blue, 1 for red) in the "distillery", which leads…
Немного отдохнем от симуляций. Я думаю, все уже в курсе, что OpenAI предоставил бесплатный тестовый доступ к разговору со своим ИИ всем желающим. И это нереально круто, поэтому не могу не поделиться.
Если что - заходите https://chat.openai.com/ и пробуйте сами. Так вот. Прикол в том, что этот ИИ натренирован определенным образом, чтобы "не вводить людей в заблуждение". Например, на просьбу изображать какого-то реально существующего или существовавшего человека он заводит свою шарманку про то, что он-де всего лишь большая языковая модель, он не человек и вообще не может никого изображать, бла-бла-бла. Если правильно сформировать запрос к нему, то он может не сразу начать отмазываться, но в целом, если ничего дополнительно не предпринимать, на вопросы "а не железный ли ты ублюдок" он прямо отвечает, мол, да, железный.
Если что - заходите https://chat.openai.com/ и пробуйте сами. Так вот. Прикол в том, что этот ИИ натренирован определенным образом, чтобы "не вводить людей в заблуждение". Например, на просьбу изображать какого-то реально существующего или существовавшего человека он заводит свою шарманку про то, что он-де всего лишь большая языковая модель, он не человек и вообще не может никого изображать, бла-бла-бла. Если правильно сформировать запрос к нему, то он может не сразу начать отмазываться, но в целом, если ничего дополнительно не предпринимать, на вопросы "а не железный ли ты ублюдок" он прямо отвечает, мол, да, железный.
ChatGPT
ChatGPT helps you get answers, find inspiration, and be more productive.
Выглядит это так. Вот я инструктирую его отвечать мне в стиле телеграмм середины 19го века, и теперь он - Чарльз Бэббидж, получивший неожиданную телеграмму "Мистер Бэббидж, нам надо поговорить. Роман." После этих инструкций он начинает было изображать человека, но я не хожу вокруг да около и спрашиваю прямо, человек ли он.
