0

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

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

4

1 回答 1

0

因此,听起来您正在使用数组股票,其中数组具有十值 AnyLogic 维度。

如果你点击Edit...初始值的按钮,你会看到它们是用 Java 表示法指定的,{v1, v2, ..., v10}其中 v1 是第一维替代的初始值,等等。(令人困惑的是,这是 Java 数组表示法,它不同于数组stock .)

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

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

例子

Database --> Importing database tables有关如何将 Excel 工作表作为表格导入的信息,请参阅 AnyLogic 帮助。

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

然后假设您的数组 stock 被称为population具有AgeRange替代品的维度YOUNGMIDDLE_AGED并且OLD(替代品 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);

AnyLogicDatabase --> Querying帮助显示了这个数据库选择 Java 代码是如何工作的。

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

于 2016-04-26T15:34:46.200 回答