You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AnyLogic中如何访问资源变量及船舶运输仿真问题求助

船舶货物运输模拟解决方案

一、在Service中访问Dock资源的容量并扣除物资

步骤1:给Dock代理添加容量变量

打开你创建的Dock代理类(对应Resource Pool的代理类型),添加以下变量(根据需求调整类型,比如int或double):

  • currentCapacity:当前可用容量(或当前存储量,依业务逻辑定义)
  • triggerThreshold:触发Deliverer生成的阈值

步骤2:在Service的"On Seize"事件中记录分配的Dock

在Service块的属性面板找到On seize事件,添加代码(替换你的代理类名和Resource Pool名称):

// 获取分配给当前船舶的Dock资源
Dock assignedDock = (Dock) getAssignedResources(this, resourcePool_docks).get(0);
// 将Dock实例存入当前Ship代理的变量(需先给Ship代理添加Dock类型变量,比如命名为`assignedDock`)
((Ship)unit).assignedDock = assignedDock;

步骤3:在Service的"On Finish"事件中扣除容量

在Service的On finish事件中,完成物资卸载后的容量扣除:

Ship currentShip = (Ship)unit;
// 根据业务逻辑调整加减方向,这里假设是从Dock可用容量中扣除物资量
currentShip.assignedDock.currentCapacity -= currentShip.cargoAmount;
// 同步检查是否需要生成Deliverer
checkDelivererTrigger(currentShip.assignedDock);

二、当Dock容量达标时触发Deliverer生成

步骤1:配置Deliverer源为手动触发

将生成Deliverer的Source块的Arrival type设置为Manual,关闭随机生成逻辑,并给该Source命名(比如source_deliverers)。

步骤2:实现阈值检查与inject调用

方法一:全局检查方法(主环境中定义)

在主环境的Functions里添加一个全局方法:

public void checkDelivererTrigger(Dock dock) {
    // 根据你的触发条件调整判断逻辑,比如当可用容量低于阈值时触发
    if (dock.currentCapacity <= dock.triggerThreshold) {
        // 调用Source的inject()生成Deliverer
        source_deliverers.inject();
        // 若需生成多个,可循环调用inject()
        // for(int i=0; i<N; i++) source_deliverers.inject();
    }
}

方法二:Dock变量的"On Change"事件触发

在Dock代理类的currentCapacity变量属性中,找到On change事件,添加代码:

// 当容量变化时检查阈值
if (this.currentCapacity <= this.triggerThreshold) {
    // 通过getMain()获取主环境对象,调用Source的inject()
    getMain().source_deliverers.inject();
}

新手注意事项

  • 确保代理类的变量为public,或添加getter/setter方法(若设为private),否则无法跨代理访问。
  • Service块的Resource type需选择你的Dock资源池,且Allocation type设为Seize and hold,确保船舶占用Dock直到卸载完成。
  • 若业务逻辑中Dock的"容量"是指存储上限(卸载是往Dock中添加物资),只需调整currentCapacity的加减方向即可。

内容的提问来源于stack exchange,提问作者Aidan Graef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:01:36