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

Simpy供应链模拟报Process与int实例不支持<比较错误如何解决

问题根源

你代码的错误出在warehouse_control函数的补货逻辑行:

yield env.timeout(env.process(supplier(env,warehouse_stock_level)))

SimPy中env.timeout()的入参要求是整数/浮点数类型的等待时长,但你传入了env.process()返回的Process对象,类型不匹配才触发了<运算符不支持的报错(SimPy内部做时间比较时出现类型冲突)。

修正方案

如果你想要等待供应商补货流程执行完毕再继续后续逻辑,不需要套env.timeout,直接yield对应的Process对象即可,将该行修改为:

yield env.process(supplier(env,warehouse_stock_level))

另外你的代码头部缺少依赖导入,需要补充:

import simpy
import random
import itertools

修正后可运行完整代码

import simpy
import random
import itertools

SAFETY_STOCK_LEVEL = 1000      # SAFETY STOCK LEVEL IN WAREHOUSE
CUSTOMER_DEMAND = [200,400]   # DEMAND FROM RETAILER
THRESHOLD = 60                # in %
PRODUCTION_TIME = 5           # DAYS TO PRODUCE GOOD BY SUPPLIER
RETAIL_ORDER_TIME = [0,2]     # FREQUENCY OF RETAIL ORDER PLACED IN DAYS
SIMULATION_TIME = 100        # TIEM TO RUN THE SIMULATION
PACK_SEND_TIME = 3            # TIME TO PACK AND SEND TO RETAILER FROM WAREHOUSE

def warehouse_packing_activity(env,order_number,goods_demand,warehouse_activity,warehouse_stock_level):
  """ DO THE PACKING"""
  print("Order number ", order_number," received with demand ", goods_demand, " at ", env.now, sep="")
  
  with warehouse_activity.request() as req:
    start = env.now
    yield req

    yield warehouse_stock_level.get(goods_demand)
    yield env.timeout(PACK_SEND_TIME)
    print("Order number ", order_number, "delivered at ", env.now - start)

def warehouse_control(env,warehouse_stock_level):
  while True:
    print("CHECK", warehouse_stock_level.level)
    print(warehouse_stock_level.level / warehouse_stock_level.capacity * 100)
    if ((warehouse_stock_level.level / warehouse_stock_level.capacity) * 100) < THRESHOLD:
      print("Placing Order to Supplier at ", env.now)
      yield env.process(supplier(env,warehouse_stock_level))
    
    yield env.timeout(3) #Checking every 3 unit days

def supplier(env,warehouse_stock_level):
  """Supply goods to warehouse when requested"""
  yield env.timeout(PRODUCTION_TIME)
  amount = warehouse_stock_level.capacity - warehouse_stock_level.level
  print("Order quantity is ", amount)
  yield warehouse_stock_level.put(amount)
  print("Replenishment order fullfilled at ", env.now)

  

def retail_order_generator(env,warehouse_activity,warehouse_stock_level):
  """GENERATE ORDER"""
  for i in itertools.count():
    goods_demand = random.randint(*CUSTOMER_DEMAND)
    env.process(warehouse_packing_activity(env,i,goods_demand,warehouse_activity,warehouse_stock_level))
    yield env.timeout(random.randint(*RETAIL_ORDER_TIME))

env = simpy.Environment()
warehouse_activity = simpy.Resource(env,1)
warehouse_stock_level = simpy.Container(env,SAFETY_STOCK_LEVEL,SAFETY_STOCK_LEVEL)
env.process(retail_order_generator(env,warehouse_activity,warehouse_stock_level))
env.process(warehouse_control(env,warehouse_stock_level))

env.run(until=SIMULATION_TIME)

内容的提问来源于stack exchange,提问作者Shubhankar Dhavale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:05