1. JaamSim (Java) — 工业级规则嵌入
JaamSim 是传统的离散事件仿真(DES),它的逻辑嵌入通常分为“低代码”和“高代码”两种。
如何嵌入:
方法 A(表达式): 在 GUI 界面中,利用
Assign、SelectionValue等对象的属性框。你可以写类似 Excel 的公式,根据当前排队长度(Queue1.QueueLength)决定去向。方法 B(Java 源码扩展): 这是真正的调度算法嵌入方式。你需要继承
DisplayEntity或Server类,重写其addEntity或getNextEntity方法,将你的 Java 调度逻辑(如遗传算法的执行部分)编译进自定义的.jar包。触发状态/时刻:
实体到达(Entity Arrived): 当一个工件到达分配节点(Branch)时,触发路径选择调度。
资源空闲(Resource Idle): 当一台机器完成加工,触发“从队列中选哪一个工件”的决策。
状态阈值(Threshold): 当某个仓库水位低于 20%,触发补货调度。
2. ProdSim (Python/SimPy) — 数据驱动的调度
ProdSim 是专门为生成生产数据设计的,它对生产线进行了高度抽象。
如何嵌入:
控制器注入: ProdSim 通常有一个
Control模块。你可以定义一个自定义的Dispatcher类,并将其作为参数注入到仿真环境中。逻辑嵌入点: 在它的机器类(Machine Class)或缓存类(Buffer Class)的
request逻辑中。触发状态/时刻:
订单下达: 当新的生产订单(Order)进入系统时,触发“订单投产序列”调度。
工序切换: 机器完成当前操作后,调度算法会检查下一个操作的优先级。
由于 ProdSim 侧重于生成数据,它通常在每一个“状态变更点”都会记录并可能触发逻辑检查。
3. OpenFactoryTwin (OFacT) — 数字孪生闭环嵌入
OFacT 的定位是数字孪生,它更强调**“状态感知 -> 外部决策 -> 执行反馈”**的闭环。
如何嵌入:
外部 API 耦合: 它通常将仿真引擎与逻辑层分离。你可以通过 Python 的
Event Listener(事件监听器)来嵌入。状态模型同步: 你可以将你的调度算法(如强化学习 Agent)写在一个独立的 Python 脚本中,OFacT 的
State Model会定期同步给你的算法。触发状态/时刻:
决策时刻(Decision Epochs): 这是 OFacT 的核心。它不一定随仿真时间步进,而是当系统出现**“自由度”**时触发。
状态突变: 比如设备突然故障(Breakdown)或物料供应中断。此时,调度算法被强制唤醒,进行“重调度(Rescheduling)”。
4. FactorySimPy (Python/SimPy) — 模块化逻辑嵌入
FactorySimPy 对 SimPy 进行了组件化封装,使其更像“拼积木”。
如何嵌入:
策略类(Strategy Class)覆盖: FactorySimPy 允许你为
Buffer或Machine定义PriorityStrategy。嵌入位置: 在
get_priority()或select_next_job()方法中。你可以直接写入简单的 FIFO 规则,也可以调用复杂的搜索算法。触发状态/时刻:
队列变动: 只要缓存(Buffer)中有新零件进入,或者有下游机器请求零件,就会触发调度逻辑。
加工结束: 机器释放资源的瞬间。
工厂生产线调度中,按状态驱动触发类型,将调度算法进行唤醒,以下是工厂生产线调度唤醒状态。
