2023年数学建模国赛C题
- 第一问代码
- code1_Q1_1.m
- Code1_Q1_2.m
- Code1_Q1_3.m
- 实验结果
- 技术文档
- 问题分析
- 假设
- 符号说明
- 1 第一问
- 1.1分布检验模型的建立
- 1.2 相关性模型的建立
- 1.3各种类蔬菜的销量分布及相关关系
- 写在最后
第一问代码
code1_Q1_1.m
clc
clear
D=xlsread('合成表1','合成表1、2');
kind_u=unique(D(:,6));
kind_num=size(kind_u,1);%记录蔬菜的种类数
table=zeros(365*4,6);
for k=1:size(kind_u,1) %遍历每一种菜
temp_day=D(1,3);
temp=1;
for i=1:size(D,1) %遍历每一行
if D(i,6)==kind_u(k,1) %如果是要找的那种菜
if D(i,3)~=temp_day %如果到第二天了
temp=temp+1;
temp_day=D(i,3);
end
table(temp,k)=table(temp,k)+D(i,7);
end
end
end
%% 箱线图
d1=table(table(:,1)~=0,1);
d2=table(table(:,2)~=0,2);
d3=table(table(:,3)~=0,3);
d4=table(table(:,4)~=0,4);
d5=table(table(:,5)~=0,5);
d6=table(table(:,6)~=0,6);
data=[d1;d2;d3;d4;d5;d6];
g1 = repmat({'花叶类'},size(d1,1),1);
g2 = repmat({'花菜类'},size(d2,1),1);
g3 = repmat({'水生根茎类'},size(d3,1),1);
g4 = repmat({'茄类'},size(d4,1),1);
g5 = repmat({'辣椒类'},size(d5,1),1);
g6 = repmat({'食用菌'},size(d6,1),1);
g = [g1; g2; g3; g4; g5; g6];
h=boxplot(data,g,'Colors','k','Symbol','o');
% hTitle = title('Miles per Gallon by Vehicle Origin');
hXLabel = xlabel('蔬菜分类');
hYLabel = ylabel('单日销量');
% 线宽
set(h,'LineWidth',1.5)
% 坐标轴美化
set(gca, 'Box', 'on', ... % 边框
'LineWidth', 1,... % 线宽
'XGrid', 'off', 'YGrid', 'off', ... % 网格
'TickDir', 'in', 'TickLength', [.015 .015], ... % 刻度
'XMinorTick', 'off', 'YMinorTick', 'off', ... % 小刻度
'XColor', [.1 .1 .1], 'YColor', [.1 .1 .1]) % 坐标轴颜色
% 字体和字号
set(gca, 'FontName', '宋体')
% set([hXLabel, hYLabel], 'FontName', 'Times New Roman')
set(gca, 'FontSize', 12)
set([hXLabel, hYLabel], 'FontSize', 15)
% set(hTitle, 'FontSize', 11, 'FontWeight' , 'bold')
% 背景颜色
set(gcf,'Color',[1 1 1])
%箱子颜色
color=[0/255,96/255,115/255;
9/255,147/255,150/255;
145/255,211/255,192/255;
235/255,215/255,165/255;
238/255,155/255,0/255;
204/255,102/255,2/255;
188/255,62/255,3/255;
174/255,32/255,18/255;
155/255,34/255,39/255];
h = findobj(gca,'Tag','Box');
for j=1:length(h)
patch(get(h(j),'XData'),get(h(j),'YData'),color(j,:),'FaceAlpha',.5);
end
% c = get(gca, 'Children'); %获取子对象(6个色块和点)
% %图注
% % hleg1 = legend(c(1:2:5,:), 'MSE','MAE','MAPE');
% % 绘制参照线
% Y=h(1,1).YData;
% X=h(1,1).XData;
% Y=unique(Y);
% X=unique(X);
% for i=1:size(Y,2)
% line([0,X(1)],[Y(i),Y(i)],'Color','red','LineStyle','--','LineWidth',0.8);
% hold on
% end
% c = get(gca, 'Children'); %获取子对象(6个色块和点)
% Ymax=unique(c(11,1).Children(33,1).YData);
% Xmax=min(c(11,1).Children(33,1).XData);
% Ymean=unique(c(11,1).Children(9,1).YData);
% Ymin=unique(c(11,1).Children(25,1).YData);
% line([0,X(1)],[Ymean,Ymean],'Color','red','LineStyle','--','LineWidth',0.8)
% hold on
% line([0,Xmax],[Ymax,Ymax],'Color','red','LineStyle','--','LineWidth',0.8)
% hold on
% line([0,Xmax],[Ymin,Ymin],'Color','red','LineStyle','--','LineWidth',0.8)
% hold on
Code1_Q1_2.m
clc
clear
D=xlsread('合成表1','合成表1、2');
kind_u=unique(D(:,6));
kind_num=size(kind_u,1);%记录蔬菜的种类数
table=zeros(12,6);
for k=1:size(kind_u,1) %遍历每一种菜
for m=1:12 %遍历每一个月
for i=1:size(D,1) %遍历每一行
if D(i,6)==kind_u(k,1) %如果是要找的那种菜
if D(i,2)==m
table(m,k)=table(m,k)+D(i,3);
end
end
end
end
end
d1=table(table(:,1)~=0,1);
d2=table(table(:,2)~=0,2);
d3=table(table(:,3)~=0,3);
d4=table(table(:,4)~=0,4);
d5=table(table(:,5)~=0,5);
d6=table(table(:,6)~=0,6);
data=[d1;d2;d3;d4;d5;d6];
g1 = repmat({'花叶类'},size(d1,1),1);
g2 = repmat({'花菜类'},size(d2,1),1);
g3 = repmat({'水生根茎类'},size(d3,1),1);
g4 = repmat({'茄类'},size(d4,1),1);
g5 = repmat({'辣椒类'},size(d5,1),1);
g6 = repmat({'食用菌'},size(d6,1),1);
g = [g1; g2; g3; g4; g5; g6];
plot()
% hTitle = title('Miles per Gallon by Vehicle Origin');
hXLabel = xlabel('月份');
hYLabel = ylabel('月销量');
set(gca, 'FontName', '宋体')
% set([hXLabel, hYLabel], 'FontName', 'Times New Roman')
set(gca, 'FontSize', 12)
set([hXLabel, hYLabel], 'FontSize', 15)
% set(hTitle, 'FontSize', 11, 'FontWeight' , 'bold')
% 背景颜色
set(gcf,'Color',[1 1 1])
%箱子颜色
color=[0/255,96/255,115/255;
9/255,147/255,150/255;
145/255,211/255,192/255;
235/255,215/255,165/255;
238/255,155/255,0/255;
204/255,102/255,2/255;
188/255,62/255,3/255;
174/255,32/255,18/255;
155/255,34/255,39/255];
Code1_Q1_3.m
clc
clear
D=xlsread('合成表1','合成表1、2');
kind_u=unique(D(:,6));
kind_num=size(kind_u,1);%记录蔬菜的种类数
table=zeros(12,6);
for k=1:size(kind_u,1) %遍历每一种菜
for m=1:12 %遍历每一个月
for i=1:size(D,1) %遍历每一行
if D(i,6)==kind_u(k,1) %如果是要找的那种菜
if D(i,2)==m %如果是要找的那个月
if D(i,9)==2
table(m,k)=table(m,k)+1;
end
end
end
end
end
end
d1=table(table(:,1)~=0,1);
d2=table(table(:,2)~=0,2);
d3=table(table(:,3)~=0,3);
d4=table(table(:,4)~=0,4);
d5=table(table(:,5)~=0,5);
d6=table(table(:,6)~=0,6);
data=[d1;d2;d3;d4;d5;d6];
g1 = repmat({'花叶类'},size(d1,1),1);
g2 = repmat({'花菜类'},size(d2,1),1);
g3 = repmat({'水生根茎类'},size(d3,1),1);
g4 = repmat({'茄类'},size(d4,1),1);
g5 = repmat({'辣椒类'},size(d5,1),1);
g6 = repmat({'食用菌'},size(d6,1),1);
g = [g1; g2; g3; g4; g5; g6];
plot()
% hTitle = title('Miles per Gallon by Vehicle Origin');
hXLabel = xlabel('月份');
hYLabel = ylabel('月销量');
set(gca, 'FontName', '宋体')
% set([hXLabel, hYLabel], 'FontName', 'Times New Roman')
set(gca, 'FontSize', 12)
set([hXLabel, hYLabel], 'FontSize', 15)
% set(hTitle, 'FontSize', 11, 'FontWeight' , 'bold')
% 背景颜色
set(gcf,'Color',[1 1 1])
%箱子颜色
color=[0/255,96/255,115/255;
9/255,147/255,150/255;
145/255,211/255,192/255;
235/255,215/255,165/255;
238/255,155/255,0/255;
204/255,102/255,2/255;
188/255,62/255,3/255;
174/255,32/255,18/255;
155/255,34/255,39/255];
实验结果
技术文档
问题分析
对于问题一,要求分析分析蔬菜各品类及单品销售量的分布规律及相互关系。该问题可以拆分成三个角度进行剖析。1)各种类蔬菜的销售量分布、蔬菜种类与销售量之间的关系;2)各种类蔬菜的销售量的月份分布、各种类蔬菜销售量与月份之间的相关关系;3)各种类蔬菜的销售时间分布、销售时间与退货量之间的相关关系。对于每一角度,先利用箱线图及折线图表述分布特诊,再进行分布检验,最后选取相应的相关性分析方法进行计算。
对于问题二,首先要分析各种类蔬菜的销售总量与成本加成定价之间的关系,实质上就是求销售总量与成本利润率之间的关系。对于该问题,建立集成拟合模型对每一蔬菜单品拟合多项式函数,以表征销量与成本利润率之间的关系。其次,需要给出各蔬菜品类未来一周的日补货总量和定价策略,在获取销量与成本利润率之间的关系模型后,通过成本利润率即可求出销量。因此,构建以最大化商超收益为目标,以各蔬菜单品的成本利润率为决策变量的线性规划模型(LP)。对于约束条件中的最大销量约束,基于ARIMA算法对蔬菜需求量进行预测,并取预测值作为最大销量约束。并基于遗传算法(GA)对LP模型进行求解。
对于问题三,实质上为在问题二的基础上增加对于销售空间及最小陈列量的限制。为此,在问题二的LP的基础上调整相应限制条件,限制销售空间及最小陈列量。在求解阶段设计0编码机制以适应销售空间限制,并设计不可行解的修复机制保持染色体的合法性。
对于问题四,需要对相关数据的采集进行设计。该问可以从“是否存在会员折扣”“各商品最佳保存时长”“退货原因”等角度入手进行分析。
假设
1、假设市场价格完全有供需关系决定,不受政策管控影响,物价的上限及下限不受限制。
2、假设不出现突发不可抗灾害导致的囤粮等情况的发生。
3、同种菜品的供货质量稳定不变。
4、近期损耗率不发生大幅波动。
5、菜品批发价格不发生大幅波动。
符号说明
1 第一问
1.1分布检验模型的建立
在进行相关性检验之前,需要先对数据的分布进行检验。Kolmogorov-Smirnov分布检验常被用于大规模样本的检测,而Shapiro–Wilk分布检验常被用于小规模样本的检测。
Kolmogorov-Smirnov分布检验模型可被描述如下:
原假设():数据服从正态分布;
备择假设():数据不服从正态分布。
1.2 相关性模型的建立
1.3各种类蔬菜的销量分布及相关关系
写在最后
下面是学姐自己整理的完整代码与运行结果,需要的同学欢迎咨询~