我在寫一個原型,它需要兩個代理集和一個命令塊。它需要調用幾個函數,在當前上下文中執行命令塊,然後調用另一個函數。這是我到目前爲止有:在NetLogo擴展中的基元中執行命令塊
class WithContext(pushGraphContext: GraphContext => Unit, popGraphContext: api.World => GraphContext)
extends api.DefaultCommand {
override def getSyntax = commandSyntax(
Array(AgentsetType, AgentsetType, CommandBlockType))
def perform(args: Array[Argument], context: Context) {
val turtleSet = args(0).getAgentSet.requireTurtleSet
val linkSet = args(1).getAgentSet.requireLinkSet
val world = linkSet.world
val gc = new GraphContext(world, turtleSet, linkSet)
val extContext = context.asInstanceOf[ExtensionContext]
val nvmContext = extContext.nvmContext
pushGraphContext(gc)
// execute command block here
popGraphContext(world)
}
}
我看了一些例子所使用nvmContext.runExclusively
,但看起來它是專門爲具有一定agentset運行命令塊。我希望當前的代理(可能是觀察者)運行它。我是否應該將nvm.agent
包裝在座席中並將其傳遞給nvmContext.runExclusively
?如果是這樣,在代理程序集中包裝代理程序的最簡單方法是什麼?如果不是,我該怎麼辦?
它看起來不像'agent.AgentSetBuilder'存在了。也就是說,使用'ArrayAgentSet'的ArrayAgentSet(Class [?extends Agent],Array [Agent],World)'構造函數很容易。 –
噢,對不起,'AgentSetBuilder'是主/無頭的東西。在5.0.x的情況下,是的,你做的是正確的事情。 –