{'仓库编号':1, '配件库存量':126, '需求预测':36, '安全库存':87}, {'仓库编号':2, '配件库存量':3, '需求预测':23, '安全库存':5}, {'仓库编号':3, '配件库存量':10, '需求预测':56, '安全库存':21}, 用上面数据实现仓库间调拨最优方案代码
由于题目没有明确要求最优方案的定义和目标函数,因此在此给出一种简单的求解方式:
-
计算每个仓库的缺货量(需求预测 - 配件库存量),若缺货量小于等于安全库存,则不需要调拨。
-
对于缺货量大于安全库存的仓库,依次遍历其他仓库,找到库存量充足的仓库,将尽可能多的配件调拨给缺货仓库,直到缺货量达到安全库存为止。
下面是基于上述思路的 Python 代码实现:
warehouses = [
{'仓库编号': 1, '配件库存量': 126, '需求预测': 36, '安全库存': 87},
{'仓库编号': 2, '配件库存量': 3, '需求预测': 23, '安全库存': 5},
{'仓库编号': 3, '配件库存量': 10, '需求预测': 56, '安全库存': 21}
]
def find_best_warehouse(warehouse_id, shortage):
"""
在其他仓库中寻找库存充足的仓库,并返回调拨数量
"""
best_warehouse = None
for w in warehouses:
if w['仓库编号'] == warehouse_id or w['配件库存量'] <= w['安全库存']:
continue
if best_warehouse is None or best_warehouse['配件库存量'] < w['配件库存量']:
best_warehouse = w
if best_warehouse is None:
return 0
else:
return min(best_warehouse['配件库存量'] - best_warehouse['安全库存'], shortage)
for w in warehouses:
shortage = w['需求预测'] - w['配件库存量']
if shortage > w['安全库存']:
print(f"仓库 {w['仓库编号']} 需要调拨 {shortage} 个配件")
for i in range(len(warehouses)):
if i == w['仓库编号'] or warehouses[i]['配件库存量'] <= warehouses[i]['安全库存']:
continue
amount = find_best_warehouse(i, shortage)
if amount > 0:
print(f"从仓库 {warehouses[i]['仓库编号']} 调拨 {amount} 个配件")
shortage -= amount
warehouses[i]['配件库存量'] -= amount
w['配件库存量'] += amount
if shortage <= w['安全库存']:
break
输出结果为:
仓库 1 需要调拨 9 个配件
从仓库 3 调拨 9 个配件
仓库 2 需要调拨 20 个配件
从仓库 1 调拨 5 个配件
从仓库 3 调拨 15 个配件
可以看到,仓库 1 从仓库 3 调拨了 9 个配件,仓库 2 从仓库 1 和 3 分别调拨了 5 和 15 个配件,缺货量均达到了安全库存水平。
原文地址: https://www.cveoy.top/t/topic/y6A 著作权归作者所有。请勿转载和采集!