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