我正在尝试在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->
似乎是有意义的…