excel - AnyLogic:在模拟启动时用代理填充托盘架

标签 excel simulation startup anylogic agent

对于托盘架系统的模拟,我想用代理预填充该系统(例如,给出 80% 的填充等级)。预填充之后,盒子应该由不同的源 block 生成。

我认为理论上我可以在主方法中使用命令palletrack.put(int row, int position, int level, boolean leftAisle, Agent agent)来手动添加代理。

但是,我需要在启动时添加数千个代理,这如果手动完成会很乏味(特别是如果我想从不同的填充等级情况开始)。

这些代理的数据可在 Excel 文件中找到。

有没有办法实现Excel文件作为启动情况? 在 Excel 文件中,我拥有所需代理的所有属性,包括其存储位置的行、位置、级别和深度。

提前非常感谢。

最佳答案

你有2个选择

选项 1:Excel 文件

使用连接选项板中的对象,轻松链接模型中的 Excel 文件

然后您可以使用类似于下面的代码初始化所有项目

int excelRow = 2;
String sheetName = "Sheet1!";
String cellName =  sheetName + "A" + excelRow;
while (excelFile.cellExists( cellName )) {
    int row = (int)excelFile.getCellNumericValue( sheetName + "A" +  excelRow);
    int position = (int)excelFile.getCellNumericValue( sheetName + "B" +  excelRow);
    int level = (int)excelFile.getCellNumericValue( sheetName + "C" +  excelRow);
    boolean leftAisle = excelFile.getCellBooleanValue( sheetName + "D" +  excelRow);
    MyAgent agent = add_myAgent();
    
    rackSystem.put(row, position, level, leftAisle, agent);
    
    excelRow ++; // Increase the row that we will lookup in the Excel
}

只需一个 while 循环,只要该行存在,您就可以从 Excel 行转到下一行,然后创建一个代理并根据需要将其放置在机架中

在此示例中,我们假设 A 列到 D 列包含机架中代理的相关位置数据

编辑:大多数时候,您需要让代理进入流程,以便您可以再次移动它们(通常通过 RackPick block ),您可以使用 Enter block - 请参阅下面的示例

您可以简单地调用enter.take(Agent代理)

enter image description here

NB [Stuart Rossiter 编辑]:您可以认为托盘架的 put 函数将代理放入托盘架所在的空间网络内的空间节点中部分。但是,如果代理事先不在空间网络内,则它们不会“完全”添加到网络中,并且当您尝试从空间网络中选择代理时,您会收到“代理不在网络中”错误。架子。 (我怀疑内部实际发生的情况是,机架中的每个单元都有与其关联的网络内坐标,但直到您选择它的那一刻,代理才明确位于网络中。无论如何内部结构,关键是在被挑选之前,必须“告诉”代理它在某个时刻处于空间网络中。)

您可以通过几种方式实现这一点:

(i) 在 put 之后添加显式 setNetwork 调用;例如,

rackSystem.put(row, position, level, leftAisle, agent);
agent.setNetwork(network);

(其中 network 是您的托盘架所属的空间网络)。

(ii) 让您的代理处于初始位置设置为同一空间网络中的某个任意节点的群体中(因此,当您它们放入托盘架中时,它们将已经位于网络)

(iii) 让 Enter 模块(见上文)将其初始位置设置为空间网络中的某个任意节点。 (与上面(ii)相同的想法。)

(iv) 切换为使用 Material 处理库中的新存储元素和存储/检索 block (在 AnyLogic 8.7.7 中添加)。这些不存在上述网络设置问题,并取代流程建模库元素(现在永远不会更新)。您可以使用 store 函数而不是 put 以编程方式将代理添加到存储元素。

选项 2:AnyLogic 内部数据库

只需将 Excel 工作表导入 AnyLogic DB,然后使用 for 循环遍历表中的条目

List<Tuple> rows = selectFrom(db_table).list();

for (Tuple row : rows) {
    traceln(
        row.get( db_table.db_column )
    );
}

关于excel - AnyLogic:在模拟启动时用代理填充托盘架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68858025/

相关文章:

algorithm - QBasic 中狐兔追逐模拟的最佳方式

sql-server - 从 SQL Server Express 转移的最便宜的方法是什么,它是否会使 MS 堆栈无法用于低利润的 Web 应用程序启动?

iPhone 应用程序在某些设备(不是全部)上启动时崩溃

windows - 在用户登录之前,批处理文件不会在 Azure VM 启动上运行

excel - 循环遍历数字组合

excel - 使用 vba 宏从数据透视表中选择字段

excel - 为什么 UNIQUE 和 FILTER 的组合区分实际数字零和从空单元格返回的零?

c# - 根据系统状态以不同方式处理控制事件

c++ - 802154a 的 Omnet++ 和 INET

oracle - 用于带有宏和 VB 的 MS-Excel 电子表格到 Oracle 的转换工具?