当前位置: 首页 > 知识库问答 >
问题:

AnyLogic:如何让一个代理在队列中等待直到它改变状态?(离散事件流程图)

百里疏珂
2023-03-14

我开始使用Anylogic作为模拟类,为此我需要对以下行为建模:有一个代理流进入FIFO队列,然后进入服务器(我用延迟块建模),一次一个。代理有两种状态(称为A和B),如果一个代理以状态A到达队列的末尾,它必须等待直到返回到状态B才能进入服务。

我认为在队列和延迟块之间为一个代理提供容量的等待块可能会解决这种情况。但我不知道如何使等待块在代理改变状态时立即释放它。

共有1个答案

司空玮
2023-03-14

是的...我会在队列块后面加一个容量为1的等待块。

现在,当您的座席进入该状态时,在该状态B的进入操作中执行以下操作:

if(currentBlock().equals(main.waitBlock) && main.service.size()==0){
    main.waitBlock.free(this); 
}

您还需要在等待块的“On Enter”中执行此操作:

if(agent.inState(agent.stateB) && service.size()==0){
    self.free(agent);
}

另外,以防万一,在main中添加代理类型的0填充,以便能够使用main。在您的座席状态代码中。

 类似资料:
  • 我对任何逻辑都还是新手。我需要一个解决问题的建议。例如,现在有3个代理在抢占块的队列中等待。第一个代理包含变量6,第二个代理包含变量5,第三个代理包含变量6,因此,来自三个代理的变量之和是17。注意:这三个变量是同一类型(整数)。 提问:我想知道有没有办法计算这个数值? 有一个单一的产品将由两个工人加工。基本上,一个产品要由3个任务来处理,这3个任务是任务a、任务B和任务C,任务a和任务C被称为“

  • 如何在Anylogic中获取块队列中的代理列表?在我的模型中,目前位于队列中的每个代理A都是包含一些代理B的容器。我必须计算代理B。为此,我尝试获取队列中代理A的列表: 但是队列。contents()返回一个空列表。你能帮我吗?谢谢。

  • 我使用等待块使代理等待,直到条件为真(资源空闲)。我尝试在等待块“输入”字段中写入以下内容: 问题是,如果资源变得繁忙,代理将被困在等待块中,不会被释放,即使条件再次变为真。然后,当下一个代理进入等待块时(条件再次变为真),它将传递原本在它前面的代理,但现在被卡住了。有办法解决这个问题吗?

  • 我是AnyLogic的新手,正在构建一个学生服务模拟,在其中我认为如果学生带着简单的问题来到服务中心,工作人员可以快速解决,否则会花费工作人员更多的时间。我使用statechart来实现学生的问题类型:在此处输入图像描述 我将相应的延迟时间设置为:在此处输入图像描述 一旦我尝试构建,编译器给我一个错误:在这里输入图像描述 这是什么意思?有人能告诉我怎么解决吗?

  • 谁能帮助我如何创建一个新的代理人,并将其链接到旧的,以治愈人民? 多谢!

  • 等待队列 到目前为止,我们的实验中,用户进程或内核线程还没有睡眠的支持机制。在课程中提到用户进程或内核线程可以转入等待状态以等待某个特定事件(比如睡眠,等待子进程结束,等待信号量等),当该事件发生时这些进程能够被再次唤醒。内核实现这一功能的一个底层支撑机制就是等待队列wait_queue,等待队列和每一个事件(睡眠结束、时钟到达、任务完成、资源可用等)联系起来。需要等待事件的进程在转入休眠状态后插