AnyLogic中如何从ResourcePool释放指定的特定资源?
这个需求完全可以实现,不属于AnyLogic资源模块的原生限制,具体操作逻辑如下:
实现步骤
第一步:存储每次抢占到的特定资源实例
你需要先在执行抢占操作的载体(可以是流程中的实体、自定义Agent或Main)中定义一个集合变量,类型对应你的资源Agent类。比如资源池内的资源类型为自定义的Worker,就定义集合:List<Worker> seizedResources = new ArrayList<>();如果使用流程库的
Seize模块,在模块的「On seize unit」动作栏添加代码,把每次抢占到的资源实例存入集合:seizedResources.add(unit);其中
unit是Seize模块内置变量,代表当前刚被抢占到的单个资源实例。如果是通过代码调用抢占API,直接把返回的资源实例存入集合即可。第二步:调用指定资源的释放方法
不需要使用默认的Release模块(该模块默认会自动选择资源释放),直接调用你存储的目标资源实例自带的release()方法即可完成指定释放,同时将该资源从你的占用集合中移除:// 示例:释放集合中索引为1的指定资源 Worker target = seizedResources.get(1); target.release(); seizedResources.remove(target);
注意事项
- 若你是通过
ResourceSet批量抢占多个资源,也可以遍历ResourceSet把所有资源实例存入自定义集合,释放逻辑和上述一致。 - 不要直接调用
ResourcePool的release相关方法,该类方法默认会从池内任选已占用资源释放,不符合指定释放的需求。
内容的提问来源于stack exchange,提问作者CrustyNoodle
相关产品推荐
相关产品推荐

