Netlogo:从变量值中选择一个代理 运行 一个过程
Netlogo: Choosing an agent to run a procedure from variable values
我正在创建一个类似于出租车的模拟,车辆可以在其中搜索客户。当车辆在客户的 1 个单位距离内时,它会接走客户并将其带到目的地(并再次开始搜索客户等)。
我的问题:如果 2 辆车在同一时间步长内进入同一客户的 1 个单位距离内,我需要具有最高 [rating](车辆自有变量)的车辆才能始终吸引客户。这是我的代码(从之前的 post 更新而来):
to find-customers
if (distance closest-customer <= 1)
[ask closest-customer [check-for-vehicles]]
end
to check-for-vehicles
set competitors vehicles in-radius 1
determine-highest-rated
end
to determine-highest-rated
set highest-rated max-one-of competitors [rating]
ask highest-rated [set color red]
end
[竞争对手] 和 [最高评价] 是等待客户自己的变量。 closest-customer 是 min-one waiting-customers(距离我自己)。通常 [set color red] 会 运行 车辆获取客户运输信息的过程。当将两辆车强加给同一个客户时,正确的车辆总是将其颜色设置为红色。有时错误的车辆也会将其颜色设置为红色。当我检查等待顾客的变量值时,正确的车辆被识别为最高评级,但有时另一辆车仍然变成红色。我设置程序的方式显然有误。如果有人对如何解决此问题(或如何以不同的方式处理此任务)提出建议,我们将不胜感激。
我认为你的 ifelse
总是 return false 的原因是因为 ifelse
被放置在与每个出租车的 identification
初始化相同的时间步.
当 运行将某些功能连接到代理集时,netlogo 的工作方式是,每个代理一个接一个地 运行 以随机顺序单独执行功能,而不是在同一时间。
所以,如果 ifelse
刚好放在 identification
设置之后,并且在同一个函数中,它总是 return false,因为其他车辆还没有他们的标识集呢。然后它会直接 运行 make-deal
甚至在与其他车辆进行比较之前。
例如:
ask vehicle [
set identification ...
ifelse ... [..]
[..]
]
不同于
ask vehicle [set identification ...]
ask vehicle [ifelse .... [...][...] ]
第一个会让每个代理设置他们的身份并在让其他代理做之前做ifelse语句。
第二个将使每个代理首先设置他们的身份,然后让每个代理执行 ifelse 语句。
结论是,我建议你把find-costumer功能和make-deal功能分开。
希望对您有所帮助
我正在创建一个类似于出租车的模拟,车辆可以在其中搜索客户。当车辆在客户的 1 个单位距离内时,它会接走客户并将其带到目的地(并再次开始搜索客户等)。
我的问题:如果 2 辆车在同一时间步长内进入同一客户的 1 个单位距离内,我需要具有最高 [rating](车辆自有变量)的车辆才能始终吸引客户。这是我的代码(从之前的 post 更新而来):
to find-customers
if (distance closest-customer <= 1)
[ask closest-customer [check-for-vehicles]]
end
to check-for-vehicles
set competitors vehicles in-radius 1
determine-highest-rated
end
to determine-highest-rated
set highest-rated max-one-of competitors [rating]
ask highest-rated [set color red]
end
[竞争对手] 和 [最高评价] 是等待客户自己的变量。 closest-customer 是 min-one waiting-customers(距离我自己)。通常 [set color red] 会 运行 车辆获取客户运输信息的过程。当将两辆车强加给同一个客户时,正确的车辆总是将其颜色设置为红色。有时错误的车辆也会将其颜色设置为红色。当我检查等待顾客的变量值时,正确的车辆被识别为最高评级,但有时另一辆车仍然变成红色。我设置程序的方式显然有误。如果有人对如何解决此问题(或如何以不同的方式处理此任务)提出建议,我们将不胜感激。
我认为你的 ifelse
总是 return false 的原因是因为 ifelse
被放置在与每个出租车的 identification
初始化相同的时间步.
当 运行将某些功能连接到代理集时,netlogo 的工作方式是,每个代理一个接一个地 运行 以随机顺序单独执行功能,而不是在同一时间。
所以,如果 ifelse
刚好放在 identification
设置之后,并且在同一个函数中,它总是 return false,因为其他车辆还没有他们的标识集呢。然后它会直接 运行 make-deal
甚至在与其他车辆进行比较之前。
例如:
ask vehicle [
set identification ...
ifelse ... [..]
[..]
]
不同于
ask vehicle [set identification ...]
ask vehicle [ifelse .... [...][...] ]
第一个会让每个代理设置他们的身份并在让其他代理做之前做ifelse语句。 第二个将使每个代理首先设置他们的身份,然后让每个代理执行 ifelse 语句。
结论是,我建议你把find-costumer功能和make-deal功能分开。
希望对您有所帮助