AnyLogic:如何设置 M/M/3 模型

AnyLogic: How can I set up a M/M/3 model

我有一个 M/M/3 模型。一个队列与三个服务器。队列中的顾客只要空着就可以去找三个店员中的任何一个。如果我直接 link 队列的输出端口和所有 3 个延迟输入端口,如 this, there is an error message( error message)。我尝试使用 Select Output5 但我不知道如何设置属性。我应该如何设置这个模型?

输入时等待块代码:

if(delay.size()==0 || delay1.size()==0 || delay2.size()==0){
    self.free(agent);
}

退出块代码:

if(delay.size()==0)
    enter.take(agent);
else if(delay1.size()==0){
    enter1.take(agent);
}else if(delay2.size()==0 ){
    enter2.take(agent);
}

接收器代码:

wait.free(agent);

每个延迟的容量为1

对于标准的 M/M/c 情况,您为每个服务器使用单独的延迟块的想法是错误的;资源池和服务块(或具有容量的单个延迟块)'designed' 对此进行建模。 (有一个合乎逻辑的 'service' 具有给定的一次可以处理多少个容量。)

所以在最简单的情况下,使用容量为3的单个延迟块(具有前面的队列)。或具有容量为 3 的资源池的单个服务块(服务从该池中获取单个资源);这本质上已经包含一个队列。

您只需要考虑单独的 Delay/Service 块,如果它们实际上不同 'services'(例如,不同的延迟时间表达式或使用的不同资源)或者您想要将它们与特定的动画位置相关联.

在后一种情况下,您通常仍然不会使用单独的 Delay/Service 块(这迫使您 'hardcode' 每个服务器一个块):一种方法是让您的资源代理自定义持有 'service location' (一个节点)并根据需要初始化它们的代理。然后您的流程变为 Seize --> MoveTo --> Delay --> Release 序列,Seize 块从池中占用,MoveTo 块移动到存储在占用资源中的服务位置节点。 (显然有一些关于具体如何执行此操作的细节,我现在不会讨论,因为它可能与您的问题无关。)