2022五一数学建模思路实时更新-ABC思路已更新(A程序)-5月3日0时

【关注我,思路实时更新,详细思路持续更新。去年原创思路,被很多机构贩卖,都是免费的,程序也是免费的,以前是您好啊数模君/数模孵化园,现在改名啦,认准:小叶的趣味数模,原创发布,别被坑了】

目录

A题【完整程序】

B题

C题


A题【完整程序】

规划问题-优化算法求解

血管机器人这几个条件需要注意:

血管机器人在患者血管中工作时间是一周,一周后必须取出

血管机器人取出后操作手拆卸下来需要进行一周的保养才能再次开展工作

操作手如没有安排工作,则一直需要保养

④新购买的容器艇需要经过一周的检查调试后才可以投入使用

⑤容器艇使用后并不必须要保养,可以连续使用

⑥容器艇如果未使用过需要保养

⑦一个容器艇配四个熟练操作手

⑧操作手学习时不需要容器艇参与

该医院从第1周开始开展血管机器人治疗业务,并假定开始前已经有了13个容器艇和50个熟练操作手,可直接使用

这道题一定要读懂题目,别盲目下笔,附件2有说每周使用的数量

第一问,目前医院有可以直接使用的13个容器艇和50个熟练操作手,第一周就会用到11个容器艇和44个操作手,那么留下来能训练新操作手的就只有6个,那么最多能训练60个,再看第二周患者5人,需要容器艇5个和20个操作手,原本有六个,与此同时还要考虑第三周的需求(因为第二周需要空余操作手来训练第三周需要用到的操作手),第三周会用到4个机器人,第二周购买后怎么也可以满足第三周需求,那么为了满足第二周第三周的需求,第一周就至少需要购买14个且至多购买60个操作手,这道题就是特别要注意每周需要购买的容器艇和操作手数量范围需要根据附件2需求进行推算,没有需求就是0,第一问8周就需要确定8*2个变量(分别是容器艇数量和操作手数量)范围,有了自变量范围,接下来就是以成本最下话寻优。

【第一问完整程序,最后结果在bestf和besty矩阵中,详细细节在程序中有注释,这里就不多说】 

【模拟退火算法参数我设置的比较小,很快就出来了,主要为了演示,后面自己更改】

【补充一下为什么要考虑9.10周的需求量,这是为了计算第7.8周的购买量,如果不想考虑第9.10周的需求量,自己修改程序】

【另外,自己检查下自己的程序是否合理,已经听到了几个版本,机械手组装后治疗一周,保养一周,也就是说用了一次治疗后两个后才能再次使用】

clear
clc
%由于后面周的采集量受到下一周需求量和当期存量的影响,不知道后面周的参数范围
%因此不能当作寻常的优化问题来看,因此只能做仿真模拟实验
%这样也能很大程度提高寻优效率,最后的结果只能是尽可能最优,很难达到真正的最优
T=100; %初始化温度值
T_min=1; %设置温度下界
alpha=0.95; %温度的下降率
num=1000; %颗粒总数
XQ=[11,5,4,7,16,6,5,7,13,6];%各周需求
p=4;%容器艇配备的机械手数
L=10;%一个指导机械手可训练新操作手的数目
Y=zeros(9,length(XQ));%记录过程数据
Y(:,1)=[0
    13
    50
    0
    0
    0
    0
    0
    0];%第一周使用的机器人\剩余容器艇\剩余操作手\保养容器艇\保养操作手\指导操作手\训练操作手\购买容器艇数\购买操作手数
G=[200
    100
    5
    10
    10];%容器艇\操作手\操作手保养\容器艇保养\操作手训练成本
X1=[];
F1=[];
for i=1:num
    [X1{i,1},F1(i,1)]=fun_A1(XQ,p,L,Y,G);
