供应链-库存管理之补货计算模型(二)

一.用AI造数据

在上篇excel推演模型的基础上,本篇尝试用AI造一批数据,用AI写python代码做数据清洗,来实现这个补货计算模型。

1.1 期初库存表

本来希望AI能直接给出excel表格的,尝试了deepseek,豆包,Kimi,结果都不能给出excel数据表。只能按照操作步骤转换。

不过AI直接给出了数据生成代码,复制出来运行一遍也挺方便。

python 复制代码
import pandas as pd
import random

data = {
    "样品编号": [f"A.S{str(i).zfill(4)}" for i in range(1, 1001)],
    "月初库存": [random.randint(1, 1000) for _ in range(1000)],
    "月份": ["M"] * 1000
}

df = pd.DataFrame(data)
df.to_excel("本月期初库存表.xlsx", index=False)
print("Excel文件已生成!")
1.2 需求预测表

这个也只能看看出的数据是不是自己想要的,最好要给出参考文件。

同样,也给出了生成数据的代码。

python 复制代码
import pandas as pd
import random

# 从"本月期初库存表"中随机抽取样品编号(假设有1000个编号)
sample_ids = [f"A.S{str(i).zfill(4)}" for i in range(1, 1001)]

# 生成400条数据
data = []
for month in ["M", "M+1", "M+2", "M+3"]:
    for _ in range(100):
        row = {
            "样品编号": random.choice(sample_ids),
            "月销售预测": random.randint(100, 300),
            "月份": month,
            "安全库存天数": 45,
            "月均天数": 30
        }
        data.append(row)

df = pd.DataFrame(data)
df.to_excel("需求预测表.xlsx", index=False)
print("生成完成!")

最后生成的数据质量,还不错。描述越清晰,数据越准!

二.用AI辅助写代码

试着起了个开头,让deepseek读excel里面的逻辑写代码,比较惊喜的是,它会读取excel里面的公式,根据公式的逻辑写部分代码。但总体上,代码需要修改,不能直接使用。

三.规整代码

修改完的代码如下。整体来看,这个过程用AI还是很省事的。关键是要把每个开始状态,想要的结果,想实现的功能跟AI说清楚。

ini 复制代码
import pandas as pd
import numpy as np

## 读取文件路径
#文件路径
path = 'C:/Users/Desktop/产销存补货模型PSI/'
path_jg = 'C:/Users/Desktop/产销存补货模型PSI/'

da_xuqiu = pd.read_excel(path+"数据源.xlsx", sheet_name="需求预测表")
da_kucun = pd.read_excel(path+"数据源.xlsx", sheet_name="本月期初库存表")

# 1.筛选M月数据并计算补货需求
def calculate_replenishment(demand, inventory):
    # 筛选M月数据
    m_demand = demand[demand['月份'] == 'M'].copy()
    
    # 合并库存数据
    m_data = pd.merge(m_demand, inventory, on='样品编号', how='left')
    
    # 计算关键指标
    m_data['日均需求数量'] = m_data['月销售预测'] / m_data['月均天数']
    m_data['M满足周转所需库存'] = m_data['月销售预测'] + m_data['安全库存天数'] * m_data['日均需求数量']
    m_data['M月末库存'] = np.maximum(m_data['月初库存'] - m_data['月销售预测'],0)
    m_data['M月底需补货量'] = np.maximum(m_data['M满足周转所需库存'] - m_data['M月末库存'], 0)
    
    return m_data

m_result = calculate_replenishment(da_xuqiu, da_kucun)
m_result = m_result[['样品编号', '月份_x' , 'M满足周转所需库存','月初库存', 'M月末库存', 'M月底需补货量']]
m_result = m_result.rename(columns={'月份_x': 'M月','月初库存':'M月初库存'})

# 2.筛选M+1月数据并计算补货需求,M+1月初库存,等于该样品编码上月的【M月末库存】+【M月底需补货量】
def calculate_replenishment_a(demand, shangyue,str_m,str_m1):#需求,上月数据,,str_m='M',str_m1='M+1'
    
    m1_demand = demand[demand['月份'] == str_m1].copy()
  #上月数据
  # 获取M月计算结果作为M+1月的期初库存
    m1_initial_inv = shangyue[['样品编号', str_m+'月末库存', str_m+'月底需补货量']].copy()
    m1_initial_inv[str_m1+'月初库存'] = m1_initial_inv[str_m+'月末库存'] + m1_initial_inv[str_m+'月底需补货量']
    
    # 合并库存数据
    m1_data = pd.merge(m1_demand, m1_initial_inv, on='样品编号', how='left')
    
    # 计算关键指标
    m1_data['日均需求数量'] = m1_data['月销售预测'] / m1_data['月均天数']
    m1_data[str_m1+'满足周转所需库存'] = m1_data['月销售预测'] + m1_data['安全库存天数'] * m1_data['日均需求数量']
    m1_data[str_m1+'月末库存'] = np.maximum(m1_data[str_m1+'月初库存'] - m1_data['月销售预测'],0)
    m1_data[str_m1+'月底需补货量'] = np.maximum(m1_data[str_m1+'满足周转所需库存'] - m1_data[str_m1+'月末库存'], 0)
    
    return m1_data

