Имитация клеточных автоматов с четырехмерным столом в Mathematica - PullRequest
0 голосов
/ 08 июля 2011

В книге Моделирование клеточных автоматов Имитация с помощью mathematica , автор использует следующий код для моделирования клеточных автоматов в двумерной решетке:

Из окрестностей Мура правило обновления

update[site, N, E, S, W, NE, SE, SW, NW]

где N = север, E = восток, S = юг, W = запад, северо-восток = северо-восток, юго-восток = юго-восток, юго-восток = юго-восток, северо-запад = северо-запад.Эти аргументы представляют собой значения ближайших соседей в окрестностях мавров.Чтобы применить эти правила, он использует следующий код:

Moore[func_, lat_]:= MapThread[func,Map[RotateRight[lat,#]&,
{{0,0},{1,0},{0,-1},{-1,0},{0,1},
{1,-1},{-1,-1},{-1,1},{1,1}}],2]

Для таблицы, подобной следующей (стр. 144 из книги)

pasture= Table[Floor[Random[]+(preyDensity+predDensity)]*
Floor[1+Random[]+predDensity/(preyDensity+predDensity)],{n},{n}]/. 
2:>{RND,Random[Integer, {1,3}],Random[Integer,{1,5}]}

RND:= Random[Integer, {1,4}]

он использует следующее правило обновления

update[{_,0,0},_,_,_,_,_,_,_,_]  := {RND, 3,5}

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

InitialMatrix[x_, y_, age_, disease_] :=
  ReplacePart[
    Table[3, {x}, {y}, {age}, {disease}], {{_, _, 1, _} -> 
  0, {_, _, 2, 1} -> 
  Floor[dogpopulation*0.2/cellsno], {_, _, 2, 3} -> 
  Floor[dogpopulation*0.05/cellsno], {_, _, 3, 1} -> 
  Floor[dogpopulation*0.58/cellsno], {_, _, 3, 3} -> 
  Floor[dogpopulation*0.15/cellsno]}] /. 
  3 :> If[RandomReal[] > 0.2, 0, RandomInteger[{1, 2}]];


update[{{x_,0,0},{y_,z_,w_},{a_,b_,c_}},_,_,_,_,_,_,_,_] :=
                                            {{x-1,0,0},{y+z,0,w},{a,b,c}}

Это пример того, как я могу использовать свою таблицу для работы с клеточными автоматами.Могу ли я сделать что-то подобное?Или я не прав?

Изменить мою таблицу

Изменив мою таблицу на следующий код, приведенный ниже, можно ли использовать вышеприведенное правило обновления?

MyMatrix[x_, y_, age_, disease_] :=
  Table[0, {x}, {y}] /. 
    0 :> ReplacePart[
      Table[3, {age}, {disease}], {{1, _} -> 0, {2, 1} -> 
    Floor[dogpopulation*0.2/cellsno], {2, 3} -> 
    Floor[dogpopulation*0.05/cellsno], {3, 1} -> 
    Floor[dogpopulation*0.58/cellsno], {3, 3} -> 
    Floor[dogpopulation*0.15/cellsno]}] /. 
   3 :> If[RandomReal[] > 0.2, 0, RandomInteger[{1, 2}]];

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Большую часть кода для книги «Моделирование клеточных автоматов с помощью математики» можно найти на веб-сайте Wolfram (library.wolfram.com?). Если вы ищете имя автора, вы найдете пример кода для большинства тем, рассматриваемых в книге.

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

Удачи!

1 голос
/ 11 июля 2011

Книга "Моделирование клеточных автоматов" Моделирование с помощью mathematica "была написана более 15 лет назад, поэтому рекомендую взглянуть на функцию CellularAutomaton [] в Mathematica.

Функция CellularAutomaton [] немного сложна, но если вы хотите сделать 2D Moore CA, вот как вы вызываете эту функцию:

CellualrAutomaton [{func [#] &, {}, {1,1}}, initialMatrixVal, numIterations];

То, что будет делать приведенный выше код, это вызов функции func [], с окрестностью Мура в качестве fn param для каждого узла в initialMatrixVal для времен "numIterations".

Функция CellularAutomaton [] предполагает периодические граничные условия.

Надеюсь, это поможет!

...