end
[bestf,b]=min(F1);
besty=X1{b,1};
trace=[];
trace=bestf;
while(T>T_min)
    XX1=[];
    FF1=[];
    for i=1:num
        [XX1{i,1},FF1(i,1)]=fun_A1(XQ,p,L,Y,G);
    end
    %是否更新最优
    for j=1:num
    delta=FF1(j,1)-F1(j,1);
    if delta<0
        F1(j,1)=FF1(j,1);
        X{j,:}=XX1{j,:};
    else
        pp=exp(-delta/T);
        if pp>rand
            F1(j,1)=FF1(j,1);
            X1{j,:}=XX1{j,:};
        end
    end
    end
    if min(F1)<bestf
        [bestf,b]=min(F1);
        besty=X1{b,1};
    end
    trace=[trace;bestf];
    T=T*alpha;
end
figure
plot(trace)
xlabel('退火次数')
ylabel('总成本')
function [X1,F1]=fun_A1(XQ,p,L,Y,G)
%YY矩阵每行:第一周使用的机器人\剩余容器艇\剩余操作手\保养容器艇\保养操作手\指导操作手\训练操作手\购买容器艇数\购买操作手数
    flag=0;
    while flag==0
    YY=Y;
    for j=1:length(YY)-2
        xq=XQ(j);%本周周机器人需求量
        YY(1,j)=xq;
        YY(2,j)=YY(2,j)-xq;
        YY(3,j)=YY(3,j)-xq*p;
        %未用的操作手需要做保养
        YY(5,j)=YY(3,j);
        %血管机器人在患者血管中工作时间是一周,取出后操作手拆卸下来需要进行一周的保养才能再次开展工作
        %使用结束后容器艇并不必须要保养,下一周可用容器艇数
        YY(2,j+1)=YY(1,j)+YY(2,j);
        YY(2,j+2)=YY(1,j)+YY(2,j);
        %使用结束后操作手需要保养,保养时间一周
        YY(5,j+1)=YY(5,j+1)+YY(1,j)*p;
        %在下下周可使用
        YY(3,j+2)=YY(3,j+2)+YY(1,j)*p;
        xq1=XQ(j+1);%下一周机器人需求量
        xq2=XQ(j+2);%下下一周机器人需求量
        %如果
        k1=max(xq1-YY(2,j+1),xq2-YY(2,j+2));
        if k1<0
            k1=0;
        end
        %剩余未用来训练的机械手+用于指导的机械手+培养的机械手应当满足下一周需求,同理也应满足第三周需求量
        k2=xq1*p-YY(5,j);
        if k2<0
            k2=0;
        end
        %下下周是否需要更多的机械手
        kk2=xq2*p-YY(3,j+2);
        if kk2<0
            kk2=0;
        else
            kk2=ceil(kk2/L);
        end
        %确定当周至少要购买的机械手数
        k2=k2+kk2;
        %最大采购则是上一周剩余的机械手数*L
        k3=min(k2+10,YY(5,j)*L);%但是也不能过高
        if k3<k2
            k3=k2;
        end
        %也不能就k2,因为可能后面会有突发的需求,采购当期最大训练数也满足不了
        %购买容器艇数
        gm1=k1;
        %购买机械手数
        gm2=randi([fix(k2),fix(k3)]);
        %训练和保养
        YY(4,j)=YY(4,j)+gm1;
        YY(2,j+1)=YY(2,j+1)+gm1;
        YY(5,j)=YY(5,j)-ceil(gm2/L);
        YY(6,j)=YY(6,j)+ceil(gm2/L);
        YY(7,j)=YY(7,j)+gm2;
        %下一周剩余操作手
        YY(3,j+1)=YY(3,j+1)+YY(7,j)+YY(8,j);
        %记录购买数量
        YY(8,j)=gm1;
        YY(9,j)=gm2;
    end
    if length(find(YY<0))==0
        flag=1;
    end 
    end
    X1=YY;%储存过程数据
    %计算成本
    F1=sum(sum(YY([8,9,5,4,7],1:8).*G));

