设置一个品种';在Netlogo中将s变量转换为另一个品种

设置一个品种';在Netlogo中将s变量转换为另一个品种,netlogo,agent-based-modeling,Netlogo,Agent Based Modeling,我读了其他类似的问题,但我仍然不知道如何处理我的模型。 让我解释一下。我有两个品种 breed [distributers distributer] breed [suppliers supplier] distributers-own [dproductASales] suppliers-own [sproductASales] 我需要将分销商的变量分配给供应商,但它有一个错误 to sales-decision set sproductASales dproductASales 我该怎么

我读了其他类似的问题,但我仍然不知道如何处理我的模型。 让我解释一下。我有两个品种

breed [distributers distributer]
breed [suppliers supplier]
distributers-own [dproductASales]
suppliers-own [sproductASales]
我需要将分销商的变量分配给供应商,但它有一个错误

to sales-decision
set sproductASales dproductASales
我该怎么做?
谢谢

您希望销售决策的上下文是什么?既然您说了
设置产品销售
,您就选择了
供应商
上下文。好的,您将要求供应商将此变量设置为。。。什么?不能说
dproductASales
,因为这既不是全局变量,也不是供应商属性。如果您想参考分销商的
d产品销售
,则必须使用
,并指定其中哪一个(即使只有一个)。例如:

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

另一种选择是,如果您不想使用globals(在我看来,如果值不随发行商而变化,那么应该使用globals),可以使用补丁拥有的变量,如“PdAs”,并且:


代理可以访问补丁变量,因此您的供应商可以直接查询补丁变量,就像它是一个全局变量一样,但如果您采用这种方式,您可以选择在空间上明确显示补丁变量(例如,如果将来您希望能够拥有不同的分销商产品销售价值,并让供应商访问其本地价值)

谢谢。实际上,“dproductASales”对所有分销商都是一样的。每年,他们都有一个价值来分析他们的销售,并且他们希望将此告知供应商。供应商需要知道这个数字,并在一些计算中使用它。它的初始价值是600万。每年都会更新。你是说我应该把它定义为全球性的吗?但这只是针对分销商,您需要一个类变量,但NetLogo没有这个概念。所以你必须决定你想怎么处理。NetLogo编程中最常见的做法是使用全局变量。如果您(可以理解)不喜欢使用全局变量,我们可以讨论替代方案。但是在你所处的阶段,我会说是的,用一个全局变量代替。谢谢。首先,让我问一个关于您的陈述的问题:“在我看来,如果分销商的价值没有变化,那么应该怎么做。”。我定义了dproductASales global,然后在一个过程中,它们被乘以一个数字并得到更新。因为它们是全球性的,所以我可以“设置SPProductASALES dproductASales”。我假设sproductASales也会得到更新,对吗?如果您使用globals,那么您可以直接使用任何代理查询它,并在任何时候为它设置代理值。在我看来,你可能不想使用globals,那就是我的答案。不使用全局变量的好处是,可以以空间明确的方式更改值。如果你不需要这种能力,那么它是额外的不必要的复杂性。“一切都应该尽可能简单,但不是更简单”~EinsteinMore回答你的问题(我可能没有抓住要点),如果Sproductales得到更新:这取决于你何时执行乘法器。如果将乘数应用于dproductASales,则将sproductASales dproductASales设置为yes,则整个系统将更新为相同的值。如果希望它随供应商而变化,则需要在设置后应用乘数。如果您想用当前代码更新您的问题,我们可以帮助您了解您的目标。
ask patches with [count distributors-here > 0] 
   [
    ask one-of distributors-here 
        [set PdAs dproductASales]
   ]   
    ask suppliers 
    [
     set sproductASales PdAs
    ]