AnyLogic存储系统穿流式货架与异高货架建模问题咨询
问题1:AnyLogic中穿流式(flow through)存储货架的建模方法
- 核心逻辑:放弃默认
RackStore/RackPick的随机/就近存取规则,通过FIFO队列绑定货位的方式实现一端存一端取的逻辑 - 具体操作步骤:
- 提前为货架所有货位按存入端到取出端的顺序编排序号,存入时取当前最小序号的空货位,取出时取当前最小序号的已占用货位,天然匹配穿流式货架的先进先出规则
- 用两个自定义
ArrayList分别维护空货位集合、已占用货位集合:每次存托盘前从空货位集合弹出第一个元素作为目标货位,存入后将该货位追加到已占用集合末尾;每次取托盘前从已占用集合弹出第一个元素作为取货目标,取出后将该货位追加到空货位集合末尾 - 若为跨巷道穿流式货架,需额外给存、取操作分别绑定对应端的存取机服务范围,避免出现存取机跨端作业的逻辑错误
- 特殊场景适配:如果有批次优先级要求,仅需要在已占用集合弹出前增加批次属性判断,调整弹出顺序即可满足需求
问题2:存储货架不同层高属性的建模方法
- 实现逻辑:AnyLogic默认Rack对象的层高为全局统一配置,需要通过自定义货位属性+存取前置校验的方式实现差异化层高设置
- 具体操作步骤:
- 为Rack对象新增自定义数组变量
levelHeight,按层数顺序存储每一层的高度,比如示例中两层层高180cm、一层次高160cm的三层货架,配置为new double[] {180, 180, 160},注意数组下标要和你设定的货架层号对应 - 为托盘代理新增自定义
height属性,存储每个托盘的实际高度 - 在执行
RackStore存托盘前增加筛选逻辑:仅保留所在层高度≥托盘高度的空货位作为可选目标,不符合层高要求的货位直接排除,再从符合条件的货位中选择最终存入位置 - 若需要3D可视化展示层高差异,可在Rack的3D属性设置中,自定义每一层隔板的位置,按你设定的层高数值调整即可
- 为Rack对象新增自定义数组变量
- 简化方案:如果层高差异仅用于属性统计、不需要联动存取规则,可直接为每个货位新增
height自定义属性,初始化时批量赋值对应层高即可,不需要修改现有存取逻辑
内容的提问来源于stack exchange,提问作者sljb12
相关产品推荐
相关产品推荐