m1_result = calculate_replenishment_a(da_xuqiu, m_result,'M','M+1')
m1_result = m1_result[['样品编号','月份','M+1满足周转所需库存','M+1月初库存', 'M+1月末库存', 'M+1月底需补货量']]
m1_result = m1_result.rename(columns={'月份': 'M+1月'})


# 3.筛选M+2月数据并计算补货需求,M+2月初库存,等于该样品编码上月的【M+1月末库存】+【M+1月底需补货量】
m2_result = calculate_replenishment_a(da_xuqiu, m1_result,'M+1','M+2')
m2_result = m2_result[['样品编号','月份','M+2满足周转所需库存','M+2月初库存', 'M+2月末库存', 'M+2月底需补货量']]
m2_result = m2_result.rename(columns={'月份': 'M+2月'})


# 4.筛选M+3月数据并计算补货需求,M+32月初库存,等于该样品编码上月的【M+2月末库存】+【M+2月底需补货量】
m3_result = calculate_replenishment_a(da_xuqiu, m2_result,'M+2','M+3')
m3_result = m3_result[['样品编号','月份','M+3满足周转所需库存','M+3月初库存', 'M+3月末库存', 'M+3月底需补货量']]
m3_result = m3_result.rename(columns={'月份': 'M+3月'})


# 5.合并da_xuqiu,m_result,m1_result,m2_result,m3_result
m_result = m_result.rename(columns={'M月':'月份' , 'M满足周转所需库存':'满足周转所需库存','M月初库存':'月初库存', 'M月末库存':'月末库存','M月底需补货量':'月底需补货量'})
m1_result = m1_result.rename(columns={'M+1月':'月份','M+1满足周转所需库存':'满足周转所需库存','M+1月初库存':'月初库存', 'M+1月末库存':'月末库存', 'M+1月底需补货量':'月底需补货量'})
m2_result = m2_result.rename(columns={'M+2月':'月份','M+2满足周转所需库存':'满足周转所需库存','M+2月初库存':'月初库存', 'M+2月末库存':'月末库存', 'M+2月底需补货量':'月底需补货量'})
m3_result = m3_result.rename(columns={'M+3月':'月份','M+3满足周转所需库存':'满足周转所需库存','M+3月初库存':'月初库存', 'M+3月末库存':'月末库存', 'M+3月底需补货量':'月底需补货量'})
all_results = pd.concat([m_result, m1_result, m2_result, m3_result], axis=0)

final_result = pd.merge(da_xuqiu,all_results,on=['样品编号', '月份'],how='left')

四.最终结果

相关推荐
niuniu_6661 小时前
selenium应用测试场景
python·selenium·测试工具·单元测试·测试
满怀10152 小时前
Python扩展知识详解:lambda函数
开发语言·python
蓝博AI4 小时前
基于卷积神经网络的眼疾识别系统,resnet50,efficentnet(pytorch框架,python代码)
pytorch·python·cnn
牧歌悠悠5 小时前
【Python 算法】动态规划
python·算法·动态规划
Doris Liu.7 小时前
如何检测代码注入(Part 2)
windows·python·安全·网络安全·网络攻击模型
逢生博客7 小时前
阿里 FunASR 开源中文语音识别大模型应用示例(准确率比faster-whisper高)
人工智能·python·语音识别·funasr
噔噔噔噔@8 小时前
软件测试对于整个行业的重要性及必要性
python·单元测试·压力测试
赵谨言8 小时前
基于Python的Django框架的个人博客管理系统
经验分享·python·毕业设计
Guarding and trust8 小时前
python系统之综合案例:用python打造智能诗词生成助手
服务器·数据库·python
淮北4948 小时前
ros调试工具foxglove使用指南三:在3d空间写写画画(Panel->3D ->Scene entity)
python·学习·3d·机器人