Mathematica模拟随机模拟



我正在尝试在Mathematica中模拟a和b两个部分的突变。我把遗传漂变(完全随机元素)放入:

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

创建了a和b两个随机组成的表。

我想添加突变,以给定的概率发生,所以我尝试将以下内容附加到

上面的代码中
Do[ReplacePart[p, i -> b] && If[RandomReal[] > .2, t], {t, 1, 15}]

因此,如果0到1之间随机抽取的数字大于0.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必须大于不做任何事情,但我没有得到一个错误消息。

谁能告诉我出了什么问题?任何帮助都将非常感激!!

不确定这是否是您唯一的问题,但ReplacePart对p[]返回的结果进行操作,但不影响函数本身,ie .

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

但是你仍然得到:

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

{_} -> 

告诉ReplacePart替换每个项。我不知道你的目的是什么……第一个化身i->似乎是有意义的…

最新更新