对于托盘架系统的模拟,我想用代理预填充该系统(例如,给出 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代理)
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/