Python原材料库存优化器问题:无法充分利用库存生成足量成品
原料组合代码改进方案
问题根源
现有代码未覆盖1根60' + 22根70'这种刚好凑出1600英尺的有效组合,导致大量对应原料闲置,无法达成60个的产量目标。
具体改进步骤
1. 补充有效组合枚举
先明确所有能凑出1600英尺的原料搭配,把目标组合加入候选列表:
# 定义所有可行的原料组合(每个组合对应1个成品) valid_combinations = [ # 原有组合示例(根据你实际代码中的组合补充) {"40": 40}, # 40*40=1600 {"50": 32}, # 50*32=1600 # 新增关键组合 {"60": 1, "70": 22} ]
2. 优化原料分配逻辑
替换原有单一组合的生产逻辑,改为遍历所有可行组合,只要库存满足就生产,直到达到目标产量或无可用组合:
def produce_finished_goods(inventory, target): produced = 0 while produced < target: made = False # 遍历所有组合尝试生产 for combo in valid_combinations: # 检查当前库存是否满足组合需求 if all(inventory[size] >= qty for size, qty in combo.items()): # 扣减对应原料库存 for size, qty in combo.items(): inventory[size] -= qty produced += 1 made = True break # 生产一个后重新检查所有组合 if not made: break # 无可用组合,终止生产 return produced, inventory
3. 增加剩余库存校验
生产完成后输出剩余原料情况,方便确认是否还有可挖掘的组合:
# 示例调用 initial_inventory = {"60": 25, "70": 500, "40": 0, "50": 0} # 假设初始库存 final_count, remaining = produce_finished_goods(initial_inventory, 60) print(f"实际生产数量: {final_count}") print("剩余原料:") for size, qty in remaining.items(): if qty > 0: print(f"{size}' : {qty} 根")
进阶优化(可选)
如果需要最大化产量或最小化原料浪费,可以用整数规划工具(如pulp)求解最优组合:
from pulp import LpProblem, LpVariable, LpMaximize, lpSum # 定义问题:在库存限制下最大化产量(不超过目标60) prob = LpProblem("Optimize_Production", LpMaximize) # 变量:每个组合的生产次数(整数) combo_60_70 = LpVariable("Combo_60_70", lowBound=0, cat="Integer") # 其他组合变量,比如combo_40 = LpVariable("Combo_40", lowBound=0, cat="Integer") # 目标函数:总生产数量不超过60 prob += lpSum([combo_60_70]) <= 60 # 原料库存约束 prob += 1 * combo_60_70 <= initial_inventory["60"] prob += 22 * combo_60_70 <= initial_inventory["70"] # 其他原料约束补充 # 求解 prob.solve() print(f"最优可生产数量: {int(lpSum([combo_60_70]).value())}")
内容的提问来源于stack exchange,提问作者LT_AKR
相关产品推荐
相关产品推荐

