2016-11-21 77 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命令要求兩個命令塊。我仍在編寫代碼,但我真的很感謝你花時間幫助我。 –