重组代理和托盘
Reorganize agents and pallets
我有服务器、托盘和标签品种。每个服务器都有许多分配的托盘 pallets-being-served
,每个托盘都有一个 tags
(tags-in-pallet
) 的代理集。分配给服务器的所有标签都在 my-tags
变量中。
我有以下内容:
breed [ servers server ]
breed [ tags tag ]
breed [ pallets pallet ]
pallets-own [
tags-in-pallet
]
servers-own [
pallets-being-served
my-tags
]
to reorganization
let num-changes-in-reorg (random (num-pallets-by-side ^ 2 - 1) + 1) ; the num of changes
repeat num-changes-in-reorg [
let p1 nobody let p2 nobody let t1 nobody let t2 nobody
let my-pallets n-of 2 pallets ]
ask one-of my-pallets [
set p1 self
set p2 other my-pallets
set t1 [tags-in-pallet] of p1
set t2 [tags-in-pallet] of p2
]
ask p1 [ set tags-in-pallet t2 ]
ask p2 [ set tags-in-pallet t1 ]
ask servers [
set my-tags (turtle-set [ tags-in-pallet ] of pallets-being-served)
]
] ; repeat
end
目的是在托盘对之间进行一些 tags-in-pallet
交换,并将更改后的标签分配给相应的服务器。
上面的代码似乎可以工作,但是使用辅助变量 p1、p2、t1、t2 似乎不够优雅。此外,ask servers
子句在只需要引用my-tags
发生变化的服务器时涉及所有服务器。
有没有更好的方法来交换标签并将它们重新分配给相应的服务器?
此致
标签有什么限制吗?我不完全清楚你在做什么,但在我看来,做我认为你想做的事情的最简单方法就是从每个托盘中选择 n-of
,从你拿走它们的托盘中取出它们,然后将它们添加到另一个托盘。如果这是一个正确的解释,你想要这样的东西(注意,未经测试,肯定是错误的):
to reorganization
let num-changes-in-reorg (random (num-pallets-by-side ^ 2 - 1) + 1) ; the num of changes
let p1 one-of pallets
let p2 one-of pallets with [not member? self p1]
let p1-to-p2 n-of num-changes-in-reorg [tags] of p1
let p2-to-p1 n-of num-changes-in-reorg [tags] of p2
ask p1 [set tags (turtle-set tags with [not member? self p1-to-p2] p2-to-p1]
ask p2 [set tags (turtle-set tags with [not member? self p2-to-p1] p1-to-p2]
end
我还没有回答服务器位,因为我不清楚服务器和 pallet 是如何连接的。
我有服务器、托盘和标签品种。每个服务器都有许多分配的托盘 pallets-being-served
,每个托盘都有一个 tags
(tags-in-pallet
) 的代理集。分配给服务器的所有标签都在 my-tags
变量中。
我有以下内容:
breed [ servers server ]
breed [ tags tag ]
breed [ pallets pallet ]
pallets-own [
tags-in-pallet
]
servers-own [
pallets-being-served
my-tags
]
to reorganization
let num-changes-in-reorg (random (num-pallets-by-side ^ 2 - 1) + 1) ; the num of changes
repeat num-changes-in-reorg [
let p1 nobody let p2 nobody let t1 nobody let t2 nobody
let my-pallets n-of 2 pallets ]
ask one-of my-pallets [
set p1 self
set p2 other my-pallets
set t1 [tags-in-pallet] of p1
set t2 [tags-in-pallet] of p2
]
ask p1 [ set tags-in-pallet t2 ]
ask p2 [ set tags-in-pallet t1 ]
ask servers [
set my-tags (turtle-set [ tags-in-pallet ] of pallets-being-served)
]
] ; repeat
end
目的是在托盘对之间进行一些 tags-in-pallet
交换,并将更改后的标签分配给相应的服务器。
上面的代码似乎可以工作,但是使用辅助变量 p1、p2、t1、t2 似乎不够优雅。此外,ask servers
子句在只需要引用my-tags
发生变化的服务器时涉及所有服务器。
有没有更好的方法来交换标签并将它们重新分配给相应的服务器?
此致
标签有什么限制吗?我不完全清楚你在做什么,但在我看来,做我认为你想做的事情的最简单方法就是从每个托盘中选择 n-of
,从你拿走它们的托盘中取出它们,然后将它们添加到另一个托盘。如果这是一个正确的解释,你想要这样的东西(注意,未经测试,肯定是错误的):
to reorganization
let num-changes-in-reorg (random (num-pallets-by-side ^ 2 - 1) + 1) ; the num of changes
let p1 one-of pallets
let p2 one-of pallets with [not member? self p1]
let p1-to-p2 n-of num-changes-in-reorg [tags] of p1
let p2-to-p1 n-of num-changes-in-reorg [tags] of p2
ask p1 [set tags (turtle-set tags with [not member? self p1-to-p2] p2-to-p1]
ask p2 [set tags (turtle-set tags with [not member? self p2-to-p1] p1-to-p2]
end
我还没有回答服务器位,因为我不清楚服务器和 pallet 是如何连接的。