在 NetLogo 中改变海龟变量的好方法是什么?
What would be a good approach to mutate a turtle variable in NetLogo?
我正在模拟一个多代理系统。每个代理都有一个染色体。基因型代表 5 个参数,它们是 0 到 100 之间的各种浮点数。我的变异算子只是用一个新的随机数(根据恒定变异率)修改原始基因。这是最好的方法还是您可以建议另一种方法?例如,是否可以在位数字级别改变参数以提供更高的精度?
My mutation operator
您的意思是要根据基因的当前值修改基因值,而不是简单地替换它?也许这对你有用:
globals [ genome ]
to setup
ca
set genome n-values 5 [ random 101 / 100 ]
print word "Original genome: " genome
reset-ticks
end
to mutate
set genome map [
i ->
ifelse-value ( random-float 1 < 0.2 )
[ precision ( i + one-of [ 0.01 -0.01 ] ) 2 ]
[ i ]
] genome
print word "Mutated genome: " genome
end
在这里,基因组是在setup
中随机创建的,然后每次调用mutate
,每个基因都有机会增加或减少0.01。输出:
Original genome: [0.09 0.77 0.41 0.97 0.8]
Mutated genome: [0.08 0.77 0.41 0.96 0.8]
Mutated genome: [0.08 0.76 0.41 0.97 0.8]
Mutated genome: [0.08 0.75 0.41 0.97 0.8]
Mutated genome: [0.09 0.75 0.42 0.97 0.8]
我正在模拟一个多代理系统。每个代理都有一个染色体。基因型代表 5 个参数,它们是 0 到 100 之间的各种浮点数。我的变异算子只是用一个新的随机数(根据恒定变异率)修改原始基因。这是最好的方法还是您可以建议另一种方法?例如,是否可以在位数字级别改变参数以提供更高的精度?
My mutation operator
您的意思是要根据基因的当前值修改基因值,而不是简单地替换它?也许这对你有用:
globals [ genome ]
to setup
ca
set genome n-values 5 [ random 101 / 100 ]
print word "Original genome: " genome
reset-ticks
end
to mutate
set genome map [
i ->
ifelse-value ( random-float 1 < 0.2 )
[ precision ( i + one-of [ 0.01 -0.01 ] ) 2 ]
[ i ]
] genome
print word "Mutated genome: " genome
end
在这里,基因组是在setup
中随机创建的,然后每次调用mutate
,每个基因都有机会增加或减少0.01。输出:
Original genome: [0.09 0.77 0.41 0.97 0.8]
Mutated genome: [0.08 0.77 0.41 0.96 0.8]
Mutated genome: [0.08 0.76 0.41 0.97 0.8]
Mutated genome: [0.08 0.75 0.41 0.97 0.8]
Mutated genome: [0.09 0.75 0.42 0.97 0.8]