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

Simpy订单履行模拟问题:实现购物车全清空逻辑

SimPy仿真模型问题解决方案

问题1:用布尔变量结合get()触发购物车清空逻辑

  1. 为每个订单维护两个核心变量:
    • 一个SimPy.Container实例作为购物车,用来存储商品数量
    • 一个布尔变量(比如ready_to_process),初始设为False
  2. 在商品进入购物车的进程中,每次添加商品后检查当前数量是否达到订单总量的90%:
    # 假设order_total是该订单的总商品数
    if cart.level >= order_total * 0.9 and not ready_to_process:
        ready_to_process = True
        # 触发购物车处理进程
        env.process(process_cart(env, cart, order_total))
    
  3. 在处理进程中,利用get()方法循环取出商品,直到购物车为空,同时重置布尔变量:
    def process_cart(env, cart, order_total):
        global ready_to_process
        while cart.level > 0:
            # 模拟单件商品处理耗时
            yield env.timeout(1)
            yield cart.get(1)
        # 处理完成后重置触发标记
        ready_to_process = False
    
    核心逻辑:仅当ready_to_process变为True时启动处理,处理过程中持续调用get()直到购物车清空,避免提前终止处理流程。

问题2:确保模型运行至所有购物车清空

  1. 为每个订单的处理进程创建SimPy.Event实例,用来标记该订单购物车已清空
  2. 仿真初始化时,收集所有订单的处理完成事件:
    completion_events = []
    order_ids = df['order_id'].unique()
    for order_id in order_ids:
        order_total = df[df['order_id'] == order_id]['order_quantity'].sum()
        # 初始化对应订单的购物车
        cart = simpy.Container(env, init=0, capacity=order_total)
        # 启动商品扫描及入车进程
        env.process(scan_and_deliver(env, df, order_id, cart, order_total))
        # 创建并收集完成事件
        complete_event = env.event()
        completion_events.append(complete_event)
        # 启动处理进程并绑定完成事件
        env.process(process_cart(env, cart, order_total, complete_event))
    
  3. 修改process_cart函数,在购物车清空后触发完成事件:
    def process_cart(env, cart, order_total, complete_event):
        global ready_to_process
        while cart.level > 0:
            yield env.timeout(1)
            yield cart.get(1)
        ready_to_process = False
        # 触发完成事件,标记该订单处理完毕
        complete_event.succeed()
    
  4. 让仿真环境等待所有完成事件结束:
    yield env.all_of(completion_events)
    
    此操作会让仿真持续运行,直到所有订单的购物车都被完全清空,不会提前终止。

额外注意事项

  • 箱子扫描逻辑:用集合记录已扫描的box_id,确保每个箱子仅被扫描一次
  • 商品入车校验:严格对应order_id,避免不同订单的商品混放至同一购物车
  • 多操作员场景:合理分配SimPy资源,避免处理进程被资源阻塞导致无法完成清空

内容的提问来源于stack exchange,提问作者Erin Walter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:37:17