每列为每周,每行依次为:每周使用的机器人\剩余容器艇\剩余操作手\保养容器艇\保养操作手\指导操作手\训练操作手\购买容器艇数\购买操作手数

【后续问题程序稍后发布,其实后面问都很简单,就是在第一问基础上修改】

第二问考虑损毁,那么在第一问基础上,还是同样的,损毁就会增加需求和成本,首先还是简确定每周容器艇和操作手的购买数量范围,然后进行寻优

【程序运行比较久,自己运行】

clear
clc
%由于后面周的采集量受到下一周需求量和当期存量的影响,不知道后面周的参数范围
%因此不能当作寻常的优化问题来看,因此只能做仿真模拟实验
%这样也能很大程度提高寻优效率,最后的结果只能是尽可能最优,很难达到真正的最优
T=100; %初始化温度值
T_min=1; %设置温度下界
alpha=0.95; %温度的下降率
num=100; %颗粒总数
XQ=[11	5	4	7	16	6	5	7,...
13	6	5	7	12	5	4	6,...
9	5	5	11	29	21	17	20,...
27	13	9	10	16	6	5	7,...
11	5	5	6	12	7	7	10,...
15	10	9	11	15	10	10	16,...
26	21	23	36	50	45	45	49,...
57	43	40	44	52	43	42	45,...
52	41	39	41	48	35	34	35,...
42	34	36	43	55	48	54	65,...
80	70	74	85	101	89	88	90,...
100	87	88	89	104	89	89	90,...
106	96	94	99	109	99	96	102 100 100,...
];%各周需求
p=4;%容器艇配备的机械手数
L=10;%一个指导机械手可训练新操作手的数目
Y=zeros(9,length(XQ));%记录过程数据
Y(:,1)=[0
    13
    50
    0
    0
    0
    0
    0
    0];%第一周使用的机器人\剩余容器艇\剩余操作手\保养容器艇\保养操作手\指导操作手\训练操作手\购买容器艇数\购买操作手数
G=[200
    100
    5
    10
    10];%容器艇\操作手\操作手保养\容器艇保养\操作手训练成本
X1=[];
F1=[];
for i=1:num
    [X1{i,1},F1(i,1)]=fun_A2(XQ,p,L,Y,G);
end
[bestf,b]=min(F1);
besty=X1{b,1};
trace=[];
trace=bestf;
while(T>T_min)
    XX1=[];
    FF1=[];
    for i=1:num
        [XX1{i,1},FF1(i,1)]=fun_A2(XQ,p,L,Y,G);
    end
    %是否更新最优
    for j=1:num
    delta=FF1(j,1)-F1(j,1);
    if delta<0
        F1(j,1)=FF1(j,1);
        X{j,:}=XX1{j,:};
    else
        pp=exp(-delta/T);
        if pp>rand
            F1(j,1)=FF1(j,1);
            X1{j,:}=XX1{j,:};
        end
    end
    end
    if min(F1)<bestf
        [bestf,b]=min(F1);
        besty=X1{b,1};
    end
    trace=[trace;bestf];
    T=T*alpha;
