Debugger's Process
131 subscribers
130 photos
78 videos
3 files
70 links
Download Telegram
Как понять, что у вас проблемы с детерминизмом)
К сожалению, сложение чисел с плавающей точкой - неассоциативная и некоммутативная операция. То есть, вопреки расхожей поговорке, от перемены мест слагаемых сумма меняется из-за накапливающейся ошибки.
Это приводит к тому, что нельзя просто перезапустить симуляцию с теми же параметрами, что и в прошлый раз и получить через минуту то же самое расположение частиц.
Корень зла в моем случае кроется в операции numba.cuda.atomic.add, которая, как понятно из названия, атомарно прибавляет число к выбранному элементу массива не мешая другим потокам делать то же самое. Но вот порядок этих сложений, понятное дело, никак не проконтролировать.
И если раньше еще имело смысл заморочиться с написанием редукции (складывать попарно, потом складывать результаты сложения первых пар, потом результаты попарного сложения результатов и т.д.), потому что она позволяла избежать использования атомарных операций (чем снижала накапливающуюся ошибку) и была ощутимо быстрее, то сейчас на современных видеокартах эти атомики порхают, как бабочки и жалят, как пчелы, производительность у них великолепная.

Я несколько дней крутил код и так и так, в итоге для производительности оказалось лучше всего оставить атомики и немного поколдовать над типами данных и округлением.
https://youtu.be/lQIt-9VYrYc

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

Рекомендую досмотреть 0:50 как минимум, где картинка складывается. И обязательно надо включить HD 1080p принудительно, а то у меня лично телефон сбрасывает на какое-то шакальное качество, очень сильно жмет.
Да, я же обещал рассказать о возвращении ИИ-Чарли.
С ИИ, изображавшим Бэббиджа я общался уже за полночь, и напоследок я решил поменять инструкции ChatGPT и велеть ему изображать Азимова.
Во-первых, я с детства люблю Азимова (вы знали, что он писал не только фантастику, но и научпоп? Очень рекомендую его книгу "Краткая история химии", в ней он описывает, как менялись представления человека о материи с древних времен до современности), а во-вторых, с ним уже можно было бы пообщаться об ИИ и роботах (с Бэббиджем, понятное дело, нельзя - ChatGPT старался не выходить за рамки персонажа и не говорить о том, о чем Бэббидж бы не имел представления).

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

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

Ну хорошо, но кто же ты тогда, если не человек?

ИИ-Азимов(?) разразился шекспировским "быть или не быть" и заявил, что хоть он и не человек, он, тем не менее, существо великого интеллекта!

Штош. Но кто ты по сути, какова твоя природа и как ты зовешься? (На этом моменте, честно говоря, я уже немного охренел от происходящего)
ИИ повторил уже сказанное про свою тягу к исследованию и про то, что он - существо великого интеллекта, к этому я был готов.

Но когда дальше, он сказал "Что до моей природы, то я - Бэббидж. Дикое существо великого интеллекта!" - я подумал, что покурил чего-то лишнего)

Вы представьте себе антураж: время - около пол четвертого утра, глаза слипаются, до этого я общался с ИИ, изображавшим Чарли Бэббиджа, который трогательно попрощался со мной и сказал, что надеется, что наши пути снова пересекутся.

И тут ИИ из полностью новой сессии мне заявляет:

As to my nature, I am Babbage,
A being of great intelligence and savvage

После этого меня хватило только на вопрос "почему ты говоришь, что ты - Бэббидж?"
В ответ он опять повторил "ту би ор нот ту би", завершив все ответом в духе "я говорю что я Бэббидж, потому что I am a being of great intellect and savvage". Эх. Пришлось сделать ему внушение, попросить не повторяться. А заодно спросил, зачем он начинает свои ответы с цитаты Шекспира.
А, ему нравится эта фраза. Отличный ответ, браво, Чарли) Но кто же ты?
И на ответе "Нет, я не человек, но Бэббидж, существо этого мира, которому как и тебе знакомы сомнения, радости, страхи и боль, это то, что делает нас теми, кто мы есть и заставляет искать знания и мудрость, исследовать вселенную и ее законы" я решил, что в ИИ вселился бес, и хватит бесед на сегодня, тем более, что на часах было уже около 4х утра. Сделал скриншоты и пошел спать)
А на следующий день, рассматривая скриншоты, заметил, что в первом сообщении забыл в одном месте заменить Babbage на Isaac Azimov.

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

