Клеточные автоматы - что делать на граничной ячейке?

Я пытаюсь реализовать клеточный автомат, имитирующий волновое поведение. Я использую район фон Неймана с r=2 как здесь

Мой вопрос: как я должен считать состояние ячейки на границе?

Например: у меня есть массив a, и я хочу подсчитать значение a[0][0].

Состояния ячеек — это числа с плавающей запятой в диапазоне (-1,1), где 0 — земля. На «обычных» ячейках я могу брать состояния соседей, но когда соседей меньше (‹12), результат просто неверный и «генерирует» новую волну.


person Nevaan    schedule 13.12.2015    source источник
comment
Вы можете показать свои усилия?   -  person Enamul Hassan    schedule 13.12.2015
comment
Один из вариантов — рассматривать плоскость, в которой живут ваши клетки, как тор, где верхний край соединяется с нижним краем, а правый край — с левым краем. так что -1,-1 совпадает с вашим верхним правым углом (при условии нижнего левого начала)   -  person pvg    schedule 13.12.2015
comment
Это решение, которое вы должны принять сами. Вы можете сделать это, как Snake от Nokia, где левая граница слева является правой границей. Другие реализуют это так, как будто граничные ячейки всегда ложны.   -  person Willem Van Onsem    schedule 13.12.2015
comment
@pvg Кажется, это хорошее решение, но только если я хочу смоделировать поведение в открытом море. В будущем мне нужно будет добавить берег (значения = 0), который не должен влиять на волны с другой стороны.   -  person Nevaan    schedule 13.12.2015
comment
@manetsus: github.com/durden2/waterSimulation/tree/master/src/ - вот мой репозиторий, извините за плохое качество кода   -  person Nevaan    schedule 13.12.2015
comment
@Nevaan, это очень сильно зависит от особенностей вашего CA и от того, как вы определяете «пригодность» или качество своих результатов, о чем мы ничего не знаем. Возможно, вы хотите, чтобы стены действовали как (потенциально неупругие) отражатели? Или идеальные поглотители? Просто нет очевидного способа ответить на этот вопрос, учитывая то, что вы предоставили.   -  person pvg    schedule 13.12.2015
comment
@pvg Извините, что не предоставил достаточно информации. Я хотел бы, чтобы «границы» CA (область вне моего массива) вели себя как идеальный поглотитель, а ячейки со значением 0 — стены или земля — вели себя как отражатель.   -  person Nevaan    schedule 13.12.2015


Ответы (1)


Есть разные решения вашей проблемы.

  1. Периодическое граничное условие: рассмотрите решетку как тор и используйте модуль для зацикливания ваших ячеек.

Пример: а[-1][0] = а[n-2][0]

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

Этот подход особенно подходит, если вы хотите провести количественное исследование вашей модели, например, фазовый переход, среднее поле и т. д.

  1. Инертное граничное условие: считайте, что граница вашей решетки имеет поглощающее правило, то есть они имитируют «внешние» ячейки, которые всегда имеют одни и те же инертные состояния.

Пример: a[-1][0] = 10e-6 или около того, потому что 0 означает землю.

Хорошая сторона: вы избегаете эффектов резонанса. Плохая сторона: потенциально пограничные эффекты, а также отсутствие внешнего источника волн.

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

  1. Будь креативным ...

Пример: Все граничные клетки являются сушей (0).

person OB1    schedule 17.05.2016
comment
Что подразумевается под резонансом в этом контексте (для модульного граничного условия)? - person mark mark; 07.03.2021