end
figure
plot(trace)
xlabel('退火次数')
ylabel('总成本')
function [X1,F1]=fun_A2(XQ,p,L,Y,G)
%YY矩阵每行:第一周使用的机器人\剩余容器艇\剩余操作手\保养容器艇\保养操作手\指导操作手\训练操作手\购买容器艇数\购买操作手数
    flag=0;
    while flag==0
    YY=Y;
    for j=1:length(YY)-2
        xq=XQ(j);%本周周机器人需求量
        YY(1,j)=xq;
        YY(2,j)=YY(2,j)-xq;
        YY(3,j)=YY(3,j)-xq*p;
        %未用的操作手需要做保养
        YY(5,j)=YY(3,j);
        %血管机器人在患者血管中工作时间是一周,取出后操作手拆卸下来需要进行一周的保养才能再次开展工作
        %20%机器人损毁,就是容器艇减少20%,对应从保养机械手中减少相应数量
        c=round(YY(1,j).*0.2,0);
        YY(1,j)=YY(1,j)-c;
        %使用结束后,有20%损耗,容器艇并不必须要保养,下一周可用容器艇数
        %20%机器人损毁,就是容器艇减少20%,对应从保养机械手中减少相应数量
        YY(2,j+1)=YY(1,j)+YY(2,j);
        YY(2,j+2)=YY(1,j)+YY(2,j);
        %使用结束后操作手需要保养,保养时间一周
        YY(5,j+1)=YY(5,j+1)+YY(1,j)*p;
        %在下下周可使用
        YY(3,j+2)=YY(3,j+2)+YY(1,j)*p;
        xq1=XQ(j+1);%下一周机器人需求量
        xq2=XQ(j+2);%下下一周机器人需求量
        %如果容器艇满足需求则不购买
        k1=max(xq1-YY(2,j+1),xq2-YY(2,j+2));
        if k1<0
            k1=0;
        end
        %剩余未用来训练的机械手+用于指导的机械手+培养的机械手应当满足下一周需求,同理也应满足第三周需求量
        k2=xq1*p-YY(5,j);
        if k2<0
            k2=0;
        end
        %下下周是否需要更多的机械手
        kk2=xq2*p-YY(3,j+2);
        if kk2<0
            kk2=0;
        else
            kk2=ceil(kk2/L);
        end
        %确定当周至少要购买的机械手数
        k2=k2+kk2;
        %最大采购则是上一周剩余的机械手数*L
        k3=min(k2+200,YY(5,j)*L);%但是也不能过高
        if k3<k2
            k3=k2;
        end
        %也不能就k2,因为可能后面会有突发的需求,采购当期最大训练数也满足不了
        %购买容器艇数
        gm1=k1;
        %购买机械手数
        gm2=randi([fix(k2),fix(k3)]);
        %训练和保养
        YY(4,j)=YY(4,j)+gm1;
        YY(2,j+1)=YY(2,j+1)+gm1;
        YY(5,j)=YY(5,j)-ceil(gm2/L);
        YY(6,j)=YY(6,j)+ceil(gm2/L);
        YY(7,j)=YY(7,j)+gm2;
        %下一周剩余操作手
        YY(3,j+1)=YY(3,j+1)+YY(6,j)+YY(7,j);
        %记录购买数量
        YY(8,j)=gm1;
        YY(9,j)=gm2;
    end
    if length(find(YY<0))==0
        flag=1;
    end 
    end
    X1=YY;%储存过程数据
    %计算成本
    F1=sum(sum(YY([8,9,5,4,7],1:104).*G));

第三问,指导数量增加,但每周有10%的机器人损毁,同样的在第一问基础上加条件,然后寻优

clear
clc
%由于后面周的采集量受到下一周需求量和当期存量的影响,不知道后面周的参数范围
%因此不能当作寻常的优化问题来看,因此只能做仿真模拟实验
%这样也能很大程度提高寻优效率,最后的结果只能是尽可能最优,很难达到真正的最优
T=100; %初始化温度值
T_min=1; %设置温度下界
alpha=0.95; %温度的下降率
num=100; %颗粒总数
XQ=[11	5	4	7	16	6	5	7,...
13	6	5	7	12	5	4	6,...
9	5	5	11	29	21	17	20,...
27	13	9	10	16	6	5	7,...
11	5	5	6	12	7	7	10,...
15	10	9	11	15	10	10	16,...
26	21	23	36	50	45	45	49,...
57	43	40	44	52	43	42	45,...
52	41	39	41	48	35	34	35,...
42	34	36	43	55	48	54	65,...
80	70	74	85	101	89	88	90,...
100	87	88	89	104	89	89	90,...
106	96	94	99	109	99	96	102 100 100,...
];%各周需求
p=4;%容器艇配备的机械手数
L=20;%一个指导机械手可训练新操作手的数目
Y=zeros(9,length(XQ));%记录过程数据
Y(:,1)=[0
    13
    50
    0
    0
    0
    0
    0
    0];%第一周使用的机器人\剩余容器艇\剩余操作手\保养容器艇\保养操作手\指导操作手\训练操作手\购买容器艇数\购买操作手数
