2016-11-21 5 views
0

Я изо всех сил пытаюсь написать эту команду. В принципе, я хочу это сделать: У меня есть коллекционеры [собственная грузоподъемность], бункеры [собственные отходы в бункерах] и склады [собственная waste_in_warehouse] как черепахи. Коллекторы имеют максимальную грузоподъемность. Я хочу, чтобы коллекционеры проверяли, есть ли у них грузоподъемность, когда они находят корзину, если мусор в корзине < = максимальная емкость коллектора, сборщики будут собирать, если не будут игнорировать корзину.Добавьте значение переменной черепахи в значение переменной другого черепахи

я придумал что-то вроде этого:

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. приращения коллекционного carryingcapacity по (bins_holding_capacity) of myself (вы не можете использовать myself, как это, потому что вы не в вложенном спросить)

Логика 3-го шага также кажется неправильной, поскольку это будет каждый раз изменять мощность коллектора, а не проверять, заполнен ли он.

Следует отметить, что с помощью any?, вы также не командуете этой группой агентов. any? возвращает true или false, соответствующий тому, были ли агенты, которые соответствовали критериям или нет. Для управления этими агентами необходимо использовать второй 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 запрашивает два командных блока. Я все еще работаю над кодом, но я действительно ценю, что вы не спеша, чтобы помочь мне. –