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

剩余服务时间最短的代理抢占

赵灼光
2023-03-14

亲爱的AnyLogic社区,

我是AnyLogic的新手,希望你们能帮助我!

我有一个简单的流程模型,由多个源、队列、抢占、延迟、释放和接收器(流程模型)组成。我建模的系统是一个服务器容量问题。我有不同的服务时间和有限的服务器容量的代理,我感兴趣的KPI是在资源池耗尽时没有得到适当服务的客户的数量。目前,我允许客户在使用所有资源时在队列块超时,但这并不能准确地表示系统在实际生活中的表现。

在现实中,新进入的代理可以抢占并终止被服务的代理的服务,更具体地说,是剩余服务时间最少的代理。我在抓住块中看到了抢占选项,但是我很难定义应该终止谁的服务。

你们中有人知道我如何在完全消除队列的情况下,对剩余服务时间最短的代理的抢占进行建模吗?

非常感谢您的时间和帮助!

共有1个答案

史和泰
2023-03-14

我实际上会写一些脚本来完全控制这一点。在下面的方法中,我没有抓住/释放块。AnyLogic的延迟块可以有一个容量并报告数据。我通常会发现它能满足我的需要。如果我有多个区域从同一个资源池中提取,我倾向于只使用实际的抓住/释放块。如果它像你的图,我只是使用一个有能力的延迟块,并避免抓住/释放。

在队列的出口处,我调用一个函数来确定是否要将某人从延迟块中拉出。如果我这样做了,我就把它们发送到另一个代码分支。如果需要,可以将enterPreempted设置为返回延迟。

需要注意的一点是,您可能希望队列按某种优先级或代理比较排序。这将使新到达的代理排在队列的前面(如果那是他们应该在的位置)。否则,如果您在队列的最前面得到一个它,它认为它不够重要,无法抢占延迟,那么它就会被卡在第一个位置,从而阻止其他人进行评估。如果您使用优先级,那么如果在代理进入队列后优先级发生更改,请确保使用sortAgents()。

如果您想要抓住/释放块,这种使用自定义函数的一般方法也可以起作用。您只需要从抓住调用函数,并确保在延迟块和enterPreempted块之后释放资源。

有人可能会回答如何做你想要的任何逻辑开箱。然而,我倾向于默认保持块尽可能简单,并编写自己的函数。您可以想象,我们可以很容易地修改这个函数,以寻找其他更高级的标准,即我们想要从延迟块中删除某人的人/时间。

 类似资料:
  • 如果它们是具有以下数据的两个过程,甘特图应该如何?(SRTF 调度) 进程到达突发 P1 0 17 P2 1 16 那么,进程P1会先完成,然后P2会开始执行……还是P1必须等待16毫秒?

  • 接下来的最短剩余时间如何解决这个问题?“最短作业优先”的抢占式版本。 我了解选择完成前剩余时间最少的过程来执行。但是,如果到达的新进程的突发时间与当前正在执行的进程的剩余完成时间完全相同,会发生什么情况? 如果一个新进程到达,其突发时间与当前执行的进程相同(如本例所示),那么当前执行的过程是否继续? 我的理解正确吗?提前谢谢你。

  • 我正在尝试在 java 中模拟 CPU 调度算法并使用多线程。我已经成功地实施了FCFS(先到先得)和SJF(最短的工作优先)。但问题是当我开始想到SRTF(最短剩余时间优先)时,它是SJF的一种先发制人的形式。我正在使用以下模型: CPU的线程,它有一个变量,它每保持滴答声(一个简单的时钟增量)。我有一个标志,用于在开始执行之前检查CPU是否可用。 长期调度程序(LTS)的线程,它将进程从进程列

  • 该算法是SJF调度的抢先版本。 在SRTF中,过程的执行可以在一段时间后停止。 在每个进程到来时,短期调度程序在可用进程列表和正在运行的进程中以最少的剩余突发时间安排进程。 一旦所有进程都在就绪队列中可用,就不会执行抢占,并且该算法将作为SJF调度工作。 当进程从执行中被移除并且下一个进程被调度时,进程的上下文被保存在进程控制块中。 该PCB在下一次执行该过程时被访问。 示例 在这个例子中,有五个

  • 我使用最短剩余时间优先算法(SRTF)来计算流程的平均等待时间和周转时间。 我想以如下所示的表格格式打印结果。 这里AT=到达时间,TT=周转时间,WT=等待时间。但是由于过程3和4的完成时间不可能,出现了一些错误。这是我的代码: 我犯了什么错误?请纠正我。

  • 问题内容: 如何获取util.Timer中剩余的时间?我想做的是添加一个进度条,显示直到计时器重新开始之前剩余的时间。 这就是我到目前为止所得到的: 问题答案: 您将需要第二个计时器以特定间隔刷新gui。 实现此目的的另一种方法是每秒激活一个计时器并更新ui中的计数。如果时间到了,请致电您的具体措施。 一个仅带有控制台输出的简单示例: 它的输出将是: 然后只需使用代码更改System.out即可更