AnyLogic中冲压Resource Pool产品变体切换时准备时间实现咨询
冲压资源池变体切换准备时间实现方案
核心思路
为资源池内的每个资源绑定「最后处理的产品变体」标识,实体进入服务前对比变体差异,差异存在时触发准备时间延迟,处理完成后更新资源的变体标识。
具体步骤
给资源添加变体追踪参数
在资源池的Resource自定义属性中添加currentVariant(推荐用枚举类型,比如ProductVariant,也可使用字符串),初始值设为null,用于记录该资源最后处理的产品变体。实体进入前的变体判断逻辑
在实体抵达冲压服务前,添加SelectOutput分支块(或直接在服务的On Enter触发器中处理):- 提前锁定资源池中的可用资源(通过
resourcePool.allocate(agent)方法获取分配的资源); - 对比锁定资源的
currentVariant与当前实体的productVariant:- 若两者不同,将实体导向准备时间Delay块(设置好预设的准备时长);
- 若相同或资源未处理过任何变体(
currentVariant为null),直接进入冲压服务。
- 提前锁定资源池中的可用资源(通过
更新资源的变体标识
在冲压服务的On Release触发器中,执行代码更新资源的变体记录:Resource usedResource = getReleasedResource(); usedResource.currentVariant = agent.productVariant;处理资源池初始状态
第一个进入服务的实体,因资源的currentVariant为null,直接跳过准备时间;处理完成后自动更新标识,后续变体切换时触发准备逻辑。
额外优化建议
- 用枚举类型定义
ProductVariant,避免字符串匹配的错误; - 若资源池容量为3,可优先选择同变体的可用资源,减少切换次数(通过
resourcePool.find(resource -> resource.currentVariant.equals(agent.productVariant))筛选资源); - 准备时间可设置为变体间的差异化时长,比如从A到B和B到A的准备时间不同,可通过
HashMap<VariantPair, Double>存储对应时长。
内容的提问来源于stack exchange,提问作者Moubarik Achraf
相关产品推荐
相关产品推荐

