创建品种属性和管理

Creating attribute of a breed and managing

我有两个品种,比方说 sellersAsellersB,我想为从 sellersAsellersB 中选择的卖家创建一个项目. 因此,现在我有

globals[
chosen?
]

breed [sellersA sellerA]
breed [sellersB sellerB]

sellersA[
catalogue
]

sellersB[
catalogue
]

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

以下代码部分应检查目录是否为空:如果目录为空,selected 卖家会创建一个具有某些特定属性(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]
      ]
    ]
  ]

如果 selected 卖家的目录不为空(即卖家有商品要出售),我想 select 之前创建的商品之一并跟踪它(对于例如,如果其中一位卖家 A 创建了这个新商品,并且该商品被添加到其列表和其客户列表 (neighbours),我想知道其附近有多少客户 select 编辑了它物品)。

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

我想保持代码简单,但我不知道该怎么做。

希望你能帮助我。

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

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

所以卖家有目录,目录列出商品,商品有属性。

我不清楚 "customers" 是谁,或者他们有什么属性。他们似乎只是与特定卖家有链接的其他卖家。是吗?

反正你问了

I would like to know how many customers from its neighbourhood selected its item).

短语 "its item" 对我来说意味着项目必须具有一些附加属性,例如 "creator"。在任何情况下,您都没有描述客户拥有 "selected" 一件商品意味着什么,或者您在哪里存储此类信息,或者您在哪里存储过去曾选择过一件商品的人的历史记录 - 所以这个问题无法给出建议。

你也问为什么会这样:

I am getting only empty lists when I run show catalogue in the observer.

嗯,"catalog"不是一个全局变量,它是卖家的一个属性。您需要检查卖家,看看他们是否有包含正确商品的目录,或者询问

ask sellersA [ show catalog ]

但更有可能的是,您想打开检查器 window 并保持打开状态,以便观察发生了什么。

inspect one-of sellersA

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

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

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

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

在你运行你的代码之后,有没有创建任何项目?