2011-07-25 7 views
-3

どのように私のセルオートマトンモデルでランダムな動きを持つことができますか?たとえば、セル内の要素が2つ以上の隣接セルよりも多ければ、いくつかの要素を与えるためにいくつかの隣接要素をランダムに選択したいと思います。私はすべてのコードを試してみましたが、問題はMathematicaで同じ要素がセルから生きていて別のものに行くことを確実にしなければならないということです。私は条件を使ってそれをすることを考えましたが、私はどのようにわかりません。誰でも助けてくれますか?セルオートマトンとランダム移動

編集:私が使用したコードは、これまで

私の実際のコードは非常に私は、私は単純なセルオートマトンでやっていることを教えてくれしようと複雑です。私はムーア近所の動きを成功させたかったのです。私のセルオートマトンのすべてのセルには、複数の人がいます(または全くありません)。私は自分の細胞間でランダムな動きをしたい。私はこれを行うことができませんでしたので、次のコードを試してみました。私のセルオートマトンでは、以下のように使いました。

w[i_, j_] := 
    If[(i - 4) > j, -1, If[(i - 4) == j, 0, If[(j - 4) > i, 1, 0]]]; 


dogs[p, p1, p2,p3,p4,p5,p6,p7,p8]:=newp &[ 
    newp = w[p, p1] + w[p, p2] + w[p, p3] + w[p, p4] + w[p, p5] + 
    w[p, p6] + w[p, p7] + w[p, p8]] 

このコードは、「動きをしていますが、セルは0それで個人や近隣諸国のすべての5を持っている場合は、最後にそれが8を有し、その隣人ので、私が望む正確に何ではありません4が、私はドンされますそれを望んでいません。なぜなら、私の中に少ない個体を持つ細胞が、隣にいる細胞よりも多くを持つことを望んでいないからです。私は彼らのすべてが彼らの中に密接な価値を持ち、まだ動きがあることを望みます。私はMathematicaでこれを行う方法を知らない。

+2

あなたの質問は一般的に、完全な実装を要求することになります。これまでに試したことを教えてください。 – Szabolcs

+0

大丈夫です、今まで私が行ってきたことを私の質問に編集します。 – noni

+2

私はあなたの質問の文章を整理しようとしましたが、あなたが提供する説明は非常に曖昧で、私はこれをやるのに苦労しています。あなたは使用する用語を定義しません。あなたの細胞の「要素」は何ですか? 「細胞から生きている」とは何ですか、あなたの「細胞間の動き」は何ですか?リストされたコードの2番目の部分はMathematicaの正しい文ではないので、これを修正してください。あなたの問題をよりよく説明するために図面や図を追加できますか?私はその貧しい言い回しを考えると、この質問を閉じるために投票するように誘惑されます。 –

答えて

2

セルオートマトンは特に複雑ではないので、私の最初のアドバイスはあなたが望むものを正確に把握することです。次に、古典的なトランジションルールを、導入している「ランダム」なアスペクトから分離することをお勧めします。

(* We abbreviate 'nbhd' for neighborhood *) 
getNbhd[A_, i_, j_] := A[[i - 1 ;; i + 1, j - 1 ;; j + 1]]; 

evaluateCell[A_, i_, j_] := 
    Module[{nbhd, cell = A[[i, j]], numNeighbors}, 

    (* no man's land edge strategy *) 
    If[i == 1 || j == 1 || i == Length[A] || j == Length[A[[1]]], 
     Return[0]]; 

    nbhd = getNbhd[A, i, j]; 
    numNeighbors = Apply[Plus, Flatten[nbhd]]; 

    If[cell == 1 && (numNeighbors - 1 < 2 || numNeighbors - 1 > 3), 
     Return[0]]; 
    If[cell == 0 && numNeighbors == 3, Return[1]]; 
    Return[cell]; 
    ]; 

evaluateAll[A_] := Table[evaluateCell[A, i, j], 
    {i, 1, Length[A]}, {j, 1, Length[A[[1]]]}]; 

evaluateAllを実行した後、あなたは「孤独」は、細胞のためのマトリックスを検索することができますし、それらをしてください移動:

は例えば、ここでライフゲームの私の実装です。

コードがどのように機能するかについての追加情報、および動作しているコードの例については、my blog post on Conway's Lifeを参照してください。これにはMathematicaノートブックが含まれており、完全な実装とたくさんの例があります。

+0

非常にありがとう:) – noni

関連する問題