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

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

С технической точки зрения, я не вижу никакой априорной причины, по которой вы не могли бы смоделировать какой-либо объект, который вам может понадобиться, при условии, что вы готовы ввести произвольное количество дополнительных переменных слоев. (или, что то же самое, кодировать данные в одну очень сложную матрицу; это не имеет большого значения). Например, вам может понадобиться добавить слой 2D-сетки для «текущей лавы» и «вулканического пепла» и, возможно, для чего-то еще, например, для «импульса лавы» и «температуры лавы». Итак, я думаю, вы можете начать видеть трудности, которые я бы посчитал двумя способами:

  • Для каждой функции, которую вы добавляете в автомат, вы вынуждены моделировать процесс; это означает, что вы должны разработать его, а также протестировать и настроить параметры, чтобы получить разумные результаты. И если он взаимодействует с другими функциями, что, вероятно, будет происходить, вы усложняете систему с высокой скоростью.
  • С более эстетической точки зрения, мы как бы нарушаем дух клеточных автоматов, если не строгие требования. Игра «Жизнь» и другие примеры так красивы и элегантны, потому что видно все, что закодировано в состоянии среды: процесс и результат — одно и то же. Но если мы начнем добавлять все эти вычислительные слои, большинство из которых не представляют интереса для создателя мира, он станет непрозрачным. И мы должны спросить, почему мы используем автоматы в первую очередь.

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

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

  1. Наложите некоторую регулярность и будьте строги с некоторыми видами реализма. Никаких пустынь, где мир должен быть влажным, и так далее, и тому подобное.
  2. Получите новизну и неожиданность от взаимодействия некоторых нетривиальных компонентов модели — то есть, хотя правила просты, их взаимодействие непредсказуемо (см.: теория сложности/хаоса).

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

На заметку по теме: собираетесь ли вы быть строгим с клеточными автоматами или нет, когда вы начинаете добавлять множество функций, вы определенно увеличиваете сложность и время вычислений, вполне возможно, в геометрической прогрессии. Я обнаружил, что лучший способ бороться с этим и сохранить управляемость — очень четко разделить модель на разные сосуществующие временные шкалы. Это означает, что разные процессы происходят в разных масштабах времени, которые перекрываются. Например, геологическое время течет дискретными шагами, может быть, по 100 000 лет каждый; в то время как гидрология работает отдельно, с несколькими временными шагами для каждого геологического. И экология может работать внутри этого и так далее. Таким образом, вы не пытаетесь запустить все в наименьшей степени и в наименьшую единицу времени, потребляя все ресурсы вашего процессора без веской причины.