本博客下载链接包含修改的word版本, 可免费下载阅览学习, 也可作为数学建模相关课程作业修改上交:
链接:https://pan.baidu.com/s/1HxzDk3q0p6y2xpuJyxPgvw?pwd=qtnc
提取码:qtnc
在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差,大部分品种如当日未售出,隔日就无法再售。因此,商超通常会根据各商品的历史销售和需求情况每天进行补货。本文通过统计学分析,并建立不同的季节性预测模型、规划模型、组合评价等模型对蔬菜类商品的定价策略与补货决策的影响做出了深入的研究。
针对问题一,首先进行数据预处理,根据单品编码对附件中的数据进行合并,并对异常值进行剔除处理,接着针对蔬菜品类以及不同的单品类分别进行讨论,根据不同的时间维度对蔬菜六大品类使用描述性统计分析进行品类汇总分析、使用线性回归分析进行变化趋势分析、根据频率分布直方图对其分布频率进行分析、使用ARIMA季节性分解通过季节性因子的强弱对其周期性进行分析。同理,对单品类蔬菜进行描述性统计汇总分析、使用Spearman相关性检验对其相关性进行分析等。从而得出季节周期性较强的蔬菜品类以及对应的单品类蔬菜,以及其相关性、频率、变化趋势等统计性指标随不同月份、不同年份的变化规律情况。最后。针对蔬菜品类与其单品之间的相互关系,构建灰色关联分析模型,以月份为单位进行统计,根据其灰色关联系数的大小,从而来评价不同单品对蔬菜品类之间的关联性强弱,最终计算出六大类蔬菜中排名前五的灰色关联系数对应的单品类蔬菜。
针对问题二,首先我们分析销售量与成本加成定价之间的关系是由于考虑到需要对未来七天的组合定价策略进行分析,因此我们首先构建LSTM时间序列预测模型,对成本数据进行预测。接着考虑到数据呈现无序性,使用最小二乘法,对成本加成定价以及销量总量这个二者之间的关系进行一次函数,二次函数以及三次函数的拟合。最后构建基于遗传算法的商超最大收益组合定价策略模型,考虑其相关性的影响,我们在目标函数中引入惩罚函数对其进行约束,防止其正相关导致的定价无限大的情况,求解方面使用遗传算法进行求解,最终得出总利润为162260元,同时得出最终的定价策略,并且根据拟合的方程式求解出对应的补货量策略。
针对问题三,我们在问题二的基础上考虑各单品之间的组合定价策略,首先我们对数据进行初步的筛选,对其进行总销量加和后剔除了销量为0对应的样本数据,并且对销量和定价进行了拟合趋势分析,删除了二者呈正相关对应的单品类蔬菜。接着对清洗后的数据选择总销售量、平均损失率、打折销售次数、销售次数、平均定价五个指标,构建基于熵权Topsis的单品类蔬菜选择模型,使用熵权法计算出五个指标影响其供应商重要性的权重情况,同时根据其综合得分情况,选择了排名前31的单品类蔬菜。最后,对单品类蔬菜进行线性回归的预测,得出了未来一天的定价情况,在此基础上构建单品类蔬菜商超最大收益组合定价策略模型,使用遗传算法进行迭代求解,最终得出总利润为804.118元,并且给出了29个单品类蔬菜对应的定价策略以及补货量。
针对问题四,我们分析了其可增加数据存在一定的模糊性,因此我们使用层次分析法对新增数据进行表示,构建目标层,准则层和方案层,其中。准则层为:供应商稳定性、地理位置、旺季销量、顾客反馈情况和库存周转率,方案层为定价、成本和销量,最终在通过一致性检验之后得出成本、定价和销量的权重分别为0.2848、0.322、0.3927。同时根据熵权法计算出了三者的权重分别为0.2969、0.5396、0.1634,并且将两种方法进行得到的权重取平均值处理作为组合赋权,构建熵权-主成分组合评价模型,将组合权重引入到问题三的模型中,观察其在动态权重系数变化下模型利润的变化。同时也对问题三中模型的约束进行了讨论,对27~33个蔬菜单品类进行遍历求解,得出不同的单品蔬菜各树下的利润情况。
关键词:决策;成本加成定价;ARIMA季节性分解;灰色关联分析;遗传算法;熵权-主成分组合评价模型;
问题思路分析
对本文提出的四个问题,我们逐一做如下分析:
问题一的分析:问题一需要分别分析蔬菜各品销售量的分布规律,蔬菜单品销售量的分布规律、以及二者之间的相互关系。
第一步分析:对数据进行清洗,首先附件1-附件4中的检查处理缺失值、异常值和重复数据,接着根据单品编码,通过VLOOKUP函数对附件1、附件2、附件3和附件4的数据相互进行合并。
第二步分析:针对大类以及单品的分布规律,以月和季度为单位,对数据进行拟合分析,找出随时间的变化规律。
第三步分析:针对二者之间的相互关系,本文由B站up: 全糖奶茶屋提供构建一个灰色关联分析模型,以六大蔬菜的品类作为母序列,其余的单品列作为子序列来观察灰色关联系数,从而判断之间的一个关联性强弱。
问题二的分析:问题二需要对未来的七天内的定价策略进行一个优化,先汇总大类数据进行预测,然后进行规划模型的建立,最终给出各蔬菜品类未来一周的日补货总量和定价策略
第一步分析:使用LSTM对成本数据进行预测。
第二步分析:构建线性回归模型,对销量以及成本的关系进行挖掘,得出拟合关系式。
第三步分析:建立合理的规划模型,包含利润收益最大化的目标函数、决策变量、以及对应的约束条件,使用遗传算法对该规划模型去求解,最终得出的结论即为补货总量和定价。
问题三的分析:问题三在问题二的基础上,需要对每一个小品类进行单独的预测,小品类需要选控制在27~33个范围之内,之后得出7月1日单品补货量和定价策略
第一步分析:根据题目中所给的要求,根据时间、销量和相关性等因素对数据进行初步的筛选。
第二步分析:构建综合评价模型对影响单品蔬菜重要性的蔬菜进行评价,求解出排名前33对应的单品类蔬菜。
第三步分析:使用遗传算法对该规划模型去求解,最终得出的结论即为补货总量和定价。
问题四的分析:问题四我们增加周末销量情况以及节假日特殊需求两个指标与问题2和问题3所给出的定价策略进行比较,观察最后利润的变化多少,从而来判断我们捕获和定价策略的好坏。
第一步分析:使用层次分析法对未知的模糊数据进行评价得出方案,销量,成本,定价三者的主观权重。
第二步分析:使用熵权法求解出方案,定价成本三者的客观权重,并将其与主观权重进行组合赋权,取平均值处理。
第三步分析:将求解到的权重带入到问题三的模型中,与进行改进与未改进前的总利润进行对比,得出我们所修改后的方案的优良。
第一小问MATLAB代码:
load("alldata.mat")
for i=1:36
yuepinglei(:,i)=sum(pinglei(:,(i-1)*30+1:i*30),2);
end
for i=1:36
yuexiaoliang(:,i)=sum(xiaoliang(:,(i-1)*30+1:i*30),2);
end
plot(1:36,yuepinglei)
%shuju = [yuepinglei(1,:)',yuexiaoliang(1:100,:)'];对应123456品类
%shuju = [yuepinglei(3,:)',yuexiaoliang(106:124,:)'];
%shuju = [yuepinglei(4,:)',yuexiaoliang(125:134,:)'];
%shuju = [yuepinglei(5,:)',yuexiaoliang(135:179,:)'];
%shuju = [yuepinglei(6,:)',yuexiaoliang(180:251,:)'];
shuju = [yuepinglei(2,:)',yuexiaoliang(101:105,:)'];
r = size(shuju,1);%多少行
c = size(shuju,2);%多少列
%第一步,对变量进行预处理,消除量纲的影响
avg = repmat(mean(shuju),r,1);
%将A矩阵看作元素,复制组成m行n列,即将A复制m*n个
biaozhunhua = shuju./avg;
%定义母序列和子序列
Y = biaozhunhua(:,1); %母序列
X = biaozhunhua(:,2:c); %子序列
Y2 = repmat(Y,1,c-1); %把母序列向右复制到c-1列
absXi_Y = abs(X-Y2);
a = min(min(absXi_Y)); %全局最小值
b = max(max(absXi_Y));%全局最大值
ro = 0.5; %分辨系数取0.5
% roC = CalcRo(absXi_Y);
% gamma = (a+roC.*b)./(absXi_Y+roC.*b) %计算子序列中各个指标与母序列的关联系数
gamma = (a+ro*b)./(absXi_Y+ro*b) ;%计算子序列中各个指标与母序列的关联系数
disp("子序列中各个指标的灰色关联度分别为:");
ans = mean(gamma);
[ans1,ind]=sort(ans,'descend') %灰色关联度排序
%ans中每一列就是子序列相对于母序列的灰色关联系数(对每一列求平均值)
%gamma就是每一个指标(i,j)的灰色关联系数
%%绘制灰色关联分析的折线图(方法1)
figure(1)
t=[1:36];
color = ["b","r","g","b","r"];
for i=1:5
plot(t,gamma(:,i),color(i) + '*--')
hold on
end
xlabel('year')
legend('青梗散花 ','西兰花','枝江青梗散花','紫白菜(1)','紫白菜(2)') %这是第二大类的标签!!可以自己更换
title('灰色关联分析')
第二小问MATLAB代码(部分):
dpl=dpinglei(:,end-30:end);
xpl=xpinglei(:,end-30:end);
cpl=cpinglei(:,end-30:end);
for ic=1:6
% a_pl(ic,:)=polyfit(dpl(ic,:),xpl(ic,:),1);
m_pl(ic)=mean(dpl(ic,:));
sig(ic)=std(dpl(ic,:));
end
%scatter(dpl(1,:),xpl(1,:))
x0=repelem(m_pl,7);
st=repelem(sig,7);
options=optimoptions("fmincon","MaxFunctionEvaluations",10^6,"PlotFcn","optimplotfval");%可视化
[x,fval]=fmincon(@L,x0,[],[],[],[],x0-3*st,x0+3*st,[],options);
for ic=1:6
djmatrix(ic,:)=x((ic-1)*7+1:ic*7); % 未来定价数据
jinhuo(ic,:)=fxl(djmatrix(ic,:),ic); %未来进货数据
end
function val=L(dj) %目标函数,数据处理
djmatrix=zeros(6,7);
for ic=1:6
djmatrix(ic,:)=dj((ic-1)*7+1:ic*7);
end
val=Lm(djmatrix);
end
function val=Lm(djmatrix) %真目标函数
%未来成本,6*7,负责成本核算,这里给的只是实例数据
wlcb=[6.1476989 13.994251 10.606823 7.9008255 8.5110722 6.5969296
4.8580537 15.259626 11.206909 8.9890785 8.1689205 6.3184876
3.6843719 14.611933 10.727154 12.863586 7.4184489 6.5268817
6.3237219 17.182564 10.582369 17.310322 9.3497105 6.4716306
5.8653026 26.11763 10.391122 14.897045 7.2120557 6.369381
2.3762505 28.031452 10.183777 15.186477 7.1728835 6.053875
5.4142294 22.302324 9.9022379 13.700641 7.1882553 5.7958174]';
%品类均价和方差
m_pl=[6.58187045013486 10.8524752475248 13.3659028760019 8.54627062706271 9.28276652665266 7.73874194562313];
sig=[1.54076901353446 2.17375684286012 2.19241044473482 1.40474207099688 1.49191370529714 1.43181278500442];
plsunhao=[15.5100000000000 13.6500000000000 12.8300000000000 9.45000000000000 9.24000000000000 6.68000000000000];
val=0;
for ic=1:6
val=val+(djmatrix(ic,:)-wlcb(ic,:)/(1-plsunhao(ic)))*fxl(djmatrix(ic,:),ic)';
end
val=-val;
end
function xl=fxl(dj,ic)
%拟合数据,详细见polyval用法
a=[-1.09167340809390 160.974848315650
-0.847134396905971 29.1781438240271
-2.47885447362914 49.6093163802442
-0.178311472444653 26.8611757800613
-3.34036170219676 116.038841062170
6.98901829713750 7.99570218248404];
xl=polyval(a(ic,:),dj);
end
第三小问MATLAB代码(部分):
x0=m_dd;
st=s_dd;
A=-diag(a_dx(:,1));
b=-2.5+a_dx(:,2);
options=optimoptions("fmincon","MaxFunctionEvaluations",10^6,'PlotFcn','optimplotfval');
len=length(dic_q3);
[x,fval]=fmincon(@L,x0,A,b,[],[],zeros(1,len),[],[],options);
for i=1:len
y(i)=fxl(x(i),i);%补货量
end
function val=L(x)
load('indata.mat')
val=0;
for ic=1:length(dps)
val=val+(x(ic)-wc(ic)*(1+dps(ic)))*polyval(a_dx(ic,:),x(ic))';
end
val=-val;
end
function xl=fxl(x,ic)
load("indata.mat")
xl=polyval(a_dx(ic,:),x);
end
第四小问MATLAB代码(部分):
x0=m_dd;
st=s_dd;
A=-diag(a_dx(:,1));
b=-2.5+a_dx(:,2);
options=optimoptions("fmincon","MaxFunctionEvaluations",10^6,Display="iter");
len=length(dic_q3);
[x,fval]=fmincon(@L,x0,A,b,[],[],zeros(1,len),[],[],options);
for i=1:len
y(i)=fxl(x(i),i);%补货量
end
function val=L(x)
load('indata.mat')
val=0;
for ic=1:length(dps)
val=val+(0.2909*x(ic)-0.3225*wc(ic)*(1+dps(ic)))*0.3927*polyval(a_dx(ic,:),x(ic))';
end
val=-val;
end
function xl=fxl(x,ic)
load("indata.mat")
xl=polyval(a_dx(ic,:),x);
end