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

基于Python列表的供需唯一匹配模拟实现技术问询

供需唯一匹配的Python模拟实现

我来帮你完成这个一对一的供需匹配模拟实现~ 你的需求是让每个需求ID唯一对应一个未被使用的供给ID,同时每个供给ID只能被分配一次,下面是基于你给出的初始框架完善后的完整代码:

dmndId_w_freq = [['a',4,[1,2,3,4]],['b',6,[5,6,7,8,3,4]],['c',7,[6,5,7,9,8,3,4]],['d',8,[1,6,3,4,5,6,7,10]]]
num_sims = 1

for sim_count in range(num_sims):
    # 初始化标记字典:记录需求是否已完成匹配
    dmndID_used_flag = {}
    # 初始化标记字典:记录供给是否已被占用
    splID_used_flag = {}
    # 存储最终的一对一匹配关系
    dmndID_splId_one_match = {}
    
    # 遍历每个需求项
    for dmnd_item in dmndId_w_freq:
        dmnd_id = dmnd_item[0]
        spl_candidates = dmnd_item[2]
        
        # 如果当前需求还未匹配
        if dmnd_id not in dmndID_used_flag or not dmndID_used_flag[dmnd_id]:
            # 遍历该需求的可选供给列表,找第一个未被占用的供给
            for spl_id in spl_candidates:
                if spl_id not in splID_used_flag or not splID_used_flag[spl_id]:
                    # 完成匹配
                    dmndID_splId_one_match[dmnd_id] = spl_id
                    # 标记需求已匹配,供给已占用
                    dmndID_used_flag[dmnd_id] = True
                    splID_used_flag[spl_id] = True
                    # 找到匹配后就跳出循环,不再继续检查后续供给
                    break
    
    # 打印本次模拟的匹配结果
    print(f"模拟 {sim_count+1} 的匹配结果:")
    for dmnd, spl in dmndID_splId_one_match.items():
        print(f"需求 {dmnd} -> 供给 {spl}")

代码关键逻辑说明

  • 标记字典的作用:dmndID_used_flag和splID_used_flag分别用来跟踪需求和供给的使用状态,确保不会重复匹配
  • 匹配优先级:按照需求的遍历顺序,以及每个需求内部供给列表的顺序,优先分配靠前的未被占用供给
  • 终止条件:每个需求找到第一个可用供给后立即停止遍历该需求的供给列表,保证效率

可选优化:基于频率调整匹配优先级

如果需要优先给频率高的需求分配供给,可以先对需求列表按频率降序排序,只需要在遍历前添加一行代码:

# 按需求频率降序排序,优先处理高频需求
dmndId_w_freq_sorted = sorted(dmndId_w_freq, key=lambda x: -x[1])

之后遍历dmndId_w_freq_sorted即可实现高频需求优先匹配的逻辑。

内容的提问来源于stack exchange,提问作者Alhpa Delta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:48:34