首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Netlogo:从变量值选择一个代理来运行一个过程

Netlogo:从变量值选择一个代理来运行一个过程
EN

Stack Overflow用户
提问于 2015-06-16 11:49:58
回答 1查看 138关注 0票数 0

我正在创建一个类似出租车的模拟,在其中车辆搜索客户。当一辆车在离顾客一个单位的距离内时,它会接住顾客并把它带到目的地(然后再开始寻找顾客,等等)。

我的问题是:如果两辆车在同一时间步骤内在1单位距离内到达同一客户,我需要有最高rating的车辆始终得到客户。这是我的代码(从上一篇文章中更新):

代码语言:javascript
复制
    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

竞争对手和评级最高的是等待顾客自己的变量。最近的顾客是最小的一位候车顾客(距离我自己)。通常设置的红色将运行车辆获取客户运输信息的过程。当强制两辆车在同一客户,正确的车辆总是设置它的颜色红色。有时,不正确的车辆也设置它的颜色红色。当我检查等待顾客的可变值时,正确的车辆被识别为最高等级,但有时其他车辆仍然变红。显然,我的程序设置是错误的。如果有人对如何解决这一问题(或如何以不同的方式处理这项任务)有建议,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-17 07:17:23

我认为您的ifelse总是返回false的原因是因为ifelse与每个出租车的identification初始化步骤相同。

当将某个函数运行到一个代理集时,netlogo的工作方式是,每个代理都将一个一个地单独运行该函数,而不是同时以随机顺序运行该函数。

因此,如果ifelse刚好在设置identification之后放置,并且在相同的函数中,它总是返回false,因为其他车辆还没有得到它们的识别集。然后,它将直接运行make-deal,甚至比其他车辆。

例如:

代码语言:javascript
复制
ask vehicle [
   set identification ...
   ifelse ... [..]
   [..]
]

是不同的

代码语言:javascript
复制
ask vehicle [set identification ...]
ask vehicle [ifelse .... [...][...] ]

第一个代理将使每个代理设置它们的标识,并在使其他代理完成之前执行ifelse语句。第二个将使每个代理先设置它们的标识,然后让每个代理执行ifelse语句。

结论是,我建议你把查找-客户函数和交易函数分开.

我希望这能帮到你

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30866722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档