Anylogic中Resource Sets Dynamic Assignment动态资源占用语法咨询
AnyLogic动态占用指定数量资源的变量配置方法
你此前使用ArrayList传入报错的核心原因是:AnyLogic的Resource Sets Dynamic Assignment字段仅接收ResourcePool类型的数组作为输入,和集合类类型不匹配。
正确的resourceSetsToSeize定义和使用流程如下:
- 在对应的Agent类型中新增变量,命名为
resourceSetsToSeize,变量类型选择ResourcePool[](资源池数组),初始值可设置为new ResourcePool[0]。 - 在Agent生成、或资源需求变更的逻辑位置,按实际需要占用的资源数量生成对应数组并赋值,示例代码如下:
// 示例:当前Agent需要占用4个名为resourcePool的资源池的资源 int requiredCount = 4; this.resourceSetsToSeize = new ResourcePool[requiredCount]; for(int i = 0; i < requiredCount; i++){ // 可按需给不同位置赋值不同资源池,实现混合占用多类资源的需求 this.resourceSetsToSeize[i] = resourcePool; }
- 在Seize块的Resource Sets Dynamic Assignment输入框中直接填写
agent.resourceSetsToSeize即可正常生效,无需额外包裹大括号。
如果你已经用ArrayList<ResourcePool>存储了目标资源集合,可通过如下代码转换为符合要求的数组格式:
// 其中resList为你已定义的ArrayList<ResourcePool>对象 resourceSetsToSeize = resList.toArray(new ResourcePool[resList.size()]);

内容的提问来源于stack exchange,提问作者Miguel Roberto Campos Murcia
相关产品推荐
相关产品推荐

