2017-01-29 13 views
0

Я прочитал другие вопросы, похожие на мои, но я до сих пор не могу понять, что делать с моей моделью. Позвольте мне объяснить. У меня две породы.установить переменную одной породы на другую породу в Netlogo

breed [distributers distributer] 
breed [suppliers supplier] 
distributers-own [dproductASales] 
suppliers-own [sproductASales] 

Мне нужно назначить переменную распределителя поставщику, но имеет ошибку.

to sales-decision 
set sproductASales dproductASales 

Как я могу это сделать? Thanks

ответ

1

Для чего нужен контекст для sales-decision? Поскольку вы говорите set sProductASales, вы выбрали контекст supplier. Хорошо, поэтому попросите поставщика установить эту переменную ... что? Вы не можете сказать dproductASales, потому что это не глобальная переменная и атрибут поставщика. Если вы хотите сослаться на dproductASales дистрибьютора, вы должны указать нам of и указать, какой из них (даже если есть только один). Например:

breed [distributers distributer] 
breed [suppliers supplier] 
distributers-own [dproductASales] 
suppliers-own [sproductASales] 

to sales-decision ;supplier procedure 
    set sproductASales [dproductASales] of one-of distributers 
end 

to test 
    ca 
    create-distributers 2 [ 
    set dproductASales one-of [2 4] 
    ] 
    create-suppliers 10 [ 
    sales-decision 
    ] 
end 
+0

Спасибо. Фактически, «dproductASales» одинаково для всех дистрибьюторов. Каждый год у них есть ценность для анализа своих продаж, и они хотят проинформировать поставщиков об этом. Поставщикам необходимо знать этот номер и использовать его в некоторых вычислениях. Первоначальное значение составляет 6 миллионов. Каждый год он обновляется. Вы имеете в виду, что я должен определить его глобальный? Но это просто для дистрибьюторов. – Naha

+1

Вы хотите переменную класса, но NetLogo не имеет этой концепции. Поэтому вы должны решить, как вы хотите справиться с этим. Наиболее распространенной практикой в ​​программировании NetLogo было бы использование глобальной переменной. Если вам (понятно) не нравится использование глобальных переменных, мы можем обсудить альтернативы. Но на этапе, в котором вы находитесь, я бы сказал «да», вместо этого используйте глобальную переменную. – Alan

0

другой вариант, если вы не хотите использовать глобалам (который, мне кажется, как идти, если значение не зависит от дистрибьютора), будет иметь патч собственности переменная, как «ПДАА» и:

ask patches with [count distributors-here > 0] 
    [ 
    ask one-of distributors-here 
     [set PdAs dproductASales] 
    ] 
    ask suppliers 
    [ 
    set sproductASales PdAs 
    ] 

агенты имеют доступ к переменным накладными, так что ваши поставщики могут запросить его непосредственно так же, как если бы это была глобальная переменная, но у вас есть возможность сделать это пространственно явная, если вы идете в этом (скажем, если в будущем вы захотите иметь разные значения продаж продуктов дистрибьютора и получить доступ поставщикам к их локальному значению).

+0

Спасибо. Позвольте мне сначала задать вопрос о вашем заявлении, «который, как мне кажется, подходит, если значение не зависит от дистрибьютора». Я определил dproductASales глобальный, а затем в процедуре они умножаются на число и обновляются. Поскольку они глобальны, я мог бы «установить sproductASales dproductASales». Я предполагаю, что sproductASales тоже будет обновляться, не так ли? – Naha

+0

, если вы используете глобальные переменные, тогда да, вы можете запросить его непосредственно с любым агентом и установить значение своего агента в любой момент. Мне казалось, что вы можете не хотеть использовать глобальные переменные, вот тогда и возникает мой ответ. Преимущество не использования глобального заключается в том, что вы можете варьировать значение в пространственно явной форме. Если вам не нужна эта способность, то это лишняя сложность. «все должно быть как можно проще, но не проще» ~ Einstein – Jesse001

+0

Подробнее о вашем вопросе (возможно, я пропустил этот момент), если обновится sproductASales: это зависит от того, когда вы выполняете мультипликатор. Если вы применяете множитель к dproductASales, тогда установите sproductASales dproductASales, да, он будет обновлен до одного значения по всей доске. Если вы хотите, чтобы он отличался от поставщика, вы захотите применить множитель после набора. Если вы хотите обновить свой вопрос с помощью своего текущего кода, мы можем помочь вам добраться туда, куда вы собираетесь. – Jesse001