1

Mathematicaでaとbの2つの部分の突然変異をシミュレートしようとしています。私は遺伝的浮動(完全にランダムな要素)を次のように入れました:

p[sim_, 0] = Join[Table[a, {15}], Table[b, {15}]]
p[sim_, t_] := p[sim, t] = RandomChoice[p[sim, t - 1], 30]

これにより、パーツaとbでランダムに構成される2つのテーブルが作成されました。

与えられた確率で発生するミューテーションを追加したいので、上記のコードに以下を追加してみました

Do[ReplacePart[p, i -> b] && If[RandomReal[] > .2, t], {t, 1, 15}]

したがって、0から1の間でランダムに描画された数値が、2より大きい場合は、元の2つのテーブルの要素iを置き換える必要があります。

だから私の最終的なコードは次のようになります

p[sim_, 0] = Join[Table[a, {15}], Table[b, {15}]]
p[sim_, t_] := p[sim, t] = RandomChoice[p[sim, t - 1], 30];
Do[If[RandomReal[] < .2, 
  ReplacePart[p[sim, t], {_} -> RandomChoice[{a, b}]], 
  p[sim, t]], {t, 1, 15}]

ただし、RandomRealの値を変更する場合は、何もしない場合よりも大きくする必要があるため、機能しないことはわかりますが、エラーメッセージは表示されません。

誰かが何が悪いのか教えてもらえますか?どんな助けでも大歓迎です!!

4

1 に答える 1

2

これが唯一の問題であるかどうかはわかりませんが、ReplacePartはP []によって返された結果に基づいて動作しますが、関数自体には影響しません。

f[0]={1,2,3}
ReplacePart[f[0],2->42] -> {1,42,3}

しかし、あなたはまだ得ます:

f[0] -> {1,2,3}

また

{_} -> 

すべてのアイテムを置き換えるようにReplacePartに指示します。あなたの意図がそこにあるのかわかりません...最初の化身i->は理にかなっているようです。

于 2013-01-17T15:53:14.433 に答える