G=[200
    100
    5
    10
    10];%容器艇\操作手\操作手保养\容器艇保养\操作手训练成本
X1=[];
F1=[];
for i=1:num
    [X1{i,1},F1(i,1)]=fun_A3(XQ,p,L,Y,G);
end
[bestf,b]=min(F1);
besty=X1{b,1};
trace=[];
trace=bestf;
while(T>T_min)
    XX1=[];
    FF1=[];
    for i=1:num
        [XX1{i,1},FF1(i,1)]=fun_A3(XQ,p,L,Y,G);
    end
    %是否更新最优
    for j=1:num
    delta=FF1(j,1)-F1(j,1);
    if delta<0
        F1(j,1)=FF1(j,1);
        X{j,:}=XX1{j,:};
    else
        pp=exp(-delta/T);
        if pp>rand
            F1(j,1)=FF1(j,1);
            X1{j,:}=XX1{j,:};
        end
    end
    end
    if min(F1)<bestf
        [bestf,b]=min(F1);
        besty=X1{b,1};
    end
    trace=[trace;bestf];
    T=T*alpha;
end
figure
plot(trace)
xlabel('退火次数')
ylabel('总成本')
function [X1,F1]=fun_A3(XQ,p,L,Y,G)
%YY矩阵每行:第一周使用的机器人\剩余容器艇\剩余操作手\保养容器艇\保养操作手\指导操作手\训练操作手\购买容器艇数\购买操作手数
    flag=0;
    while flag==0
    YY=Y;
    for j=1:length(YY)-2
        xq=XQ(j);%本周周机器人需求量
        YY(1,j)=xq;
        YY(2,j)=YY(2,j)-xq;
        YY(3,j)=YY(3,j)-xq*p;
        %未用的操作手需要做保养
        YY(5,j)=YY(3,j);
        %血管机器人在患者血管中工作时间是一周,取出后操作手拆卸下来需要进行一周的保养才能再次开展工作
        %20%机器人损毁,就是容器艇减少20%,对应从保养机械手中减少相应数量
        c=round(YY(1,j).*0.1,0);
        YY(1,j)=YY(1,j)-c;
        %使用结束后,有20%损耗,容器艇并不必须要保养,下一周可用容器艇数
        %20%机器人损毁,就是容器艇减少20%,对应从保养机械手中减少相应数量
        YY(2,j+1)=YY(1,j)+YY(2,j);
        YY(2,j+2)=YY(1,j)+YY(2,j);
        %使用结束后操作手需要保养,保养时间一周
        YY(5,j+1)=YY(5,j+1)+YY(1,j)*p;
        %在下下周可使用
        YY(3,j+2)=YY(3,j+2)+YY(1,j)*p;
        xq1=XQ(j+1);%下一周机器人需求量
        xq2=XQ(j+2);%下下一周机器人需求量
        %如果容器艇满足需求则不购买
        k1=max(xq1-YY(2,j+1),xq2-YY(2,j+2));
        if k1<0
            k1=0;
        end
        %剩余未用来训练的机械手+用于指导的机械手+培养的机械手应当满足下一周需求,同理也应满足第三周需求量
        k2=xq1*p-YY(5,j);
        if k2<0
            k2=0;
        end
        %下下周是否需要更多的机械手
        kk2=xq2*p-YY(3,j+2);
        if kk2<0
            kk2=0;
        else
            kk2=ceil(kk2/L);
        end
        %确定当周至少要购买的机械手数
        k2=k2+kk2;
        %最大采购则是上一周剩余的机械手数*L
        k3=min(k2+100,YY(5,j)*L);%但是也不能过高
        if k3<k2
            k3=k2;
        end
        %也不能就k2,因为可能后面会有突发的需求,采购当期最大训练数也满足不了
        %购买容器艇数
        gm1=k1;
        %购买机械手数
        gm2=randi([fix(k2),fix(k3)]);
        %训练和保养
        YY(4,j)=YY(4,j)+gm1;
        YY(2,j+1)=YY(2,j+1)+gm1;
        YY(5,j)=YY(5,j)-ceil(gm2/L);
        YY(6,j)=YY(6,j)+ceil(gm2/L);
        YY(7,j)=YY(7,j)+gm2;
        %下一周剩余操作手
        YY(3,j+1)=YY(3,j+1)+YY(6,j)+YY(7,j);
        %记录购买数量
        YY(8,j)=gm1;
        YY(9,j)=gm2;
    end
    if length(find(YY<0))==0
        flag=1;
    end 
    end
    X1=YY;%储存过程数据
    %计算成本
    F1=sum(sum(YY([8,9,5,4,7],1:104).*G));

