[2023 전국수학모델링대회] 문제C 코드 및 기술문서 공유

첫 번째 질문 코드

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번 문제에서는 다양한 채소 카테고리와 단일제품 판매의 유통형태와 상호관계를 분석할 필요가 있다. 이 문제는 세 가지 각도에서 분석될 수 있다. 1) 각종 야채 판매량 분포와 야채 종류와 판매량과의 관계 2) 월간 각종 야채 판매량 분포와 각종 야채 판매량과 월간 상관관계 3) 각종 야채의 판매시간 분포, 판매시간과 반품금액의 상관관계. 각 각도별로 박스 플롯과 선 그래프를 사용하여 특수 진단의 분포를 먼저 표현한 후 분포 테스트를 수행하고 최종적으로 해당 상관 분석 방법을 선택하여 계산합니다.

두 번째 문제는 먼저 각종 채소의 총 판매량과 원가 가산 가격의 관계를 분석해야 하는데, 본질적으로 총 판매량과 원가 이익률 간의 관계를 찾는 것입니다. 이 문제를 위해 판매량과 원가이익률 간의 관계를 특성화하기 위해 야채 품목별 다항식 함수를 피팅하는 통합 피팅 모델을 구축했습니다. 둘째, 다음 주 야채 카테고리별 일일 총 보충량과 가격 책정 전략을 제시할 필요가 있으며, 판매량과 원가이익률의 관계모델을 얻은 후 원가이익률을 통해 판매량을 계산할 수 있다. 따라서 슈퍼마켓 수익 극대화를 목표로 선형 계획법 모델(LP)을 구축하고 야채 품목별 원가 이익률을 의사결정 변수로 삼았다. 제약조건 중 최대판매제약에 대해서는 ARIMA 알고리즘을 기반으로 채소 수요를 예측하고, 그 예측값을 최대판매제약으로 삼는다. 그리고 유전 알고리즘(GA)을 기반으로 LP 모델을 해결합니다.

3번 질문의 경우, 2번 질문에 기초하여 본질적으로 판매공간 및 최소 진열수량에 대한 제한을 추가합니다. 이를 위해 질문 2의 LP를 기준으로 해당 제한을 조정하여 판매 공간과 최소 전시 수량을 제한합니다. 솔루션 단계에서는 판매 공간 제약에 적응하기 위해 0-인코딩 메커니즘을 설계하고, 염색체의 정당성을 유지하기 위해 해결 불가능한 복구 메커니즘을 설계합니다.

질문 4의 경우 관련 데이터 수집을 설계해야 합니다. 이 질문은 '회원할인 여부', '상품별 최적 보관기간', '반품 사유' 관점에서 분석할 수 있다.

가설

1. 시장가격은 전적으로 수요와 공급의 관계에 의해 결정되며, 정책통제의 영향을 받지 않는다고 가정하며, 가격의 상한과 하한에 제한이 없다.
2. 갑작스러운 불가항력적 재해로 인한 식량 사재기 등의 상황은 없는 것으로 가정됩니다.
3. 동일한 종류의 식기 공급 품질이 안정적으로 유지됩니다.
4. 가까운 시일 내에 손실률이 크게 변동하지 않습니다.
5. 식기 도매가격은 큰 변동이 없습니다.

기호 설명

여기에 이미지 설명을 삽입하세요.

1 첫 번째 질문

1.1 분포 테스트 모델 수립

상관관계 테스트를 수행하기 전에 먼저 데이터의 분포를 테스트해야 합니다. Kolmogorov-Smirnov 분포 테스트는 대규모 표본을 테스트하는 데 자주 사용되는 반면 Shapiro-Wilk 분포 테스트는 소규모 표본을 테스트하는 데 자주 사용됩니다.
Kolmogorov-Smirnov 분포 검정 모델은 다음과 같이 설명할 수 있습니다:
귀무 가설(): 데이터가 정규 분포를 따릅니다.
대립 가설(): 데이터가 정규 분포를 따르지 않습니다.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

1.2 상관모델 확립

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

1.3 각종 야채의 판매량 분포와 상관관계

여기에 이미지 설명을 삽입하세요.

마지막에 쓰세요

아래는 선배님이 직접 작성하신 전체 코드와 실행 결과입니다. 필요한 학생들의 상담은 환영합니다~

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

추천

출처blog.csdn.net/Magnolia_He/article/details/132780966