如何设计时钟驱动的多智能体仿真

时间:2009-06-24 22:28:38

标签: scala simulation actor

我想为真正的单词制造过程创建一个多智能体仿真模型来评估一些调度规则。模拟需要生成事件日志,以评估调度规则与实际制造事件日志相比的时间效应。

如何将“当前模拟时间”纳入这种多代理,消息传递密集模拟?

背景:
经典离散事件模拟(很好地处理时间推进)不能在这里应用,因为系统中的代理表示相对复杂的行为,并且路由要求加上调度规则要求它们经常通信。这个和其他过程的复杂性也排除了集中式调度方法。

在制造科学领域,有数千篇论文使用多智能体模拟来解决某些制造相关问题。但是,我还没有找到一篇论文,其中详细描述了这些模拟的内部工作原理或实现细节。

不幸的是,使用最短的处理时间进行系统中的离散时间步进可能是不可行的,因为处理时间范围在0.1到24小时之间。我的模拟有可能在以后的项目中用于假设评估,因此模拟需要尽可能快地运行 - 没有选项可以进行夜间模拟运行。

问题规模约为500个资源和1000 - 10000个产品代理,其中大部分已完成,未参与任何进一步的通信或资源占用。

因此,在通信结果中,新事件可以触发代理在其原始“下一次”事件到达之前执行某些操作。例如,代理程序当前在持续一小时的资源上被阻止。但是,另一个更高优先级的代理需要立即使用该资源,并要求第一个代理释放该资源。

从某种意义上说,我需要一种方法来创建经典消息传递代理模拟和离散事件模拟的混合。

我考虑了每个消息中涉及的中介代理 - 消息路由器和时间执行器,它发送消息和计时器滴答事件。此外,调解器代理还会为各种代理保留下一个事件时间列表。但是,我觉得应该有更好的方法来解决我的问题,因为这个概念给调解员代理人带来了巨大的压力。

更新

花了一段时间,但似乎我设法创建了一个迷你框架,并将DES和Agent概念合二为一。我确定它不是什么新鲜事,但至少是唯一的:http://code.google.com/p/tidra-framework/如果你有兴趣的话。

1 个答案:

答案 0 :(得分:4)

这个问题听起来似乎应该通过使用 parallel 离散事件模拟来解决 - 您计划实施的中介代理('参与每个消息','发送消息和定时器') tick events')似乎正在完成离散事件模拟器的工作。您可以通过并行使用更多此类模拟器,然后使用同步算法来保持因果关系等,将此比例缩放到所需的问题大小(有关详细信息,请参阅,例如this book)。当然,这需要一些相当大的努力,你可能最好先尝试顺序算法。

通过事件相互通信的逻辑过程(=代理)的经典DES视图的一种很好的方式可以是融合用于描述离散事件系统的其他形式的一些想法,例如{{3 }}。在DEVS中,每个实体可以指定它将处于特定状态的持续时间(例如,代理阻塞资源),并且仅由传入消息中断(然后相应地改变其状态,例如释放资源的代理)。

BTW在哪种意义上你认为代理太复杂而无法通过离散事件模拟进行处理?如果您将每个代理视为一个逻辑过程,从模拟的角度来看它是多么复杂并不重要 - 或者我在这里遇到了什么问题?