Anylogic系统建模,使用excel表作为数据库

Posted

技术标签:

【中文标题】Anylogic系统建模,使用excel表作为数据库【英文标题】:Anylogic System Modelling, using excel table for database 【发布时间】:2016-08-17 21:05:09 【问题描述】:

有人可以帮助我吗?! 我用的是 Anylogic。有一个人口(=股票),分为 10 个不同的组(取决于年龄)。我想将它用于我的结构。 我的结构中已经有 excel 表,但我不知道如何使用它。或者如果我使用“tablefuntion”会更好?! 我找不到任何关于这个的好教程。只有一个数字的例子。 例如。库存:起始值 = 10000。 但我需要库存:起始值 = Group1:50,Group2:30,Group3:20。

有人可以帮助我吗?! 非常感谢!

【问题讨论】:

您能否说明一下您当前的模型是什么样的以及您想要实现的目标?理想情况下有一些屏幕截图......一般来说,系统动力学股票只能采用一种“流体”(即人口),听起来你希望它处理 10? @Benjamin 我假设他正在使用阵列股票。看我的回答。 顺便说一句,您的问题标题有点误导/含糊。也许像“使用 Excel 数据初始化 AnyLogic 数组股票”这样的东西会更好? 【参考方案1】:

所以听起来您正在使用数组股票,其中数组是十值 AnyLogic 维度。

如果您点击Edit... 按钮获取初始值,您会看到它们是在Java 符号v1, v2, ..., v10 中指定的,其中v1 是一维备选方案的初始值,等等。(令人困惑的是,这是Java与数组 stock 不同的数组表示法。)

没有直接的方法可以从 Excel 数据初始化这些。使用 AnyLogic 7.2+,您可以相当轻松地将 Excel 值导入 AnyLogic 数据库表,但与基本的 AnyLogic 变量或参数不同,没有可视化向导来设置查询以填充股票的初始值。

您最好的选择可能是将 Excel 工作表导入 AnyLogic 数据库表,然后在模型的启动代码中,通过查询显式循环设置 10 个值。您可以在股票上使用set 方法(函数)来设置每个值(它有两个参数:要设置的值,然后是要设置的维度替代数)。

示例

请参阅 AnyLogic 帮助 Database --> Importing database tables,了解如何将 Excel 工作表导入为表格。

假设您的表名为 stock_vals,列有 stock_name(标识值所针对的股票)、val1val2 等(为维度条目 1 提供 double 值, 2等)。

然后假设您的数组股票被称为population,其维度为AgeRange,具有替代品YOUNGMIDDLE_AGEDOLD(替代品1、2和3——我只是使用了三个替代品来实现它更简单)。然后假设你的表中有条目

"population", 100.0, 200.0, 300.0

那么你可以在你的启动逻辑中使用如下代码:

stock.set(selectFrom(stock_vals).where(stock_vals.stock_name.eq("population")).uniqueResult(stock_vals.val1), 1);
stock.set(selectFrom(stock_vals).where(stock_vals.stock_name.eq("population")).uniqueResult(stock_vals.val2), 2);
stock.set(selectFrom(stock_vals).where(stock_vals.stock_name.eq("population")).uniqueResult(stock_vals.val3), 3);

AnyLogic Database --> Querying 帮助显示了此数据库选择 Java 代码的工作原理。

上面的代码可以整理/变得更优雅,但这就是本质。

【讨论】:

以上是关于Anylogic系统建模,使用excel表作为数据库的主要内容,如果未能解决你的问题,请参考以下文章

Anylogic 7. 数据库建模

计算如何在 anylogic 上工作?

表格数据从 Excel 输入到 Anylogic 中的系统动态库存

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

Anylogic中银行的离散事件建模

用anylogic的超市排队系统仿真分析