报告单个 ResourcePool 单元的利用率
Reporting Utilization of Individual ResourcePool units
在Anylogic中,如何获取各个资源池单元的利用率等统计信息?
作为 resourcePool.utilization() 函数 returns 资源池中所有单元的平均利用率。
是否可以访问每个资源池单元的数据?有任何想法吗?
提前致谢!
更新答案
有一种更简单的方法可以获取单个资源单元的利用率:
- 定义自定义资源代理类型,如解释的那样here
- 将此新的资源池自定义类型设置为新资源单元
- 添加此自定义资源类型的空群体(此处命名为 myResources)
- 在Advanced/Population下的资源池中设置这个空人口
现在您可以访问单个资源池单元的利用率,以x作为单元的索引:
myResources(x).getUtilization()
为了跟踪更复杂的统计数据,您可能仍需要使用原始答案的更复杂的解决方案。
原答案:
您可以自己构建一些东西:
使用 ressourcePool 中的 On seize 和 On release 代码通知您的自定义资源代理它是active/not 活跃。您可以向代理传递消息或调用代理内部的函数。
资源代理可以将其当前状态保存在变量、状态图或类似文件中。
然后您可以使用 分析 面板中的标准统计模块来汇总信息,例如获取单个代理的利用率。
[此答案旨在更全面地解释 为什么 有效/是必要的,以及问题的更广泛背景(实际上是两个问题)及其解决方案.]
这里有两个相互交织的问题:
- 正在创建已计算 per-unit 利用率且可访问的资源单元代理。
- 实际上正在访问单个资源单元。 (ResourcePool 没有
get
函数或类似的直接获取其中的代理。)
这在 AnyLogic 帮助中并没有解释得很清楚。
创建特殊资源单元代理
Per-resource-unit 利用率(以及其他功能)作为特殊资源单元的一部分可用 API(应用程序编程接口;基本上是一组功能)在 库参考指南 > 流程建模库 > 资源函数 帮助页面。
但是,这只有在您创建自己的自定义资源单元代理类型时才能访问;当你创建一个资源池时,默认情况下其中的单元是普通的Agent
对象并且不具有这种特殊的资源单元功能。 (您可以通过其 getUtilization
函数获得 pool 的整体利用率。)
对于流程建模库,您可以通过三种方式创建充当资源单元的自定义类型:
新建 --> 代理类型(“项目”面板中模型的 right-click 菜单),指定 Agent will be used in flowcharts as: Resource Unit
;
流程建模库调色板中的 资源类型 元素。 (这有效地显示了与第一种方法相同的向导,但在流程图中的使用不存在并且在幕后自动设置。)
在添加 资源池 时单击 create a custom type
(在 New resource type
设置下),这会将您带到与上面的第二个选择。
[Java / 技术说明:发生的事情是您创建自己的代理类型(Java 术语中 Agent
的子类) 它实现了特殊的 AnyLogic-provided IResourceUnit
接口(Java 定义了所有可用的特殊资源单元 API 函数的东西)。这与稍后相关...]
访问单个资源单元
有几种方法可以做到这一点:
(1) 在您的 资源池 的操作中,您可以通过特殊关键字 unit
访问当前资源单元。 (在编辑这些操作框时将鼠标悬停在灯泡上以获取相关信息。)但是,这只是将它们作为香草 Agent
提供(即使它实际上是自定义资源单位,假设类型为 MyResourceAgent
).
所以你必须 cast(一个 Java 东西)unit
才能有效地说 "I know this is actually a MyResourceAgent
so let me see it as one of those please";例如,
((MyResourceAgent) unit).getUtilization()
(2) 正如在 库参考指南 > 流程建模库 > 资源函数 帮助页面中一样,您可以访问代理通过该代理获取的所有资源单元built-in resourceUnits
合集(列表)。
然而,这又包含了他们作为特工,所以你必须施放他们;例如,
((MyResourceAgent) agent.resourceUnits.get(0)).getUtilization()
(3) 如果您设置资源池以便将其代理添加到自定义群体(而不是 'hidden' 默认群体),则您可以随时通过该群体显式访问它们.
按照前面的示例,您创建了一个空人口(假设 myResourceUnits
类型的代理称为 MyResourceUnit
)并将资源池设置为 Add units to: Custom population
(在其高级属性中), 选择您设置的人口。
然后您可以通过 myResourceUnits(0).getUtilization()
.
等方式访问个人
注意:根据您在资源池中设置 When capacity decreases
的方式,您必须了解您在做什么。如果您将其设置为 Units are destroyed
,那么随着池容量的变化(例如通过时间表),您的人口规模将发生变化。
(Java / 技术说明:在上述所有情况下,您还可以转换为 IResourceUnit
,因为这是所有自定义资源代理的接口类型正在实施。但这不会让您访问您添加到自定义资源类型的任何功能,例如它自己的参数集。)
在Anylogic中,如何获取各个资源池单元的利用率等统计信息? 作为 resourcePool.utilization() 函数 returns 资源池中所有单元的平均利用率。 是否可以访问每个资源池单元的数据?有任何想法吗? 提前致谢!
更新答案
有一种更简单的方法可以获取单个资源单元的利用率:
- 定义自定义资源代理类型,如解释的那样here
- 将此新的资源池自定义类型设置为新资源单元
- 添加此自定义资源类型的空群体(此处命名为 myResources)
- 在Advanced/Population下的资源池中设置这个空人口
现在您可以访问单个资源池单元的利用率,以x作为单元的索引:
myResources(x).getUtilization()
为了跟踪更复杂的统计数据,您可能仍需要使用原始答案的更复杂的解决方案。
原答案:
您可以自己构建一些东西:
使用 ressourcePool 中的 On seize 和 On release 代码通知您的自定义资源代理它是active/not 活跃。您可以向代理传递消息或调用代理内部的函数。
资源代理可以将其当前状态保存在变量、状态图或类似文件中。
然后您可以使用 分析 面板中的标准统计模块来汇总信息,例如获取单个代理的利用率。
[此答案旨在更全面地解释 为什么
这里有两个相互交织的问题:
- 正在创建已计算 per-unit 利用率且可访问的资源单元代理。
- 实际上正在访问单个资源单元。 (ResourcePool 没有
get
函数或类似的直接获取其中的代理。)
这在 AnyLogic 帮助中并没有解释得很清楚。
创建特殊资源单元代理
Per-resource-unit 利用率(以及其他功能)作为特殊资源单元的一部分可用 API(应用程序编程接口;基本上是一组功能)在 库参考指南 > 流程建模库 > 资源函数 帮助页面。
但是,这只有在您创建自己的自定义资源单元代理类型时才能访问;当你创建一个资源池时,默认情况下其中的单元是普通的Agent
对象并且不具有这种特殊的资源单元功能。 (您可以通过其 getUtilization
函数获得 pool 的整体利用率。)
对于流程建模库,您可以通过三种方式创建充当资源单元的自定义类型:
新建 --> 代理类型(“项目”面板中模型的 right-click 菜单),指定
Agent will be used in flowcharts as: Resource Unit
;流程建模库调色板中的 资源类型 元素。 (这有效地显示了与第一种方法相同的向导,但在流程图中的使用不存在并且在幕后自动设置。)
在添加 资源池 时单击
create a custom type
(在New resource type
设置下),这会将您带到与上面的第二个选择。
[Java / 技术说明:发生的事情是您创建自己的代理类型(Java 术语中 Agent
的子类) 它实现了特殊的 AnyLogic-provided IResourceUnit
接口(Java 定义了所有可用的特殊资源单元 API 函数的东西)。这与稍后相关...]
访问单个资源单元
有几种方法可以做到这一点:
(1) 在您的 资源池 的操作中,您可以通过特殊关键字 unit
访问当前资源单元。 (在编辑这些操作框时将鼠标悬停在灯泡上以获取相关信息。)但是,这只是将它们作为香草 Agent
提供(即使它实际上是自定义资源单位,假设类型为 MyResourceAgent
).
所以你必须 cast(一个 Java 东西)unit
才能有效地说 "I know this is actually a MyResourceAgent
so let me see it as one of those please";例如,
((MyResourceAgent) unit).getUtilization()
(2) 正如在 库参考指南 > 流程建模库 > 资源函数 帮助页面中一样,您可以访问代理通过该代理获取的所有资源单元built-in resourceUnits
合集(列表)。
然而,这又包含了他们作为特工,所以你必须施放他们;例如,
((MyResourceAgent) agent.resourceUnits.get(0)).getUtilization()
(3) 如果您设置资源池以便将其代理添加到自定义群体(而不是 'hidden' 默认群体),则您可以随时通过该群体显式访问它们.
按照前面的示例,您创建了一个空人口(假设 myResourceUnits
类型的代理称为 MyResourceUnit
)并将资源池设置为 Add units to: Custom population
(在其高级属性中), 选择您设置的人口。
然后您可以通过 myResourceUnits(0).getUtilization()
.
注意:根据您在资源池中设置 When capacity decreases
的方式,您必须了解您在做什么。如果您将其设置为 Units are destroyed
,那么随着池容量的变化(例如通过时间表),您的人口规模将发生变化。
(Java / 技术说明:在上述所有情况下,您还可以转换为 IResourceUnit
,因为这是所有自定义资源代理的接口类型正在实施。但这不会让您访问您添加到自定义资源类型的任何功能,例如它自己的参数集。)