首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >沿梯度移动的智能体

沿梯度移动的智能体
EN

Stack Overflow用户
提问于 2020-04-13 05:27:57
回答 1查看 32关注 0票数 0

我想创造一个场景,海龟用他们刚刚移动到的补丁检查他们之前的补丁,如果新补丁有更高的c值,那么海龟将在其计算中使用new_p1在状态0或1之间切换(这是模拟翻滚和运行大肠杆菌)。在决定继续运行(0)或切换到翻滚(1)之后,它应该更新它的oldc值,以便做出进一步移动的决定。根据平衡计算,海龟在产卵时也会被分配0或1状态。我的问题是,运行程序时,我没有看到乌龟在右边累积(我已经沿着每个补丁创建了一个梯度,右边越远,补丁的c值越高)。

代码语言:javascript
复制
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

]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-13 09:21:55

我发现了问题所在,在这种情况下,我应该使用ifelse而不是if,因为它允许在运行过程之后继续执行tumble过程

代码语言:javascript
复制
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
]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61178409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档