2016-11-21 127 views
0

我努力尝试写这个命令。 基本上,我想要做的是: 我有一个收藏家[自己的承载能力],垃圾桶(自己的垃圾桶)和仓库[自己的垃圾房]作为海龟。 收藏家拥有最大的承载能力值。 我想让收集者检查他们是否有容量,当他们发现垃圾桶时,如果垃圾桶在垃圾箱< =收集者最大容量,收集者将收集,如果不是他们会忽略垃圾桶。将乌龟的变量值添加到另一只乌龟的变量值

我想出了这样的事情:

ask collectors 
[ 
    if any? bins with [distance myself <= 1] 
    [set carryingcapacity (carryingcapacity + (bins_holding_capacity of myself))] 
] 

第二个命令:

我想要做的收藏家,他们需要收集到仓库垃圾桶。但是这个变量的值可能会从一个收集器改变到另一个收集器,并且可能随着它们检查的箱的数量而变化。 我希望仓库在前几天使用新的每日价值累计它已经拥有的价值。 我想出了这样的事情作为一个行命令:

ask warehouses 
[ 
    if any? collectors with [distance myself <= 1] 
    [set waste_in_warehouse (waste_in_warehouse + (carryingcapacity of myself))] 

预先感谢您。

祝福。

回答

0

如果我理解正确的话,你的命令#代码1执行以下操作:

  1. 问收集器代理
  2. 查看是否有接近收集任何箱(但你没”牛逼询问此组)
  3. 增量收集器利用(bins_holding_capacity) of myselfcarryingcapacity(你不能使用myself这样的,因为你不是嵌套问

步骤3的逻辑似乎也是错误的,因为每次都会改变收集器的容量,而不是检查它是否已满。

应该指出的是,通过使用any?,你不是也指挥那组代理any?仅返回truefalse,对应于是否存在符合标准的代理。您需要使用第二个ask来指挥这些代理。

根据你说的话,你需要做这样的事情:

ask collectors 
[ 
    ask bins with [distance myself <= 1] ;;myself refers to the collector asking 
    [ 
    ifelse (waste_in_bin + [waste_in_collector] of myself) > [carryingcapacity] of myself 
     [;;add the waste to the collector] 
     [;;stop asking bins, collector is full] 
    ] 
] 

这些相同的步骤应该与你的第二个问题帮了。

+0

谢谢瑞安,我不得不做一些调整,因为ifelse命令要求两个命令块。我仍在编写代码,但我真的很感谢你花时间帮助我。 –