使用另一个代理移动代理进行 2 次移动

问题描述 投票:0回答:1

我正在尝试让我的叉车代理移动托盘代理。当叉车代理进行 1 次移动(例如从源到存储 1)时,我的模型有效。 我对图像中的节点进行了编号,因为现在我需要相同数量的叉车 ForkliftStore (Home = 1),等待将托盘从 Storage1 (2) 移动到 Storage2 (3) 或从 Storage2 (3) 移动到第 1 行开始 (4)。该模型不允许 ForkliftStore 的源(我在初始化模型时注入叉车)连接到两个延迟节点。

有人有什么建议吗?我希望将叉车保留为代理群体而不是资源,因为这样我可以更好地控制模型的其他区域。

anylogic
1个回答
0
投票

我能够通过创建一个新函数 f_precheckStore 并将所有叉车组合成一个进出流程来解决这个问题。叉车从不同位置的移动由 v_movementNbr 定义,该 v_movementNbr 被传递到每个托盘预检查块中的 f_precheckStore。 f_precheckStore:

//Check if there is forklift available
Forklift fl = findFirst(delayForkliftHome, a->a.v_inUse==false);
if (fl==null) {
    traceln("Forklift is a constraint");
    return;
}
//forkliftStoreAtHome1.get(0);

//Determine movement based on movementNum
fl.v_movementNbr = movementNbr;
if (movementNbr==1 && v_inventoryRawMat < p_capacityRawMat) {
    fl.v_inUse = true;
    delayForkliftHome.stopDelay(fl);
    //variable++;
} else if (movementNbr==2 && v_inventoryMinIng < p_capacityMinIng) {
    fl.v_inUse = true;
    delayForkliftHome.stopDelay(fl);
    //variable++;
} else if (movementNbr==3) {
    fl.v_inUse = true;
    delayForkliftHome.stopDelay(fl);
    //variable++;
}

在 exit_toMovePallet 块中,叉车被告知要进入托盘移动流程的哪个区域:

if (agent.v_movementNbr==1) {
    enter_moveStoreRawMat.take(agent);
} else if (agent.v_movementNbr==2) {
    enter_moveStoreMinIng.take(agent);
} else if (agent.v_movementNbr==3) {
    enter_moveStorePreBulk.take(agent);
} else {
    traceln("Invalid movement type");
}

© www.soinside.com 2019 - 2024. All rights reserved.