Правила обновления сотовых автоматов Mathematica - PullRequest
0 голосов
/ 12 июля 2011

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

Я использую соседство Мура со следующей функцией обновления

update[site,_,_,_,_,_,_,_,_]

Я пытался заставить их двигаться в соответствии со всеми своими соседями, но это очень сложно, и мне интересно, упростит ли это ипроверьте это со всеми его соседями индивидуально, это будет неправильно.

Спасибо

Ответы [ 2 ]

2 голосов
/ 13 июля 2011

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

Выполнение вида «хищник-жертва»моделирование с CA немного сложнее, поскольку на каждом шаге (в отличие от традиционного CA) значение центральной ячейки изменяется ВМЕСТО со значением соседней клетки!

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

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

2 голосов
/ 12 июля 2011

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

Я думаю, что вы спрашиваете, каков наилучший способ выбора района, и вы можете сделать это с помощью Part:

(* We abbreviate 'nbhd' for neighborhood *)

getNbhd[A_, i_Integer?Positive, j_Integer?Positive] := 
    A[[i - 1 ;; i + 1, j - 1 ;; j + 1]];

Это выберет соответствующий район Мура, включая дополнительную центральную ячейку, которую вы можете отфильтровать при вызове функции обновления.

В частности, для выполнения шага обновления сотового автомата необходимо обновить все ячейки одновременно. В реальном мире это означает создание отдельного массива и размещение там обновленных значений, а затем удаление исходного массива.

Подробнее см. В моем блоге Cellular Automata , в котором содержится реализация игры Конвея «Жизнь в Mathematica».

...