繁体   English   中英

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

[英]AnyLogic: Fill a pallet rack on simulation startup with agents

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

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

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

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

有没有办法实现 Excel-File 作为启动情况? 在 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 块),您可以使用 Enter 块 - 请参见下面的示例

你可以简单地调用enter.take(Agent agent)

在此处输入图片说明

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

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

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

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

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

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

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

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

选项 2:AnyLogic 内部数据库

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM