List 如何让海龟按顺序沿着一系列位置移动

List 如何让海龟按顺序沿着一系列位置移动,list,indexing,distance,netlogo,closest,List,Indexing,Distance,Netlogo,Closest,我的目标是在另一个agentset(命名端口并在索引中列出)上创建一个agentset(命名船舶)舱口,该舱口包含代表路径起点和终点的两个位置。出发-开始按给定顺序移动船舶/驶向第三个代理集(称为航路点,在index1中列出)。 但是,如果一个港口比另一个航路点更靠近当前航路点,则改为移动到港口。一旦船只到达另一个港口,我也希望他们停下来 目前,我的模型只使用两个代理集(船舶和港口),但我希望包括第三个代理集(称为航路点),以防止船舶在所有位置(港口和航路点)孵化,并使船舶通过沿航路点(如踏脚石

我的目标是在另一个agentset(命名端口并在索引中列出)上创建一个agentset(命名船舶)舱口,该舱口包含代表路径起点和终点的两个位置。出发-开始按给定顺序移动船舶/驶向第三个代理集(称为航路点,在index1中列出)。 但是,如果一个港口比另一个航路点更靠近当前航路点,则改为移动到港口。一旦船只到达另一个港口,我也希望他们停下来

目前,我的模型只使用两个代理集(船舶和港口),但我希望包括第三个代理集(称为航路点),以防止船舶在所有位置(港口和航路点)孵化,并使船舶通过沿航路点(如踏脚石)按顺序移动在到达起点或终点(端口)之前

下面是我的代码示例:

breed [ships ship]
breed [ports port]
breed [waypoints waypoint]
ships-own [target-port
  current-port]

to setup
ca

 let index 0  
 create-ports 2
 [ let loc item index [ [0 -32] [32 0] ] 
   setxy (item 0 loc) (item 1 loc) 
   set index index + 1  
   set shape "circle" 
   set size 2
   set color red - 1]   

 let index1 0 
 create-waypoints 2
 [let loc item index1 [[12 -3] [14 -26]]
   setxy (item 0 loc) (item 1 loc)
   set index1 index1 + 1
   set shape "circle"
   set size 1
   set color red - 1]

 ask ports
[  let s who
   hatch-ships 1
 [ set current-port s
   set size 1
   set color red
   pen-down  
   set pen-size 1
   set target-port min-one-of ports with [ who != s] [distance myself] 
   set heading towards target-port  
  ] 
]
   reset-ticks 
end

to go 

;(obey-elevation)
ask ships 
[   if (distance target-port = 0) 
 [  let other_ports no-turtles
    ask target-port [set other_ports (other ports)]
    set target-port min-one-of other_ports [distance myself]
    face target-port
 ]
  ifelse (distance target-port < 1) 
  [ move-to target-port
  ]
    [fd 1
    ]
]

  tick
end
品种[船舶]
品种[港口]
繁殖[航路点航路点]
船舶拥有[目标港]
当前端口]
设置
ca
设索引为0
创建端口2
[让loc项目索引[[0-32][32 0]]
setxy(项目0位置)(项目1位置)
设置索引+1
设置形状“圆”
2号套餐
设置颜色为红色-1]
设index1 0
创建航路点2
[让loc项目索引1[[12-3][14-26]]
setxy(项目0位置)(项目1位置)
设置index1 index1+1
设置形状“圆”
1号套餐
设置颜色为红色-1]
询问港口
让我们看看谁
舱口船1
[设置当前端口s
1号套餐
设置颜色为红色
放下笔
设置钢笔大小为1
使用[who!=s][距离我自己]将目标端口最小值设置为其中一个端口
设置朝向目标端口的航向
] 
]
重置滴答声
结束
外带
;(仰角)
问船
[如果(距离目标端口=0)
[让其他港口不要有海龟
询问目标端口[设置其他_端口(其他端口)]
将目标端口最小值设置为其他_端口之一[距离]
面向目标端口
]
ifelse(距离目标端口<1)
[移动到目标端口
]
[fd 1
]
]
打上钩
结束

非常感谢您的帮助。

您是否考虑过使用链接来定义允许的路径?也就是说,在港口和航路点的不同位置创建海龟(隐藏且不移动),并在航路点与航路点之间建立联系。联系可能具有代表物理距离的“旅行成本”属性,旅行困难等。然后,您可以将总旅行成本或航路点数量降至最低,以确定船舶所走的路径。感谢您的回复。由于我是netlogo的新手,我不确定链接的功能。是否有可能让链接从一个位置连接到另一个位置,而不代表一条持续的“直线”路径。我让海龟们沿着很长的距离移动,不希望每次海龟需要移动时都有“节点”或航路点,因为限制移动的规则不同。或者最好的方法是在世界上每个可能的区域设置节点?从一个节点到下一个节点的直线,但节点可以位于任何位置(例如,有航路点的地方)。查看模型库(文件菜单)>代码示例>链接漫游海龟示例。您是否考虑过使用链接定义允许的路径?也就是说,在港口和航路点的不同位置创建海龟(隐藏且不移动),并在航路点与航路点之间建立联系。联系可能具有代表物理距离的“旅行成本”属性,旅行困难等。然后,您可以将总旅行成本或航路点数量降至最低,以确定船舶所走的路径。感谢您的回复。由于我是netlogo的新手,我不确定链接的功能。是否有可能让链接从一个位置连接到另一个位置,而不代表一条持续的“直线”路径。我让海龟们沿着很长的距离移动,不希望每次海龟需要移动时都有“节点”或航路点,因为限制移动的规则不同。或者最好的方法是在世界上每个可能的区域设置节点?从一个节点到下一个节点的直线,但节点可以位于任何位置(例如,有航路点的地方)。查看模型库(文件菜单)>代码示例>链接步行海龟示例。