Netlogo:如何使用世界中部的特定补丁来阻止乌龟的某些蜱虫?

时间:2017-11-18 12:05:49

标签: timer counter netlogo flags

我是初学者。我已经检查了编程指导字典。 我正在考虑双车道公路(例如,1号公路,2号公路)模型。 而且我正在考虑一个模型,其中由指定的补丁((10 0)和(20 2)指定的乌龟停止10个刻度。 但是,我不知道如何编写和指定每条道路的xcor和ycor的特定参数(例如道路1上的xcor和ycor,道路2上的xcor和ycor)。 而且我也不知道如何编写和控制参数" speed"在设定速度语法中。 以下是示例小型号。为避免复杂化,此样本模型只有一条道路。此示例模型失败,并且乌龟不会在补丁(10 0)处停止。 可能我需要你的建议。谢谢。

globals [ count-tick ]
turtles-own [ speed flag-A ]

to setup
  clear-all
  resize-world 0 50 min-pycor max-pycor
  ask patches [ setup-road ]
  reset-ticks
end

to setup-road
  if ( pycor < 1 ) and ( pycor > -1 ) [ set pcolor white ]
end

to create-car
  crt 1 [
    set color blue
    setxy min-pxcor 0
    set heading 90
    set speed 1
  ]
end

这是该模型的主体。

to go

  if (count turtles-on patch 0 0 = 0) [
    create-car
    ask (turtles-on patch 0 0) [
      set flag-A FALSE
    ]
  ]

  ask (turtles-on patch 10 0) [
    set flag-A TRUE
    set count-tick 10
  ]

  if count-tick > 0 [
    set count-tick count-tick - 1
    ask (turtles-on patch 10 0) with [flag-A = TRUE]
    [
      set color red
      set speed 0
    ]
  ]

  if count-tick = 0 [
    ask (turtles-on patch 10 0) with [flag-A = TRUE]
      [
        set speed 1
        set flag-A FALSE
    ]
  ]

  if (count turtles-on patch max-pxcor 0 > 0) [
    ask min-one-of turtles [who][
      die
    ]
  ]

  set-speed
  tick
end

这是控制速度的并行更新。

to set-speed
  ask turtles with [ xcor < 10 ] [
    let turtle-ahead one-of turtles-on patch-ahead 1
    ifelse turtle-ahead = nobody
      [ set speed 1
        fd speed
    ]
    [ set speed 0
    ]
  ]
    ask turtles with [ 10 < max-pxcor ] [
    let turtle-ahead one-of turtles-on patch-ahead 1
    ifelse turtle-ahead = nobody
      [ set speed 1
        fd speed
    ]
    [ set speed 0
    ]
  ]
end

1 个答案:

答案 0 :(得分:3)

好的,作为一般规则,一次向模型添加一个元素。测试该元素,然后只有在一切正常后才添加下一个元素。在你的情况下,你试图在没有任何工作的情况下做几件事 - 移动汽车,将它们暂停10个蜱,使其中一个在路的尽头死亡,做一些未指定速度的事情,以及可能还有其他我没做过的事情。立即注意到。

这里也有几个概念问题 - 最大的问题是count-tick是一个海龟变量,但是你将它视为一个全局变量,因为if count-tick...应该在ask turtles块内。想一想,如果你创建了10辆汽车,那么变量count-tick就有10个副本,所以你要用if语句检查一个。

你也没有告诉你的海龟移动,但这可能是你未能展示的代码。保持尽可能多的代码,这就是我认为你想要做的事情。这将在左侧创建一个汽车,让它向右移动,在正确的位置停留10个刻度并变为红色,然后再次移动,在它结束时将其杀死。

globals [ count-tick ]
turtles-own [ speed flag-A ]

to setup
  clear-all
  resize-world 0 50 min-pycor max-pycor
  ask patches [ setup-road ]
  reset-ticks
end

to setup-road
  if ( pycor < 1 ) and ( pycor > -1 ) [ set pcolor white ]
end

to create-car
  crt 1 [
    set color blue
    setxy min-pxcor 0
    set heading 90
    set speed 1
    set flag-A FALSE
  ]
end

to go

  if (count turtles-on patch 0 0 = 0) [
    create-car
  ]

  ask (turtles-on patch 10 0) [
    set flag-A TRUE
    set count-tick 10
  ]

  ask (turtles-on patch 10 0) with [flag-A = TRUE] [
    set color red
    set speed 0
    set count-tick count-tick - 1

    if count-tick = 0 [
      set speed 1
      set flag-A FALSE
    ]
  ]

  if (count turtles-on patch max-pxcor 0 > 0) [
    ask min-one-of turtles-on patch max-pxcor 0 [who][
      die
    ]
  ]

  ask turtles [ forward speed ]

  tick
end