第四问主要涉及到成本问题,在第3问基础上增加计算成本条件,进行寻优

clear
clc
%由于后面周的采集量受到下一周需求量和当期存量的影响,不知道后面周的参数范围
%因此不能当作寻常的优化问题来看,因此只能做仿真模拟实验
%这样也能很大程度提高寻优效率,最后的结果只能是尽可能最优,很难达到真正的最优
T=100; %初始化温度值
T_min=1; %设置温度下界
alpha=0.95; %温度的下降率
num=100; %颗粒总数
XQ=[11	5	4	7	16	6	5	7,...
13	6	5	7	12	5	4	6,...
9	5	5	11	29	21	17	20,...
27	13	9	10	16	6	5	7,...
11	5	5	6	12	7	7	10,...
15	10	9	11	15	10	10	16,...
26	21	23	36	50	45	45	49,...
57	43	40	44	52	43	42	45,...
52	41	39	41	48	35	34	35,...
42	34	36	43	55	48	54	65,...
80	70	74	85	101	89	88	90,...
100	87	88	89	104	89	89	90,...
106	96	94	99	109	99	96	102 100 100,...
];%各周需求
p=4;%容器艇配备的机械手数
L=20;%一个指导机械手可训练新操作手的数目
Y=zeros(9,length(XQ));%记录过程数据
Y(:,1)=[0
    13
    50
    0
    0
    0
    0
    0
    0];%第一周使用的机器人\剩余容器艇\剩余操作手\保养容器艇\保养操作手\指导操作手\训练操作手\购买容器艇数\购买操作手数
G=[200
    100
    5
    10
    10];%容器艇\操作手\操作手保养\容器艇保养\操作手训练成本
X1=[];
F1=[];
for i=1:num
    [X1{i,1},F1(i,1)]=fun_A4(XQ,p,L,Y,G);
end
[bestf,b]=min(F1);
besty=X1{b,1};
trace=[];
trace=bestf;
while(T>T_min)
    XX1=[];
    FF1=[];
    for i=1:num
        [XX1{i,1},FF1(i,1)]=fun_A4(XQ,p,L,Y,G);
    end
    %是否更新最优
    for j=1:num
    delta=FF1(j,1)-F1(j,1);
    if delta<0
        F1(j,1)=FF1(j,1);
        X{j,:}=XX1{j,:};
    else
        pp=exp(-delta/T);
        if pp>rand
            F1(j,1)=FF1(j,1);
            X1{j,:}=XX1{j,:};
        end
    end
    end
    if min(F1)<bestf
        [bestf,b]=min(F1);
        besty=X1{b,1};
    end
    trace=[trace;bestf];
    T=T*alpha;
