Окружающий мир как компьютерная симуляция

image
На правах пятничного поста.

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

Перед началом обсуждения рекомендуется освежить в памяти этот пост. Речь идет об «неравенствах Белла». Уже проведены достоверные эксперименты, показывающие нарушение этих неравенств, и здесь мы сразу принимаем за истину, что наша реальность «мутна», а «очки» (наблюдатель) придают ей четкость.

Полная версия любимого xkcd №505
image

Хоть и опасаясь гнева теологов, проведу небольшое, слегка наивное, философское вступление. Попробуем поставить себя на место истинно всемогущего существа. Трудоемкость любого действия для нас — О (1). С подобными силами мы можем создать вселенную, единственный физический закон которой — наша Воля. Никаких ухищрений, никаких сложностей. Никакой квантовой механики, «мутной» реальности, Большого Взрыва. Никакой «игры в кости» :)
Вообще, стремление к созданию чего-либо сложного, расширяющего границы возможного, это прерогатива существ с ограниченными возможностями, например нас — людей. Мы слабы, старимся, умираем без воздуха, без пищи. Но мы вечно хотим прыгнуть выше головы (и, что характерно, таки прыгаем). Будут ли такие стремления у истинно всемогущего существа? Сомнительно.

Теперь поставим себя на место всё-таки не безгранично могущественного существа. Пусть у нас будут серьезные мощности. Мы пробуем сэмулировать Вселенную. У нас есть отличные алгоритмы для обсчета поведения совокупности из N частиц эмулируемого мира. Трудоемкость алгоритма O (N*logN) (можно даже представить что O (N)). Занимаемая на эмуляцию память также пропорциональна N. Проблема! Получается, чтобы эмулировать «четкую» реальность, требуется (грубо говоря) вычислительный кластер, соотносимый по размерам с эмулируемой вселенной.

И тут нам приходит в голову гениальная идея реализации — сделать эмулируемую реальность «мутной»! Колоссальная оптимизация как производительности, так и объема хранимых данных. Недетерминизм эмуляции как следствие? Не баг, а фича!

Конечно, на случай если вдруг понадобится рассмотреть что происходит в реальности подробно, используем добротный ГПСЧ и волновую функцию для генерации микро-мира на заданном участке. А пока можно хранить только обобщенные параметры пространства. (Очевидно, ответственный за этот участок разработчик любит ленивые вычисления).

Уже в середине разработки ТЗ меняется: хочется сбалансированную Вселенную. Вводим совершенно обособленное (пусть поломают головы) взаимодействие — гравитацию. Таким образом, компенсируем суммарные массу-энергию Вселенной отрица­тельной энергией гравитационного взаимодействия ее частей.

После ряда неудачных экспериментов с разгоном объектов, хардкодим константу предельной скорости — скорость света в вакууме. Естественно, ограничение действует только при работе с публичным API, в то время как зависимости квантово запутанных объектов, и взаимное воздействие гравитационных объектов спокойно передаем по внутренним шинам движка без задержек. Потом оказывается, что есть «уязвимость» для передачи данных выше скорости света, если обитатели эмулируемого мира додумаются до «слабого квантового измерения».

Правда со скоростью всё равно что-то неладно — время жизни быстро движущихся частиц увеличивалось. Архитектор говорит, что это баг рассинхронизации участков симуляции, между которыми частица перемещается слишком быстро, и не везде ей успевают инкрементировать счетчик 'времени'. Добавил, что исправить можно, переписав кластеризацию практически с нуля, и мы плюнули на это.

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

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

»Ах, гравитация, бессердечная ты сволочь! » — слова нашего архитектора, наблюдающего, как вся симуляция коллапсирует в сингулярную точку в первые же мгновения после старта системного теста. Ничего, это можно решить аккуратным подбором стартовых параметров и констант.

Наконец, мир отлажен и запущен. Хотим, помимо всего прочего, понаблюдать за стихийным развитием форм жизни. После пары тысяч прогонов, жизнь так и не появилась. Лезть в рабочий мир и что-либо менять во время его «рантайма» не хочется. Приходится еще раз долго подбирать стартовые параметры и переменные окружения, проводя тонкую настройку. Жизнь наконец зарождается (привет, антропный принцип).

Теперь сидим, (с попкорном), внимательно наблюдаем за развитием симулируемых подопытных. Ждём пока они догадаются.
Ну или начнут свою эмуляцию строить. Зачем? Затем же, что и мы — потому что мы можем.

© Geektimes