我正在创建一个类似出租车的模拟,在其中车辆搜索客户。当一辆车在离顾客一个单位的距离内时,它会接住顾客并把它带到目的地(然后再开始寻找顾客,等等)。
我的问题是:如果两辆车在同一时间步骤内在1单位距离内到达同一客户,我需要有最高rating的车辆始终得到客户。这是我的代码(从上一篇文章中更新):
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竞争对手和评级最高的是等待顾客自己的变量。最近的顾客是最小的一位候车顾客(距离我自己)。通常设置的红色将运行车辆获取客户运输信息的过程。当强制两辆车在同一客户,正确的车辆总是设置它的颜色红色。有时,不正确的车辆也设置它的颜色红色。当我检查等待顾客的可变值时,正确的车辆被识别为最高等级,但有时其他车辆仍然变红。显然,我的程序设置是错误的。如果有人对如何解决这一问题(或如何以不同的方式处理这项任务)有建议,我们将不胜感激。
发布于 2015-06-17 07:17:23
我认为您的ifelse总是返回false的原因是因为ifelse与每个出租车的identification初始化步骤相同。
当将某个函数运行到一个代理集时,netlogo的工作方式是,每个代理都将一个一个地单独运行该函数,而不是同时以随机顺序运行该函数。
因此,如果ifelse刚好在设置identification之后放置,并且在相同的函数中,它总是返回false,因为其他车辆还没有得到它们的识别集。然后,它将直接运行make-deal,甚至比其他车辆。
例如:
ask vehicle [
set identification ...
ifelse ... [..]
[..]
]是不同的
ask vehicle [set identification ...]
ask vehicle [ifelse .... [...][...] ]第一个代理将使每个代理设置它们的标识,并在使其他代理完成之前执行ifelse语句。第二个将使每个代理先设置它们的标识,然后让每个代理执行ifelse语句。
结论是,我建议你把查找-客户函数和交易函数分开.
我希望这能帮到你
https://stackoverflow.com/questions/30866722
复制相似问题