创建品种属性并进行管理

时间:2019-11-09 19:05:04

标签: netlogo

我有两个品种,比如sellersAsellersB,还有一个我要为从sellersAsellersB中选择的卖家创建的商品。 因此,我现在有

globals[
chosen?
]

breed [sellersA sellerA]
breed [sellersB sellerB]

sellersA[
catalogue
]

sellersB[
catalogue
]

,该项目具有两个属性attr1attr2。我在设置中初始化了目录:set catalogue []

以下代码部分应检查目录是否为空:如果目录为空,则选定的卖方将创建具有某些特定属性(1和2)的新商品:

 let selected_one nobody
  let customers nobody



set selected_one one-of turtles with [breed = sellersA or breed = sellersB]

  ifelse empty? [catalogue] of selected_one [
  create-items 1[ hide-turtle set new_item self set chosen? false]
  ifelse [breed = sellersA] of selected_one
    [ ask selected_one [
        set attr1 random-float 1
        set attr2 random-float
        set function1 (1 + attr2)
      ]
    ]
    [ ask selected_one [
        set attr1 random-float 1
        set attr2 random-float
        set function2 (1 - attr2)
      ]
    ]

然后,卖方将商品添加到其目录以及与之相关的客户的目录中。

    ask selected_one [
        set customers (turtle-set self in-link-neighbors with [breed = sellersA])
        ask customers [set catalogue fput new_item catalogue]
      ]
    ]
  ]

如果所选卖家的商品目录不为空(即卖家有要出售的商品),我想选择一个先前创建的商品并进行跟踪(例如,如果卖家A创建了这个新商品,并且此项已添加到其列表和客户列表(neighbours)中,我想知道附近有多少客户选择了该项目。

对于您以前对我的问题的回答,我知道我应该使用扩展名rnd:weighted-one-of,并且为了选择两个属性之一中具有最高值的项目,我应该创建一个仅包含指向所创建对象属性的索引。这应该要求使用who。但是,结果是,当我在观察者中运行show catalogue时,我只会得到空列表。 我认为问题可能出在项目的定义及其属性上。我尝试将其定义为具有attr1attr2的品种,但是当我将其功能设置为SellersA-own时,它不起作用。

我想保持代码简单,但我不知道如何做。

希望您能帮助我。

1 个答案:

答案 0 :(得分:1)

您没有显示它,所以我假设您有一些具有属性的项目:

breed [ items item]
items-own [
attr1 
attr2
]

因此,卖家拥有目录,目录列出了商品,并且商品具有属性。

我不清楚“客户”是谁,或者他们具有什么属性。他们似乎只是与给定卖方有链接的其他卖方。是吗?

反正你问

  

我想知道附近有多少客户   选择其项目)。

“它的项目”一词对我而言意味着项目必须具有一些附加属性,例如“创建者”。无论如何,您都不会描述客户“选择”商品的含义,存储此类信息的位置或存储过去曾选择商品的人的历史的位置-因此,这是不可能的就这个问题提供建议。

您还问为什么会这样:

  

当我在   观察者。

嗯,“目录”不是全局变量,它是卖方的属性。您需要检查卖家,看他们是否有正确的商品目录,或者询问类似的内容

ask sellersA [ show catalog ]

但更可能是,您想打开一个检查器窗口并将其保持打开状态,以便可以观察正在发生的事情。

inspect one-of sellersA

但是,无论您怎么做,您仍然可能发现没有卖家拥有其中包含任何物品的目录。您应该查看是否已创建任何项目,因为它们是全局的,您应该能够在观察器中看到它们,或者检查它们,或者简单地计数它们。

实际上,我不明白您上面列出的代码可能如何工作。您的代码有

[ ask selected_one [
        set attr1 random-float 1
        set attr2 random-float
        set function1 (1 + attr2)
      ]

其中selected_one是卖方,他不拥有属性或功能。您不在项目的上下文中,因此我希望命令“ set attr”失败。也许该代码无声地失败了,这就是为什么您没有项目的原因。

运行代码后,是否创建了任何项目?