创建品种属性和管理
Creating attribute of a breed and managing
我有两个品种,比方说 sellersA
和 sellersB
,我想为从 sellersA
或 sellersB
中选择的卖家创建一个项目.
因此,现在我有
globals[
chosen?
]
breed [sellersA sellerA]
breed [sellersB sellerB]
sellersA[
catalogue
]
sellersB[
catalogue
]
以及具有两个属性 attr1
和 attr2
的项目。我在设置中初始化了目录: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
时,我只得到空列表。
我认为问题可能出在项目及其属性的定义中。我试图将其定义为 attr1
和 attr2
的品种,但是当我将函数设置为 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" 失败。也许该代码正在无声地失败,这就是您没有项目的原因。
在你运行你的代码之后,有没有创建任何项目?
我有两个品种,比方说 sellersA
和 sellersB
,我想为从 sellersA
或 sellersB
中选择的卖家创建一个项目.
因此,现在我有
globals[
chosen?
]
breed [sellersA sellerA]
breed [sellersB sellerB]
sellersA[
catalogue
]
sellersB[
catalogue
]
以及具有两个属性 attr1
和 attr2
的项目。我在设置中初始化了目录: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
时,我只得到空列表。
我认为问题可能出在项目及其属性的定义中。我试图将其定义为 attr1
和 attr2
的品种,但是当我将函数设置为 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" 失败。也许该代码正在无声地失败,这就是您没有项目的原因。
在你运行你的代码之后,有没有创建任何项目?