你有两个选择
选项 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 以编程方式将代理添加到存储元素。
选项 2:AnyLogic 内部数据库
只需将 Excel 工作表导入 AnyLogic 数据库,然后使用 for 循环遍历表中的条目
List<Tuple> rows = selectFrom(db_table).list();
for (Tuple row : rows) {
traceln(
row.get( db_table.db_column )
);
}