我有两个品种,比如sellersA
和sellersB
,还有一个我要为从sellersA
或sellersB
中选择的卖家创建的商品。
因此,我现在有
globals[
chosen?
]
breed [sellersA sellerA]
breed [sellersB sellerB]
sellersA[
catalogue
]
sellersB[
catalogue
]
,该项目具有两个属性attr1
和attr2
。我在设置中初始化了目录: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
时,我只会得到空列表。
我认为问题可能出在项目的定义及其属性上。我尝试将其定义为具有attr1
和attr2
的品种,但是当我将其功能设置为SellersA-own时,它不起作用。
我想保持代码简单,但我不知道如何做。
希望您能帮助我。
答案 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”失败。也许该代码无声地失败了,这就是为什么您没有项目的原因。
运行代码后,是否创建了任何项目?