我正在尝试在 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 的值必须大于不做任何事情,但我没有收到错误消息。
谁能告诉我出了什么问题?任何帮助将不胜感激!!