智能体沿梯度移动
Agents moving along a gradient
我想创建一种情况,让海龟用它们刚移动到的补丁检查他们以前的补丁,如果新补丁具有更高的 c 值,那么乌龟将在其计算中使用 new_p1在状态 0 或 1 之间切换(这是大肠杆菌的模型翻滚和 运行)。在决定保持 运行 (0) 或切换到翻滚 (1) 之后,它应该更新它的 oldc 值,以便做出进一步移动的决定。根据平衡计算,海龟在产卵时也被分配了 0 或 1 状态。我的问题是 运行 程序我没有看到海龟在右边累积(我已经沿着每个补丁创建了一个渐变,越右边补丁的 c 值越高)
ask turtles [
if (status = 0)
[
fd 0.3
set heading heading + 10 * (2 * random-float 1.0 - 1.0)
set rsq xcor * xcor + ycor * ycor
set msq msq + rsq
ifelse (c > oldc)
[if ( random-float 100 < new_p1 ) [set status 1]][if ( random-float 100 < p1 ) [set status 1]]
set oldc c
]
fd 0.02
set heading heading + 180 * (2 * random-float 1.0 - 1.0)
set rsq xcor * xcor + ycor * ycor
set msq msq + rsq
if ( random-float 100 < p2 ) [set status 0]
set oldc c
]
我发现了问题,在这种情况下,我应该使用 ifelse 而不是 if,因为它允许在 运行 过程 运行
ask turtles [
ifelse (status = 0)
[
fd 0.3
set heading heading + 10 * (2 * random-float 1.0 - 1.0)
set rsq xcor * xcor + ycor * ycor
set msq msq + rsq
ifelse (c > oldc)
[if ( random-float 100 < new_p1 ) [set status 1]][if ( random-float 100 < p1 ) [set status 1]]
set oldc c
]
[
fd 0.02
set heading heading + 180 * (2 * random-float 1.0 - 1.0)
set rsq xcor * xcor + ycor * ycor
set msq msq + rsq
if ( random-float 100 < p2 ) [set status 0]
set oldc c
]
我想创建一种情况,让海龟用它们刚移动到的补丁检查他们以前的补丁,如果新补丁具有更高的 c 值,那么乌龟将在其计算中使用 new_p1在状态 0 或 1 之间切换(这是大肠杆菌的模型翻滚和 运行)。在决定保持 运行 (0) 或切换到翻滚 (1) 之后,它应该更新它的 oldc 值,以便做出进一步移动的决定。根据平衡计算,海龟在产卵时也被分配了 0 或 1 状态。我的问题是 运行 程序我没有看到海龟在右边累积(我已经沿着每个补丁创建了一个渐变,越右边补丁的 c 值越高)
ask turtles [
if (status = 0)
[
fd 0.3
set heading heading + 10 * (2 * random-float 1.0 - 1.0)
set rsq xcor * xcor + ycor * ycor
set msq msq + rsq
ifelse (c > oldc)
[if ( random-float 100 < new_p1 ) [set status 1]][if ( random-float 100 < p1 ) [set status 1]]
set oldc c
]
fd 0.02
set heading heading + 180 * (2 * random-float 1.0 - 1.0)
set rsq xcor * xcor + ycor * ycor
set msq msq + rsq
if ( random-float 100 < p2 ) [set status 0]
set oldc c
]
我发现了问题,在这种情况下,我应该使用 ifelse 而不是 if,因为它允许在 运行 过程 运行
ask turtles [
ifelse (status = 0)
[
fd 0.3
set heading heading + 10 * (2 * random-float 1.0 - 1.0)
set rsq xcor * xcor + ycor * ycor
set msq msq + rsq
ifelse (c > oldc)
[if ( random-float 100 < new_p1 ) [set status 1]][if ( random-float 100 < p1 ) [set status 1]]
set oldc c
]
[
fd 0.02
set heading heading + 180 * (2 * random-float 1.0 - 1.0)
set rsq xcor * xcor + ycor * ycor
set msq msq + rsq
if ( random-float 100 < p2 ) [set status 0]
set oldc c
]