gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:16:14 28 4
gpt4 key购买 nike

对于托盘架系统的模拟,我想用代理预填充该系统(例如,给定 80% 的填充等级)。在预填充之后,盒子应该由不同的源 block 产生。
我认为理论上我可以使用命令 palletrack.put(int row, int position, int level, boolean leftAisle, Agent agent)在 main 方法中手动添加代理。
但是,我需要在启动时添加数千个代理,手动操作会很乏味(特别是如果我想从不同的填充等级情况开始)。
这些代理的数据在 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 agent) enter image description here
注意 [Stuart Rossiter 编辑]:你可以想到 put托盘架的功能将代理放入托盘架所在的空间网络中的空间节点。但是,如果代理事先不在空间网络中,它们不会“完全”添加到网络中,当您尝试从架子。 (我怀疑内部实际发生的情况是机架中的每个单元都有与之关联的网络内坐标,但是代理直到您选择它的那一刻才明确在网络中。无论内部如何,关键是在选择代理之前,必须“告知”它在空间网络中的某个时间点。)
您可以通过以下几种方式实现这一点:
(i) 添加显式 setNetwork调用您的 put ;例如。,
rackSystem.put(row, position, level, leftAisle, agent);
agent.setNetwork(network);
(其中 network 是您的托盘货架所在的空间网络)。
(ii) 让您的代理在初始位置设置为同一空间网络中的某个任意节点的群体中(因此当您 put 他们在托盘架中时,他们将已经在网络中)
(iii) 让 Enter block (见上文)将它们的初始位置设置为空间网络中的某个任意节点。 (与上述(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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com