通过anylogic中的特定资源路由代理

Posted

技术标签:

【中文标题】通过anylogic中的特定资源路由代理【英文标题】:Routing agents through specific resources in anylogic 【发布时间】:2021-09-10 16:51:24 【问题描述】:

我正在使用 anylogic 解决作业车间调度问题。我有 20 个工作(代理)和 5 台机器(资源),每个工作都作为访问机器的特定顺序。我的问题是:如何确保每项工作都遵循其顺序。

This is what I have done. One agent called 'jobs' and 5 agents, each one corresponding to a machine. One resource pool associated to each one of the service blocks. In the collection enterblocks I selected the 5 enter blocks.

In the agent 'jobs' I have this. The parameters associated to each job, read from the database file, and the collection 'enternames' where I selected the machine(1,2,3,4,5) parameters and the collection 'ptimes' where I put the processing times of the job (This two colletions is where I am not sure I have done it correctly)

My database file

我不确定如何使用此处使用的计数器How to store routings in job shop production in Anylogic。在上一个链接中,在退出块中使用了 getNextService 函数,但由于计数器,我也不确定如何在我的情况下使用它。

【问题讨论】:

嗨,如果您提出非常具体的问题,这个地方最适合您,准确地展示您已经尝试过的内容以及您遇到的问题。如果您的问题过于宽泛,需要完整的讲座来告诉您所有相关信息。我建议您阅读此处以了解如何提出重要问题:使用 ***.com/help/how-to-ask,本文重点介绍 AnyLogic:benjamin-schumann.com/blog/2021/4/1/… 将我们视为非常忙碌的同事,乐于提供帮助。你在问题上付出的努力越多,你得到答复的可能性就越大:) 我有一个数据库,它包含 20 行(每行对应一个作业)和 10 列(机器序列和每台机器对应的处理时间)。我想做作业车间调度,但我不知道如何按照文件中给出的顺序将每个作业分配给机器。我正在做这篇文章***.com/questions/60158916/… 中的内容,但我对如何使用这些集合有一些疑问。 我对原帖做了一些修改 【参考方案1】:

首先,确认基于 Job 代理和数据库视图,数据库中的第一行将产生一个 Job 代理,其值如下:

    machine1 = 1process1=23 machine2 = 0process2=82 等等

如果这是本意,那么更好的方法是重组数据库,所以有两个表:

    机器序列的作业表如下所示:
job op1 op2 op3 op4 op5
1 machine2 machine1 machine4 machine5 machine3
2 machine4 machine3 machine5 machine1 machine2
3 ... ... ... ... ...
    作业到处理时间表

然后,将 String 类型为 ArrayList 的集合添加到 Job(我们称此集合为 col_machineSequence),当 Job 代理被创建时,它们的on startup 代码应该是:

   for (String param : List.of("op1","op2","op3","op4","op5")) 
       col_machineSequence.add(getParameter(param));
   

因此,col_machineSequence 将包含每个作业应按照数据库中定义的顺序访问的机器序列。

注意:请参阅help on getParameter() here。

还有:

    没有必要在 Service 前面放置 Queue 不需要重复Enter-Queue-Service-Exit,这可以使用@来简化987654323@

后续说明:

    集合 - 这些将包含在每个工作代理中 队列排序 - Service 块具有 Priorities / preemption,它控制队列中的排序 为第二个表创建另一个代理(调用代理ProcessingTime和表processing_time)并将其添加到Job代理,然后从数据库过滤加载它p_jobid如图所示

【讨论】:

好的,我想我明白了,但我还有一些问题。我应该像你建议的那样创建 2 个集合,一个用于序列,另一个用于处理时间,对吗?另一个问题是,我的收藏数量与我拥有的代理数量一样多,对吗?或者它只是一个包罗万象的东西?最后,我在服务前有一个队列,因为我将根据处理时间对作业进行排序,或者我可以在服务块中这样做?谢谢你的回答 哦,另一个问题 :) 我仍然应该以我目前使用的方式使用集合 enterblocks 吗? 很抱歉,使用数据库表我只能将其中一个关联到代理 Jobs... @RodrigoLemos,如果您有……新问题,请随时提出新问题。检查 *** 是如何工作的,它不是一个论坛(back'n'forth comms),而是一个纯粹的问答场所 :) 我会在我的回答中添加说明,但如果您仍然不清楚并且需要更多帮助,最好添加一个单独的问题。

以上是关于通过anylogic中的特定资源路由代理的主要内容,如果未能解决你的问题,请参考以下文章

AnyLogic:停止延迟块中特定代理的延迟

如何在 Anylogic 中创建与特定代理的连接并为代理显示动画连接

如何通过 Anylogic 中的基于代理的建模解决“java.lang.IndexOutOfBoundsException”问题?

Anylogic:避免在占用块中不必要地执行进程

Anylogic,将代理拆分为多种不同的代理类型

(Anylogic)如何从另一个代理引用 Main