time - 每蜱释放两只海龟 netlogo

标签 time netlogo release agent

我目前正在开发一个模型,可以在购物时模拟行人的运动。所以,我已经想出了一些我需要的东西,但我一直在试图弄清楚如何在某个补丁中每次蜱释放 2 只海龟(比如一对)。两只海龟同时被释放。我的代码基于 Ant 线,但它只是一次性释放所有行人,然后乌龟开始行走。所有海龟被释放后,蜱虫也会开始出现。我希望海龟进入时就开始“行走”。 这是我的代码:

breed [ leadvisitors leadvisitor ]
breed [ visitors visitor ]

to setup
  clear-all
   setup-visitors
reset-ticks
end

to setup-visitors 
  create-leadvisitors num-of-pedestrians * 0.1    ;;create 10% of the total number of pedestrians
  [ 
    set demand-type "none"
    set color black
    set size 1
    setxy 0 16
    set heading 180
    set pen-size 1
    set destination one-of patches
    set wait-time -1
    set demand-lvl 0    
  ]
  create-visitors (num-of-pedestrians - (num-of-pedestrians * 0.1)) 
  [ set demand-type 0
    set size 1
    setxy 0 16
    set heading 180
    set pen-size 1
    set destination one-of patches
    set wait-time -1
    set demand-lvl 1
    set attracted? false
  ]  ]
end

to go
  if turtles = 0  [ stop ]

  ask turtles 
  [ 
    set-demand-type  
    have-demand
  ]  


  if ticks > 100 [ stop ]
  tick
  display-labels
end

;;;;; visitor's internal state of demand ;;;;;

to set-demand-type
  if demand-type = 0
  [ set demand-type "food"
    set color red
    let target (patches in-cone visitor-vision-depth visitor-view-angle) with [pcolor = red] 
  ]
end 

to have-demand  
  if demand-lvl = 0 
  [
    ifelse wait-time = -1 
    [ stroll ]

    [ set wait-time wait-time - 1
      if wait-time = 0
      [ stroll ]]
    ]

  if demand-lvl = 1
    [ ifelse wait-time = -1 
      [ stroll
        evaluate ]

      [ set wait-time wait-time - 1
        if wait-time = 0
        [ stroll 
          evaluate ]] 
    ] 
end 

to stroll 
if any? neighbors with [ pcolor = gray - 3 ]
  [ die ]

  ifelse any? neighbors with [ pcolor = gray or pcolor = orange or pcolor = blue or pcolor = red]
  [ facexy exitpt-x exitpt-y ]
  [ rt random-float visitor-view-angle lt random-float visitor-view-angle ]
  fd walking-speed  
end

to evaluate 
  if any? neighbors with [ pcolor = gray or pcolor = orange or pcolor = blue or pcolor = gray - 4 or pcolor = gray - 3 or pcolor = red + 2]
  [ facexy exitpt-x exitpt-y 
    rt random-float visitor-view-angle lt random-float visitor-view-angle 
    fd walking-speed ]

  let _mycolor color
  if any? (patches in-cone visitor-vision-depth visitor-view-angle) with [pcolor = _mycolor]
  [ let new-target max-one-of ( patches with [pcolor = _mycolor] in-cone visitor-vision-depth visitor-view-angle) [patch-influence]
    let dist-to-new-target min-one-of (patches with [pcolor = _mycolor] in-cone visitor-vision-depth visitor-view-angle) [distance myself]
    face new-target
    set heading towards new-target
    fd walking-speed   
    set attracted? true       

    attracted-and-visiting
    re-evaluate 
   ]


end 

to attracted-and-visiting        
   if pcolor = red + 2
   [ set heading towards one-of patches with [pcolor = red + 2]
     fd 0
     set patch-popularity patch-popularity + 1
     set wait-time avg-waiting-time 

    if count turtles-here > 0
        [ set num-of-visitors num-of-visitors + 1 ]
          set plabel num-of-visitors 
   ]      
end


to re-evaluate
  let _mycolor color
  if not any? (patches in-cone visitor-vision-depth visitor-view-angle) with [pcolor = _mycolor]
  [ set attracted? false ]

  ifelse choose? [set heading towards one-of patches with [pcolor = _mycolor]] [facexy exitpt-x exitpt-y]    
end


to-report choose?
  report random 2 = 0
end

最佳答案

根据我们反复评论的结果,让我来看看您正在寻找什么。我假设您想创建 leadvisitors在运行开始时添加两个 visitors随着运行的进行,每刻。如果是这样,那么你的setup程序看起来像

globals [num-visitors-created]

to setup
  clear-all
  set num-visitors-created 0
  create-leadvisitors num-of-pedestrians * 0.1  [
    set demand-type "none"
    set color black
    set size 1
    setxy 0 16
    set heading 180
    set pen-size 1
    set destination one-of patches
    set wait-time -1
    set demand-lvl 0
    set num-visitors-created num-visitors-created + 1
  ]
  reset-ticks
end

创建您的leadvisitors ,但没有visitors 。注意全局变量num-visitors-created跟踪 leadvisitors 的数量和visitors创建,每次 leadvisitor 时加一或visitor已创建。

在您的 go 中过程中,您将每次创建两个访问者,直到总数 visitorsleadvisitors创建达到num-of-pedestrians 。 (如果只有一个新访客的空间,您是否希望只创建一个,还是需要成对创建它们?我假设是后者。)因为您不希望访客死亡为新的打开空间,我们测试创建的数量,而不是仍然存活的数量。

to go
  if turtles = 0  [ stop ]

  ; create a new pair of visitors if there is room.
  if num-visitors-created <= (num-of-pedestrians - 2)
    create-visitors 2 [ 
      set demand-type 0
      set size 1
      set heading 180
      set pen-size 1
      setxy 0 16
      set destination one-of patches
      set wait-time -1
      set demand-lvl 1
      set attracted? false
      set num-visitors-created num-visitors-created + 1
    ]

  ask turtles 
  [ 
    set-demand-type  
    have-demand
  ]

  if ticks > 100 [ stop ]
  tick
  display-labels
end

(既然leadvisitors也可能会死,你是否想保留leadvisitors的某个最小数量或比例?如果是这样,你应该提出一个新问题。)

上面的代码将创建一对新的 visitorspatch 0 16在每个刻度处。但是,如果您想拥有新的 visitors在不同的补丁上创建,例如红色补丁之一,您可以在 go 中创建程序有那个补丁sprout新访客。

  ask one-of patches with [pcolor = red] [
    sprout-visitors 2 [ 
      set demand-type 0
      set size 1
      set heading 180
      set pen-size 1
      set destination one-of patches
      set wait-time -1
      set demand-lvl 1
      set attracted? false
      set num-visitors-created num-visitors-created + 1
    ]
  ]

请注意,此处未设置新访问者的 xy 坐标,因此他们从产生它们的补丁开始。

关于time - 每蜱释放两只海龟 netlogo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60796907/

相关文章:

c++ - __time32_t 时间精度?

c++ - Qt如何修改windows系统时间?

NetLogo 6 和 rnd 扩展

Netlogo 时间与刻度有何关系?

security - 如何允许公共(public)应用程序在没有访问 token 的情况下连接到 GitHub API v4?

javascript - 如何返回按特定偏移量移动的小时 : minute string,?

time - highstock - 添加/删除系列后导航器时间范围不会更新

netlogo - netlogo 代码的流程图

c++ - 调试版本运行但发布给出 0xc000007b - 缺少 dll?

c# - 代码在 Release模式和 Debug模式下的行为不同