如何选择集合中具有不同价值的代理
How to choose the agents that have different value in the set
我想更改一组代理的变量 my-inventory-slot
的值,但前提是值不重复(即他的值在集合中是唯一的)。
breed [ tags tag ]
tags-own [ my-inventory-slot inventoried? ]
breed [ readers reader ]
和
而且我测试过
ask my-tags with [ my-inventory-slot != [my-inventory-slot] of self ] [
set inventoried? true
set color red
]
其中 my-tags
是一个 reader 变量,其中包含 reader 周围的标签。
问题出在选择 with [ my-inventory-slot != [my-inventory-slot] of self ]
上,因为我已经尝试 my-inventory-slot = 5
并且代码工作正常。
已更新
let thistag [ my-inventory-slot ] of one-of my-tags
ask tags with [ my-inventory-slot != thistag ] [
set inventoried? true
set color red
]
再次更新 - 下载代码后
这是调用问题过程的代码:
to go
ask reader 0 [
setup-inventory-in-frame
one-frame-inventory
]
end
因此 reader
被要求 运行 代码。但是,readers没有变量my-inventory-slot
,这是属于tags
品种的变量。这是你的问题,你需要找出 reader 运行 代码和你想要匹配的 my-inventory-slot
变量之间的联系。
根据聊天讨论,您真正想要的是属于 reader(即变量 my-tags)且具有唯一值 my-inventory-slot 的标签。我认为这段代码可以做到这一点:
to one-frame-inventory
let frame-time 0
let unique-tags my-tags
let forward-list [ my-inventory-slot ] of my-tags
let reverse-list reverse forward-list
let num-tags count my-tags
ask my-tags
[ if position my-inventory-slot forward-list + position my-inventory-slot reverse-list != num-tags - 1
[ set unique-tags other unique-tags ]
]
ask unique-tags
[ set color red
set inventoried? true
]
end
很丑,找别人回答就好了。这样做是将相关标签的 my-inventory-values 剥离到列表中。它创建该列表的两个副本,一个按正常顺序排列,另一个按相反顺序排列。它通过查找那些在这两个列表中首次出现的位置不同的值来识别非唯一值。如果它不是唯一的,相关标签将从唯一标签代理集中删除。
我已经解决了问任何其他 my-tags
的问题,像这样:
let kk my-tags
ask my-tags [
if not any? other kk with [ my-inventory-slot = [my-inventory-slot] of myself ] [
set inventoried? true
set color red
] ]
简短明了。
我想更改一组代理的变量 my-inventory-slot
的值,但前提是值不重复(即他的值在集合中是唯一的)。
breed [ tags tag ]
tags-own [ my-inventory-slot inventoried? ]
breed [ readers reader ]
和
而且我测试过
ask my-tags with [ my-inventory-slot != [my-inventory-slot] of self ] [
set inventoried? true
set color red
]
其中 my-tags
是一个 reader 变量,其中包含 reader 周围的标签。
问题出在选择 with [ my-inventory-slot != [my-inventory-slot] of self ]
上,因为我已经尝试 my-inventory-slot = 5
并且代码工作正常。
已更新
let thistag [ my-inventory-slot ] of one-of my-tags
ask tags with [ my-inventory-slot != thistag ] [
set inventoried? true
set color red
]
再次更新 - 下载代码后
这是调用问题过程的代码:
to go
ask reader 0 [
setup-inventory-in-frame
one-frame-inventory
]
end
因此 reader
被要求 运行 代码。但是,readers没有变量my-inventory-slot
,这是属于tags
品种的变量。这是你的问题,你需要找出 reader 运行 代码和你想要匹配的 my-inventory-slot
变量之间的联系。
根据聊天讨论,您真正想要的是属于 reader(即变量 my-tags)且具有唯一值 my-inventory-slot 的标签。我认为这段代码可以做到这一点:
to one-frame-inventory
let frame-time 0
let unique-tags my-tags
let forward-list [ my-inventory-slot ] of my-tags
let reverse-list reverse forward-list
let num-tags count my-tags
ask my-tags
[ if position my-inventory-slot forward-list + position my-inventory-slot reverse-list != num-tags - 1
[ set unique-tags other unique-tags ]
]
ask unique-tags
[ set color red
set inventoried? true
]
end
很丑,找别人回答就好了。这样做是将相关标签的 my-inventory-values 剥离到列表中。它创建该列表的两个副本,一个按正常顺序排列,另一个按相反顺序排列。它通过查找那些在这两个列表中首次出现的位置不同的值来识别非唯一值。如果它不是唯一的,相关标签将从唯一标签代理集中删除。
我已经解决了问任何其他 my-tags
的问题,像这样:
let kk my-tags
ask my-tags [
if not any? other kk with [ my-inventory-slot = [my-inventory-slot] of myself ] [
set inventoried? true
set color red
] ]
简短明了。