进销存系统智能采购推荐算法
背景概述
传统的采购管理依赖人工经验判断,容易出现库存积压或缺货的情况。智能采购推荐算法通过分析历史销售数据、市场趋势和库存状态,自动生成科学的采购建议,帮助企业优化库存结构,降低运营成本。
算法框架设计
智能采购推荐系统包含以下核心模块:
| 模块 | 功能 | 算法 |
|---|---|---|
| 需求预测 | 预测未来销售量 | ARIMA/LSTM |
| 安全库存计算 | 确定最优库存水平 | 概率模型 |
| 采购量计算 | 生成推荐采购数量 | EOQ模型 |
| 供应商推荐 | 选择最优供应商 | 多因素决策 |
需求预测模型
基于时间序列的销售预测是智能采购的核心:
// 需求预测服务
class DemandForecastService {
constructor() {
this.models = new Map();
}
// 使用移动平均预测
movingAverage(data, window = 7) {
if (data.length < window) return null;
const recent = data.slice(-window);
return recent.reduce((a, b) => a + b, 0) / window;
}
// 使用指数平滑预测
exponentialSmoothing(data, alpha = 0.3) {
let forecast = data[0];
for (let i = 1; i < data.length; i++) {
forecast = alpha * data[i] + (1 - alpha) * forecast;
}
return forecast;
}
// 考虑季节性的预测
seasonalForecast(historicalData, forecastPeriod, seasonLength = 30) {
// 计算季节性指数
const seasonalIndices = this.calculateSeasonalIndex(historicalData, seasonLength);
// 基础预测(使用线性趋势)
const trend = this.calculateTrend(historicalData);
// 生成预测结果
const forecasts = [];
for (let i = 0; i < forecastPeriod; i++) {
const baseValue = trend.base + trend.slope * (historicalData.length + i);
const seasonIndex = seasonalIndices[i % seasonLength];
forecasts.push(Math.round(baseValue * seasonIndex));
}
return forecasts;
}
// 综合预测(融合多种方法)
hybridForecast(productId, days = 30) {
const salesData = this.getSalesData(productId);
// 方法1:移动平均
const maResult = this.movingAverage(salesData, 7);
// 方法2:指数平滑
const esResult = this.exponentialSmoothing(salesData);
// 方法3:趋势预测
const trendResult = this.trendForecast(salesData, days);
// 加权融合
const weights = { ma: 0.3, es: 0.3, trend: 0.4 };
const finalResult = Math.round(
maResult * weights.ma +
esResult * weights.es +
trendResult * weights.trend
);
return Math.max(0, finalResult); // 确保非负
}
}
安全库存计算
安全库存是防止缺货的最后防线,计算公式如下:
// 安全库存计算服务
class SafetyStockService {
// 基于服务水平的安全库存计算
calculateSafetyStock(dailySales, leadTimeDays, serviceLevel = 0.95) {
// 计算日均销量和标准差
const avgDailySales = this.calculateMean(dailySales);
const stdDailySales = this.calculateStd(dailySales);
// 计算需求波动
const demandVariability = stdDailySales / avgDailySales;
// 计算供应波动(假设供应准时率)
const supplyVariability = 0.1; // 10%波动
// 计算Z值(服务水平对应的标准差倍数)
const z = this.getZScore(serviceLevel);
// 安全库存公式:Z * sqrt(需求方差*供应时间^2 + 供应方差*平均需求^2)
const safetyStock = z * Math.sqrt(
Math.pow(stdDailySales, 2) * leadTimeDays +
Math.pow(supplyVariability * avgDailySales, 2) * Math.pow(leadTimeDays, 2)
);
return Math.ceil(safetyStock);
}
// 动态安全库存(根据库存策略调整)
calculateDynamicSafetyStock(product, currentStock, daysOfCover = 7) {
const avgDailySales = product.avgDailySales;
const leadTime = product.supplierLeadTime;
// 基础安全库存
const baseSafetyStock = this.calculateSafetyStock(
product.historicalSales,
leadTime
);
// 根据库存策略调整
let adjustedStock = baseSafetyStock;
// 如果当前库存低于安全库存,增加安全库存
if (currentStock < baseSafetyStock) {
adjustedStock = baseSafetyStock * 1.5;
}
// 考虑季节性因素
if (this.isPeakSeason()) {
adjustedStock *= 1.3;
}
return Math.ceil(adjustedStock);
}
getZScore(serviceLevel) {
const zScores = {
0.90: 1.28,
0.95: 1.65,
0.99: 2.33
};
return zScores[serviceLevel] || 1.65;
}
}
智能采购推荐
综合各因素生成最终采购建议:
// 智能采购推荐服务
class PurchaseRecommendationService {
constructor() {
this.forecastService = new DemandForecastService();
this.safetyStockService = new SafetyStockService();
}
// 生成采购建议
generateRecommendation(productId) {
const product = this.getProduct(productId);
const currentStock = product.currentStock;
const onOrderQty = product.onOrderQuantity;
// 1. 需求预测
const forecastedDemand = this.forecastService.hybridForecast(productId, 30);
// 2. 计算安全库存
const safetyStock = this.safetyStockService.calculateDynamicSafetyStock(
product,
currentStock
);
// 3. 计算采购量
const availableStock = currentStock + onOrderQty;
const reorderPoint = safetyStock + forecastedDemand * product.leadTimeDays / 30;
// 判断是否需要采购
let recommendedQty = 0;
let priority = 'normal';
if (availableStock <= safetyStock) {
// 库存低于安全库存,紧急采购
priority = 'urgent';
recommendedQty = Math.max(
safetyStock - availableStock + forecastedDemand,
product.economicOrderQty
);
} else if (availableStock <= reorderPoint) {
// 库存达到再订货点,正常采购
priority = 'normal';
recommendedQty = product.economicOrderQty;
}
// 4. 供应商推荐
const supplierRecommendation = this.recommendSupplier(productId, recommendedQty);
return {
productId,
currentStock,
onOrderQty,
availableStock,
safetyStock,
forecastedDemand,
reorderPoint,
priority,
recommendedQty,
supplier: supplierRecommendation,
expectedStockAfterOrder: availableStock + recommendedQty,
daysOfStock: (availableStock + recommendedQty) / product.avgDailySales
};
}
// EOQ经济订货量计算
calculateEOQ(annualDemand, orderingCost, holdingCost) {
return Math.ceil(Math.sqrt(2 * annualDemand * orderingCost / holdingCost));
}
// 供应商推荐
recommendSupplier(productId, qty) {
const suppliers = this.getSuppliers(productId);
// 多因素评分
const scored = suppliers.map(s => ({
...s,
score:
s.priceScore * 0.4 +
s.qualityScore * 0.3 +
s.deliveryScore * 0.2 +
s.serviceScore * 0.1
}));
// 按评分排序
scored.sort((a, b) => b.score - a.score);
return scored[0];
}
}
实施效果
某商贸企业智能采购系统实施效果:
- 库存周转率:从年周转4次提升至年周转8次
- 缺货率:从8%降至2%
- 库存积压:减少库存资金占用35%
- 采购效率:采购决策时间从2天缩短至10分钟
总结
智能采购推荐算法通过数据分析和智能算法,帮助企业实现科学采购决策。在实际应用中,需要结合企业实际情况调整算法参数,并持续优化模型以适应市场变化。