end
figure
plot(trace)
xlabel('退火次数')
ylabel('总成本')
function [X1,F1]=fun_A4(XQ,p,L,Y,G)
%YY矩阵每行:第一周使用的机器人\剩余容器艇\剩余操作手\保养容器艇\保养操作手\指导操作手\训练操作手\购买容器艇数\购买操作手数
    flag=0;
    while flag==0
    YY=Y;
    for j=1:length(YY)-2
        xq=XQ(j);%本周周机器人需求量
        YY(1,j)=xq;
        YY(2,j)=YY(2,j)-xq;
        YY(3,j)=YY(3,j)-xq*p;
        %未用的操作手需要做保养
        YY(5,j)=YY(3,j);
        %血管机器人在患者血管中工作时间是一周,取出后操作手拆卸下来需要进行一周的保养才能再次开展工作
        %20%机器人损毁,就是容器艇减少20%,对应从保养机械手中减少相应数量
        c=round(YY(1,j).*0.1,0);
        YY(1,j)=YY(1,j)-c;
        %使用结束后,有20%损耗,容器艇并不必须要保养,下一周可用容器艇数
        %20%机器人损毁,就是容器艇减少20%,对应从保养机械手中减少相应数量
        YY(2,j+1)=YY(1,j)+YY(2,j);
        YY(2,j+2)=YY(1,j)+YY(2,j);
        %使用结束后操作手需要保养,保养时间一周
        YY(5,j+1)=YY(5,j+1)+YY(1,j)*p;
        %在下下周可使用
        YY(3,j+2)=YY(3,j+2)+YY(1,j)*p;
        xq1=XQ(j+1);%下一周机器人需求量
        xq2=XQ(j+2);%下下一周机器人需求量
        %如果容器艇满足需求则不购买
        k1=max(xq1-YY(2,j+1),xq2-YY(2,j+2));
        if k1<0
            k1=0;
        end
        %剩余未用来训练的机械手+用于指导的机械手+培养的机械手应当满足下一周需求,同理也应满足第三周需求量
        k2=xq1*p-YY(5,j);
        if k2<0
            k2=0;
        end
        %下下周是否需要更多的机械手
        kk2=xq2*p-YY(3,j+2);
        if kk2<0
            kk2=0;
        else
            kk2=ceil(kk2/L);
        end
        %确定当周至少要购买的机械手数
        k2=k2+kk2;
        %最大采购则是上一周剩余的机械手数*L
        k3=min(k2+100,YY(5,j)*L);%但是也不能过高
        if k3<k2
            k3=k2;
        end
        %也不能就k2,因为可能后面会有突发的需求,采购当期最大训练数也满足不了
        %购买容器艇数
        gm1=k1;
        %购买机械手数
        gm2=randi([fix(k2),fix(k3)]);
        %训练和保养
        YY(4,j)=YY(4,j)+gm1;
        YY(2,j+1)=YY(2,j+1)+gm1;
        YY(5,j)=YY(5,j)-ceil(gm2/L);
        YY(6,j)=YY(6,j)+ceil(gm2/L);
        YY(7,j)=YY(7,j)+gm2;
        %下一周剩余操作手
        YY(3,j+1)=YY(3,j+1)+YY(6,j)+YY(7,j);
        %记录购买数量
        YY(8,j)=gm1;
        YY(9,j)=gm2;
    end
    if length(find(YY<0))==0
        flag=1;
    end 
    end
    X1=YY;%储存过程数据
    %计算成本
    F1=sum(sum(YY([5,4,7],1:104).*G(3:5)));
    %单独计算容器艇和操作手成本
    for j=1:104
        if YY(8,j)<=5
            F1=F1+YY(8,j)*200;
        elseif YY(8,j)>5 & YY(8,j)<=10
            F1=F1+YY(8,j)*180;
        else
            F1=F1+YY(8,j)*160;
        end
        if YY(8,j)<=20
            F1=F1+YY(8,j)*100;
        elseif YY(8,j)>20 & YY(8,j)<=40
            F1=F1+YY(8,j)*90;
        else
            F1=F1+YY(8,j)*80;
        end
    end