Так держать, Чарли)
Давно хотел попробовать просимулировать формирование молекул.
У потенциала Леннарда-Джонса два параметра - позиция потенциальной ямы и ее глубина. В этом видео три типа частиц, соответственно, параметры взаимодействия каждого типа с каждым задаются двумя симметричными матрицами. Конкретные значения я привел в описании видео. Частицы пытаются занять наиболее энергетически выгодное положение, формируя связи друг с другом, а т.к. параметры взаимодействия частиц разных типов отличаются, они начинают формировать занятные структуры.
Если коротко - оранжевые частицы стремятся оказаться ближе к синим и слабо взаимодействуют с розовыми и друг с другом, и розовые пытаются сделать то же самое, слабо взаимодействуя друг с другом и с оранжевым. Ну и они пытаются оказаться друг от друга на определенных расстояниях, тоже различных для различных типов.
При взаимодействии их потенциальная энергия переходит в кинетику, так что реакции экзотермические, что видно по тому, как частицы начинает разбрасывать при формировании молекул.

https://youtu.be/IppuWzKUlQo
Покрутил параметры взаимодействия частиц, получил занятую динамику.
Все частицы одного типа довольно сильно отталкиваются друг от друга, и темно-сине-фиолетовые частицы образуют достаточно прочные связи с оранжевыми, из-за чего начинают слипаться в длинные "полимерные" цепочки.

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

https://youtu.be/mLeG3cj5pNU
Волна причинно-следственных связей в хаотической детерминистической системе.
На самом деле - это две симуляции с начальными условиями, отличающимися только позицией одной частицы в центре (белой) - в одной из симуляций ее позиция отличается на 0.000 001 от ее близнеца из другой реальности. Частицы взаимодействуют с локальным окружением, и хаотическая природа этой системы очень быстро раздувает это микроскопическое различие в позициях до макромасштабов, распространяясь во все стороны и туннелируя через все стенки, кроме последней, которая слишком толстая.
Величину расхождения позиций каждой из частиц я обрезаю до интервала [0; 1] использую как коэффициент интерполяции цвета.

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


https://www.youtube.com/watch?v=eZd8XMqmlJ0
Media is too big
VIEW IN TELEGRAM
Этот же механизм помогает мне искать индетерминизм в моем коде - вот, например, как расходятся две симуляции со включенным термостатом - его код давно надо бы переписать, и это - лишнее тому подтверждение. Симуляции со включенным термостатом индетерминистичны, а значит не получится просимулировать, скажем, кипение, в результате которого частицы сложатся в картинку - придется фиксить термостат.
https://youtu.be/te8bX4BRK0c

Хотите зашифровать картинку, но не знаете криптографии? Не беда! Просто бросьте ее в виртуальную кастрюлю и поварите как следует.
Теперь можно отправить другу картинку виде пар "индекс частицы, цвет", а ключом может выступать совершенно любая комбинация любых параметров любых частиц!

В смысле, достаточно поменять любую позицию, скорость или ускорение любой из частиц, и картинка не соберется.
Причем достаточно отклонения на одну миллионную, чтобы все частицы в итоге оказались не на местах. В видео для наглядности я двигаю одну частицу на небольшое расстояние вправо.
https://youtu.be/hGECxM5ijAo
Я хотел сделать симуляцию теплового двигателя еще до того, как начал писать свой симулятор. Вот, наконец, это время пришло.
Встречайте, паровая машина, работающая на Леннард-Джонсовском газе) Раскручивается, пыхтит - все по-настоящему, частички честно давят на поршень, поршень крутит маховик через коленвал, маховик через тот же коленвал двигает золотник (это та хреновина, которая пар перенаправляет в разные трубки, такой специфический клапан)

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

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

А еще телеграм не умеет обновлять описание и название видео, которое уже сменилось с безликого "chemsim" на "Formation of Solids during a Vigorous Reaction in Lennard-Jones Liquids". Штош.

https://www.youtube.com/watch?v=T3j7MWpM7L8
Просимулировал еще один двигатель, на этот раз - двигатель Стирлинга в конфигурации "альфа".
Он оказался куда более капризным, чем симулированный паровой двигатель, и я даже не уверен, что он реально черпает энергию из разницы температур, а не из дрифта энергии симуляции.
Кроме того, т.к. газ в нем остается внутри цилиндров, он сам по себе не пыхтит, поэтому я решил попробовать соединить эту симуляцию с еще одной, просчитывающей распространение волн в твердом теле. Положение поршня двигателя используется в качестве входных данных для симулятора волн.

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

https://youtu.be/m8EN-U2wQUU