智能体沿梯度移动

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
]