报告单个资源池单元的利用率

2024-01-04

在 Anylogic 中,如何获得统计信息,例如各个资源池单元的利用率? 由于resourcePool.utilization()函数返回资源池中所有单元的平均利用率。 是否可以访问每个资源池单元的数据?有任何想法吗? 提前致谢!


[此答案旨在更全面地解释why 弗洛里安的回答 https://stackoverflow.com/a/56340186/185055有效/是必要的,以及问题的更广泛背景(实际上是两个问题)及其解决方案。]

这里有两个相互交织的问题:

  1. 创建计算并可访问每单位利用率的资源单位代理。
  2. 实际上访问各个资源单元。 (A资源池没有get函数或类似的函数来直接获取其中的代理。)

AnyLogic 帮助中对此并没有解释得很清楚。

创建特殊资源单元代理

每个资源单元的利用率(以及其他功能)可作为特殊资源单元 API(应用程序编程接口;基本上是一组函数)的一部分,在库参考指南 > 流程建模库 > 资源函数帮助页面。

However,仅当您创建自己的自定义资源单元代理类型时才可以访问;当你创建一个资源池,默认情况下,其中的单位是普通单位Agent对象并做not具有这种特殊的资源单元功能。 (您可以得到整体利用率pool通过其getUtilization功能。)

对于流程建模库,您可以通过三种方式创建充当资源单元的自定义类型:

  • 新建 --> 代理类型(在项目面板中右键单击模型菜单),指定Agent will be used in flowcharts as: Resource Unit;

  • The 资源类型流程建模库调色板中的元素。 (这有效地显示了与第一种方法相同的向导,但不存在流程图中的使用,并且在幕后自动设置。)

  • 点击create a custom type当添加一个资源池(在下面New resource type设置),这将带您进入与上面第二个选项相同的向导。

[Java / 技术说明:发生的情况是您创建自己的代理类型(Agent在Java术语中)它实现了特殊的AnyLogic提供的IResourceUnit接口(一个 Java 事物,定义了所有可用的特殊资源单元 API 函数)。这是稍后相关的...]

访问各个资源单元

做这件事有很多种方法:

(1) 在您的行为中资源池您可以通过特殊关键字访问当前资源单元unit。 (编辑这些操作框时将鼠标悬停在灯泡上即可获取相关信息。)However,这只是将它们提供为香草Agent(即使它实际上是一个自定义资源单元,比如说类型MyResourceAgent).

所以你必须cast(Java 的东西)unit有效地说“我知道这实际上是MyResourceAgent所以请让我将其视为其中之一”;例如,

((MyResourceAgent) unit).getUtilization()

(2) 如在库参考指南 > 流程建模库 > 资源函数帮助页面,您可以访问代理通过该代理的内置功能获取的所有资源单元resourceUnits集合(列表)。

然而,这又包含了他们作为特工,所以你必须铸造他们;例如。,

((MyResourceAgent) agent.resourceUnits.get(0)).getUtilization()

(3) 如果您设置资源池,以便将其代理添加到自定义群体(而不是“隐藏”默认群体)中,则您可以随时通过该群体显式访问它们。

按照前面的示例,您创建一个空群体(假设称为myResourceUnits对于代理类型MyResourceUnit)并将资源池设置为Add units to: Custom population(在其高级属性中),选择您设置的人口。

然后您可以通过以下方式访问个人:myResourceUnits(0).getUtilization().

NB:你必须知道你在做什么,这取决于你如何设置When capacity decreases您的资源池中的设置。如果您将其设置为Units are destroyed那么你的人口规模将随着池容量的变化而变化(比如通过时间表)。

(Java / 技术说明:在上述所有情况下,您还可以投射到IResourceUnit因为这是所有自定义资源代理类型正在实现的接口。但这不会让您访问添加到自定义资源类型的任何功能,例如其自己的参数集。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

报告单个资源池单元的利用率 的相关文章

随机推荐