第五问,这里的预测就直接时间序列就好了,在第四问的基础上增加条件进行寻优。

B题

本题主要是神经网络、机器学习预测

这几个条件需要注意

①假设矿石加工过程需要经过系统I和系统II两个环节,两个环节不分先后,其他条件(电压、水压等)保持不变。

②生产技术人员可以通过传入调温指令,调节温度来改变产品质量。其中系统I和II的温度数据见附件1和附件2。

③矿石加工过程为2小时整(即:在调节温度2个小时后,可检测得到该调节温度所对应的矿石产品质量的评价指标(A,B,C,D))

④假设每次温度调节之后的2个小时内不会传入新的调温指令,调温指令下达后系统温度基本与调温指令设定的温度相同,但是有轻微波动

第一问,需要根据构建出系统温度和原矿参数预测产品质量的方法,时间肯定是要以产品质量数据的时间为准,质量评价指标ABCD是调节温度两小时后得到的(两小时内温度有轻微波动),附件中的质量数据是一小时得出一个结果,因此我们在处理温度的时候,比如说2022-1-25 0:50:00产品质量数据,对应的是2022-1-24 22:50:00到2022-1-25 0:50:00平均温度数据,依次取2小时片段数据取平均值来对应质量指标数据,原矿参数是哪一天的这一天的数据训练都用这天的值就行了

数据处理好后就代入模型训练,可能性最大的产品指标其实就是模型训练后你预测的结果,模型训练好后,带入表1中两组系统温度和对应23号的原矿参数,输出以下四个指标ABCD

后面问不管正向预测还是反向预测,都基本是同样的模型,注意做模型的误差检验,这道题推荐所有队伍选择,机器学习算法现学也很快

第二问就是反过来训练,去预测温度,同样的模型套用即可

第三问,先根据表3和附件2的ABCD三个指标给数据贴上合格和不合格的标签,进行二分类训练,然后带入数据去预测

第四问,前面训练的模型可以当做目标函数,自变量为系统温度1、2,套一个优化算法进行寻优

C题

本题主要用到excel

这几个条件需要注意

①探测器的灵敏度决定了对火灾特征响应的灵敏程度,但较高的灵敏度会导致报警可靠性的降低,而较高的可靠性则需要牺牲探测器的灵敏度

②当某一建筑内多个火灾探测器的机号与回路编号相同时且这些探测器均发出火灾报警信号,则认为是同一起火灾事故

③地址编码是建筑,用户编码可以看成其中的房间或者区域

第一问,首先根据附件1确定该城市6月1日至6月18日的真实火灾起数,做法就是做字符计数,excel都能实现,然后对每个建筑内各个探测器的故障频数统计,得到故障率,然后排序做评价。

第二问,附件1中的占比是所有事件的占比,附件2中的占比是同样的,而故障率则是用附件2与附件1相同的部件相除,然后分不同回路统计故障率,excel做字符去重后用countifs函数就能搞定了,选择合适参数建立区域报警部件类型智能研判模型,这里的合适参数其实就是指回路数,也就表示不同探测器的灵敏度,其实后面问应当考虑每种探测器(部件名称)的最佳回路数,那么肯定就需要先得到不同探测器的回路数与故障率的关系式,然后对回路数与故障率曲线进行故障率最小化寻优,找出最佳回路数。

第三问就是评价,除了题目说到的辖区火灾发生频率、部件故障率、部件可靠性等指标,自己还可以增加一些。

猜你喜欢

转载自blog.csdn.net/qq_39899679/article/details/124523937