首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AnyLogic:在模拟启动时用代理填充托盘架

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

Stack Overflow用户
提问于 2021-08-20 06:50:44
回答 1查看 347关注 0票数 1

对于一个托盘架系统的模拟,我想预先填充该系统的代理(例如,一个80%的填充等级是给定的)。在此之后,预填充框应该由不同的源块生成。

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

但是,我需要在启动时添加数千个代理,这将是繁琐的手工操作(特别是如果我想从不同的填充级别情况开始)。

这些代理的数据可在Excel文件中获得.

是否有方法将Excel文件实现为启动状态?在Excel文件中,我拥有所需的代理的所有属性,包括它们存储位置的行、位置、级别和深度。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-21 06:33:56

你有两个选择

选项1: Excel文件

只需使用连接面板中的对象链接模型中的Excel文件即可

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

代码语言:javascript
运行
复制
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
}

只要行存在,您就可以从一条excel行转到另一条excel行,然后创建一个代理,并根据需要将它放在机架中。

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

编辑:大多数情况下,您需要让代理进入流程流,以便您可以再次移动它们(通常通过RackPick块),您可以使用enter块-参见下面的示例

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

NB Stuart Rossiter编辑:您可以想到托盘架的put函数,将代理放入托盘架所在的空间网络中的空间节点中。但是,如果代理事先不在空间网络中,它们就不会被‘完全’添加到网络中,当您尝试从机架中选择代理时,您将得到一个"Agent不在网络中“的错误。(我怀疑实际上在内部发生的情况是,机架中的每个单元都有与其相关联的网络内坐标,但代理直到您选择它时才显式地存在于网络中。无论内部是什么,重点是必须“告诉”代理,它在被选中之前在空间网络中。)

您可以从以下几个方面考虑到这一点:

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

代码语言:javascript
运行
复制
rackSystem.put(row, position, level, leftAisle, agent);
agent.setNetwork(network);

(其中network是空间网络,您的托盘架是其中的一部分)。

(ii)在同一空间网络中将初始位置设置为任意节点的人口中的代理(因此,当您在托盘架上put它们时,它们就已经在网络中了)

(3)让Enter块(见上文)将其初始位置设置为空间网络中的某个任意节点。(与上文第(二)项相同)

(iv)切换到使用新的存储元素并从材料处理库中存储/检索块(添加在AnyLogic 8.7.7中)。它们没有上面提到的网络设置问题,并且取代了元素(这些元素永远不会被更新)。您可以使用store函数而不是put来以编程方式向存储元素添加代理。

备选方案2: AnyLogic内部数据库

只需将excel工作表导入到AnyLogic DB中,然后使用for循环对表中的条目进行循环。

代码语言:javascript
运行
复制
List<Tuple> rows = selectFrom(db_table).list();

for (Tuple row : rows) {
    traceln(
        row.get( db_table.db_column )
    );
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68858025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档