如何从 AnyLogic 数据库表中读取分布信息

Posted

技术标签:

【中文标题】如何从 AnyLogic 数据库表中读取分布信息【英文标题】:How to read distribution information from AnyLogic database table 【发布时间】:2021-12-19 08:07:09 【问题描述】:

我想从 Excel 文件(已导入 AnyLogic 数据库表)中读取有关延迟时间分布的信息。格式为“distribution(parameter1, parameter2,...)”,例如 uniform (0, 0) 或 normal(0, 1)。有没有直接的方法可以做到这一点,还是我需要更深入地研究编程以将表直接链接到延迟持续时间?

数据库表中的相应信息如下所示: Database Table

在向您展示我到目前为止编写的代码之前,可能需要一些背景信息:总共有 3-4 列包含分布信息。对于这些,我从那个 db 表中的其他字符串类型的行中总结出满足某些条件的那些行。

代码的第一部分显示了另一个约束:上述对行的汇总只需要以给定的概率完成(也取自数据库表)。我试图通过绘制一个随机的统一(0,1)数字并将其分配给一个变量来实现。只有当我的抽奖数字小于数据库表中的概率时,我才会继续进行总结。

所以这是我尝试过的: Code Attempt

我得到的错误是“未解决的参考:XYZ”。很可能是因为无法解释 db 表中的分布,所以没有生成随机数......我已经将相应的列设置为键入“代码”,但不幸的是,这似乎不是这样。

有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

有一个很好的函数“executeExpression”。更多信息在这里:How to read probability distributions from a database and save them in collections

【讨论】:

好点,忘了那个:) 太好了,谢谢!但是,此功能似乎对我不起作用-我尝试仅将其包装在分布周围,如下所示: select(executeExpression(distribution)).from(work_plan).where(work_plan.station.eq("11"),工作计划.ccg.eq("2"));并以这种方式围绕整条线: executeExpression(select(distribution).from(work_plan).where(work_plan.station.eq("11"), work_plan.ccg.eq("2")));但它们都不会导致“X 无法解析为变量”错误消失...您对这可能的原因有任何想法吗? 问题很可能出现在我到目前为止编写的其余代码中......是 select(X).from(Y).where(Z = "A", B = "C ") 语法什么可以在 AnyLogic 中完成?

以上是关于如何从 AnyLogic 数据库表中读取分布信息的主要内容,如果未能解决你的问题,请参考以下文章

如何有效地调试 Anylogic 项目?

如何将概率分布与代理相关联 - Anylogic

如何在 AnyLogic 中读取行中的不同列?

从 excel 坐标放置任何逻辑代理

从 Excel 中逐行读取参数以进行 Anylogic 实验

如何理解 AnyLogic 源生成模式?