通过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 = 1
和 process1=23
machine2 = 0
和 process2=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 中的基于代理的建模解决“java.lang.IndexOutOfBoundsException”问题?