2020年国赛建模A赛题:炉温曲线
(获得奖项:国二)
声明:本文所有图片均出自论文、未经允许,谢绝使用。
1. 问题重述:
在集成电路板等电子产品生产中,需要将安装有各种电子元件的印刷电路板放置在回焊炉中,通过加热,将电子元件自动焊接到电路板上。在这个生产过程中,让回焊炉的各部分保持工艺要求的温度,对产品质量至关重要。目前,这方面的许多工作是通过实验测试来进行控制和调整的。本题旨在通过机理模型来进行分析研究。回焊炉内部设置若干个小温区,它们从功能上可分成4个大温区:预热区、恒温区、回流区、冷却区(如下图所示)。电路板两侧搭在传送带上匀速进入炉内进行加热焊接。
某回焊炉内有11个小温区及炉前区域和炉后区域(如图1),每个小温区长度为30.5cm,相邻小温区之间有5 cm的间隙,炉前区域和炉后区域长度均为25 cm。回焊炉启动后,炉内空气温度会在短时间内达到稳定,此后,回焊炉方可进行焊接工作。炉前区域、炉后区域以及小温区之间的间隙不做特殊的温度控制,其温度与相邻温区的温度有关,各温区边界附近的温度也可能受到相邻温区温度的影响。另外,生产车间的温度保持在25ºC。在设定各温区的温度和传送带的过炉速度后,可以通过温度传感器测试某些位置上焊接区域中心的温度,称之为炉温曲线(即焊接区域中心温度曲线)。附件是某次实验中炉温曲线的数据,各温区设定的温度分别为175ºC(小温区15)、195ºC(小温区6)、235ºC(小温区7)、255ºC(小温区89)及25ºC(小温区10~11);传送带的过炉速度为70 cm/min;焊接区域的厚度为0.15 mm。温度传感器在焊接区域中心的温度达到30ºC时开始工作,电路板进入回焊炉开始计时。
实际生产时可以通过调节各温区的设定温度和传送带的过炉速度来控制产品质量。在上述实验设定温度的基础上,各小温区设定温度可以进行ºC范围内的调整。调整时要求小温区15中的温度保持一致,小温区89中的温度保持一致,小温区1011中的温度保持25ºC。传送带的过炉速度调节范围为65100 cm/min。
在回焊炉电路板焊接生产中,炉温曲线应满足一定的要求,称为制程界限(见表1)。
请你们团队回答下列问题:
问题1 请对焊接区域的温度变化规律建立数学模型。假设传送带过炉速度为78 cm/min,各温区温度的设定值分别为173ºC(小温区15)、198ºC(小温区6)、230ºC(小温区7)和257ºC(小温区89),请给出焊接区域中心的温度变化情况,列出小温区3、6、7中点及小温区8结束处焊接区域中心的温度,画出相应的炉温曲线,并将每隔0.5 s焊接区域中心的温度存放在提供的result.csv中。
问题2 假设各温区温度的设定值分别为182ºC(小温区15)、203ºC(小温区6)、237ºC(小温区7)、254ºC(小温区89),请确定允许的最大传送带过炉速度。
问题3 在焊接过程中,焊接区域中心的温度超过217ºC的时间不宜过长,峰值温度也不宜过高。理想的炉温曲线应使超过217ºC到峰值温度所覆盖的面积(图2中阴影部分)最小。请确定在此要求下的最优炉温曲线,以及各温区的设定温度和传送带的过炉速度,并给出相应的面积。
问题4 在焊接过程中,除满足制程界限外,还希望以峰值温度为中心线的两侧超过217ºC的炉温曲线应尽量对称(参见图2)。请结合问题3,进一步给出最优炉温曲线,以及各温区设定的温度及传送带过炉速度,并给出相应的指标值。
2. 解决思路
关于问题一,从一般的传热学原理出发。简化模型,假定回炉焊接工艺过程热量传导方式为电路板竖直方向的一维热传导,忽略水平方向上的热传导。电路板在回焊炉中以设定的传送带速度行进,回焊炉长度已知,电路板承受了随时间区间变化的热风温度载荷,所以热传递方程的边界条件也随时间发生变化。利用有限差分法中的后向欧拉法解一维热传导方程,取电路板焊接区域中心坐标的温度,绘制温度随时间变化的图像,即炉温曲线。将实验中的各项参数代入模型得出理论数据并与附件实测数据进行对比,相似度较高,认为模型具有实际效益。再将问题一的各项参数代入模型求出炉温曲线和各项所需值。
关于问题二,本题要求在各个温区温度一定的情况下,确定制程范围内被允许的最大传送带过炉速度。该问题为单变量最值问题。已知传送带过炉速度的调节范围为 65cm/min-100cm/min。以 65cm/min 为初值,100cm/min 为终值,0.1cm/min 为步长离散化过炉速度。将离散化后的速度分别代入模型计算,求得不同速度下对应的炉温曲线。以制程界限为约束条件进行筛选,最终得到满足制程界限的最大过炉速度92.6cm/min。
关于问题三,本题旨在调整温区温度以及过炉速度确定最优炉温曲线。要求炉温曲线特定阴影面积最小。该问题为单变量优化问题。影响阴影部分面积的主要因素为过炉速度与各温区温度大小。由传热学知识可知 1~7 小温区对阴影部分温度影响不大,故忽略 1~7 小温区温度变化只考虑 8~9 小温区温度对阴影面积的影响。则该问题变为多变量最优解问题。向量化 8~9 小温区温度代入问题二模型可求得满足制程界限下的所有变量组合,引入粒子群算法,设定二维粒子的初值(8~9 小温区温度与传送带过炉速度)以及合适的粒子飞翔速度与种群规模,迭代收敛求得最小阴影面积下的最优温度与最优速度解。
关于问题四,与问题三类似,在问题三同样的模型与假设下,引入第二个影响因子(温度大于 217℃峰值温度为中心线的时间差),若时间差越小则越对称。该问题为多变量的优化问题,为了简便计算且不影响问题结果,将设置两个权重控制两个影响因子,将两个影响因子相加作为一个影响因子带入粒子群算法收敛求优。计算得到多变量条件下的最优 8~9 小温区温度以及传送带过炉速度等参数。
3.问题分析
问题一,简化问题,将电路板温度分布由三维问题转化为一维问题,回炉焊接工艺过程中热量传导方式设为沿电路板竖直方向的一维热传导,忽略水平方向上的热传导,确定电路板在不同时刻的温度分布。其次确定边界条件,按不同空间区域设定回焊炉中不同的热风温度,即各小温区温度。相邻小温区之间存在间隙,该间隙的温度分布由相邻温区决定。电路板在回焊炉中以设定的传送带速度行进,又因为回焊炉长度已知,故电路板承受了随时间区间变化的热风温度载荷,所以热传递方程的边界条件也随时间发生变化。最后代入各项参数条件建立一维热传导方程,取电路板焊接区域中心坐标的温度,绘制温度随时间变化的图像,即炉温曲线。将实验所设定的各项参数代入模型,求出炉温曲线。将所求数据与附件中的数据对比,验证模型是否可行。若不可行,对模型进行修正,若可行则将问题一参数条件代入模型,求解得到炉温曲线和所需点温度。
对问题二进行分析可得,本题中的模型和边界条件仍然可以采用问题一的模型和边界条件,题目中物理量发生变化的是传送带的过炉速度,直接影响形成的炉温曲线,本文中以 0.1 cm/min 为速度步长,将传送带的过炉速度调节范围划分为若干份,将每份速度分别代入模型计算,求得不同速度下对应的炉温曲线。以制程界限为约束条件进行筛选,最终得到满足制程界限的最大过炉速度。
问题三首先交代了焊接区域中心的温度超过 217ºC 的时间不宜过长,峰值温度也不宜过高,并且理想的炉温曲线应该让超过 217ºC 到峰值所覆盖的面积最小,求出面积最小下的最优炉温曲线,以及各温区的设定温度。本文假设小温区1~7 对峰值温度影响基本可以忽略不计,对峰值温度影响很大的主要是小温区8~9 的温度。即找到一个最优的温度和速度的组合使得炉温曲线特定区域的阴影面积最小。通过在问题二的基础上,将问题简化,将 8~9 小温区的温度离散化带入问题二求得所有的满足制程界限的温度和速度的组合。根据梯形计算法求得阴影部分面积,引入粒子群算法,将 8~9 小温区的温度与过炉速度带入粒子群算法,迭代阴影部分面积使得损失函数收敛,得到最小阴影面积下的最优温度与最优过炉速度。
问题四要求其满足制程界限外,还希望以峰值温度为中心线两侧超过 217ºC的炉温曲线应该尽量对称,相当于在问题三上的基础上进一步分析。本问题的指标有两个,第一个指标是使超过 217ºC 到峰值温度所覆盖的面积最小,第二个指标是以峰值温度为中心线的两侧超过 217ºC 的炉温曲线应尽量对称。其中第二个指标可以简化为超过 217ºC 到峰值温度所用时间和峰值温度降到 217ºC 的所用时间尽量相同,即两时间差值最小。则本题为多变量求最优问题,基于问题三的粒子群算法,为简化计算并且满足题目要求,设置两个权重分别乘以阴影部分面积以及温度大于 217℃中峰值中心线两侧的时间差,并且相加作为粒子群算法的优化目标,通过权重控制多变量问题中的优化问题,将多变量问题转化为单变量问题,由权重控制两个指标的优先占比,计算题目要求下的最优温度以及最优过炉速度。
4.模型建立
利用一维热传导的原理建立初步数学模型,推导过程如下:
关于边界与初始条件的设定
将回焊炉如下分区:
通常,按不同空间区域设定回焊炉中不同的热风温度,即各小温区温度。相邻小温区之间存在间隙,该间隙的温度分布由相邻温区决定。电路板在回焊炉中以设定的传送带速度行进,又因为回焊炉长度已知,故电路板承受了随时间区间变化的热风温度载荷。设回焊炉匀速传送速度为𝑣0,电路板行走路程为𝑠 = 𝑣0𝑡,再将回焊炉温度分区为:
5.问题求解
**问题一求解:**用有限差分法求解问题一
matlab实现:`V = 78; % 设置速度为78 cm/min
L = 385.5; % 总长度为385.5 cm
L15 = 172.5; % 第1-5温区总长度
Li = 5; % 间隔长度
Ltr = 30.5; % 每个温区长度
Lt = L/V; % 总时长 /min
Lt15 = L15/V; % 经过第1-5温区所用时长
Lt2 = Li/V; % 经过间隔时所用时长
Lt3 = Ltr/V; % 经过一个小温区所用时长
T15 = 173; % 第1-5温区温度
T6 = 198; % 第6温区温度
T7 = 230; % 第7温区温度
T8 = 257;
T9 = 257;
T1011 = 25;
T56 = (T15+T6)/2; % 第5到6区间隔温度
T67 = (T6+T7)/2; % 第6到7区间隔温度
T78 = (T7+T8)/2;
T89 = (T8+T9)/2;
T910 = (T9+T1011)/2;
Lx = 0.15; % 一维焊接区域长度
dx = 0.01;
x = 0:dx:Lx;
dt = 0.002; % 时间离散化
t = 0:dt :Lt; % 总时间离散化
t15 = 0:dt:Lt15; % 第1-5温区时间离散化
ti = 0:dt:Lt2; % 间隔时间离散化
ttr = 0:dt:Lt3; % 每个小温区时间离散化
n15 = length(t15); % 时间长度量化
ni = length(ti);
ntr = length(ttr);
u = zeros(length(x), length(t));
u(:, 1) = 25; % 初始温度整体初始温度
% f = 10*exp(-20*(x-1/2).^2); % 设置热源
f1 = ones(1, length(x));
f1(1,1:2) = 173;
f2 = ones(1, length(x));
f2(1,15:16) = 173;
m1 = 173+0.0*sin(t); % 边界条件
m2 = 173- 0.0*sin(t);
A = -2*eye(length(x)) + diag(ones(1, length(x)-1), 1) + diag(ones(1, length(x)-1), -1); %
d = 1;
a = 0.065; % 控制传导速度
w = 3000; % 控制跳转速度
for n = 1:length(t)-1
u(:, n+1) = u(:, n)+(a^2/dx^2*A*u(:, n))*dt;
if n < n15
u(1, n+1) = (u(2, n+1)/(w*dx)+T15)/(1+1/(w*dx)); % 设置边界条件
u(end, n+1) = T15/(1+1/(w*dx))+u(end-1,n+1)/((w*dx)*(1+1/(w*dx)));
end
if n >= n15 && n < n15+ni % 第5-6温区间隔
u(1, n+1) = (u(2, n+1)/(w*dx)+T56)/(1+1/(w*dx)); % 设置边界条件
u(end, n+1) = T56/(1+1/(w*dx))+u(end-1,n+1)/((w*dx)*(1+1/(w*dx)));
end
if n >= n15+ni && n < n15+ni+ntr % 第六温区
u(1, n+1) = (u(2, n+1)/(w*dx)+T6)/(1+1/(w*dx)); % 设置边界条件
u(end, n+1) = T6/(1+1/(w*dx))+u(end-1,n+1)/((w*dx)*(1+1/(w*dx)));
end
if n >= n15+ni+ntr && n < n15+ni+ntr+ni % 第6-7温区间隔
u(1, n+1) = (u(2, n+1)/(w*dx)+T67)/(1+1/(w*dx)); % 设置边界条件
u(end, n+1) = T67/(1+1/(w*dx))+u(end-1,n+1)/((w*dx)*(1+1/(w*dx)));
end
if n >= n15+ni+ntr+ni && n < n15+ni+ntr+ni+ntr % 第7温区
u(1, n+1) = (u(2, n+1)/(w*dx)+T7)/(1+1/(w*dx)); % 设置边界条件
u(end, n+1) = T7/(1+1/(w*dx))+u(end-1,n+1)/((w*dx)*(1+1/(w*dx)));
end
if n >= n15+ni+ntr+ni+ntr && n < n15+ni+ntr+ni+ntr+ni % 第7-8温区间隔
u(1, n+1) = (u(2, n+1)/(w*dx)+T78)/(1+1/(w*dx)); % 设置边界条件
u(end, n+1) = T78/(1+1/(w*dx))+u(end-1,n+1)/((w*dx)*(1+1/(w*dx)));
end
if n >= n15+ni+ntr+ni+ntr+ni && n < n15+ni+ntr+ni+ntr+ni+ntr % 第8温区
u(1, n+1) = (u(2, n+1)/(w*dx)+T8)/(1+1/(w*dx)); % 设置边界条件
u(end, n+1) = T8/(1+1/(w*dx))+u(end-1,n+1)/((w*dx)*(1+1/(w*dx)));
end
if n >= n15+ni+ntr+ni+ntr+ni+ntr && n < n15+ni+ntr+ni+ntr+ni+ntr+ni % 第8-9温区间隔
u(1, n+1) = (u(2, n+1)/(w*dx)+T89)/(1+1/(w*dx)); % 设置边界条件
u(end, n+1) = T89/(1+1/(w*dx))+u(end-1,n+1)/((w*dx)*(1+1/(w*dx)));
end
if n >= n15+ni+ntr+ni+ntr+ni+ntr+ni && n < n15+ni+ntr+ni+ntr+ni+ntr+ni+ntr % 第9温区
u(1, n+1) = (u(2, n+1)/(w*dx)+T9)/(1+1/(w*dx)); % 设置边界条件
u(end, n+1) = T9/(1+1/(w*dx))+u(end-1,n+1)/((w*dx)*(1+1/(w*dx)));
end
if n >= n15+ni+ntr+ni+ntr+ni+ntr+ni+ntr && n < n15+ni+ntr+ni+ntr+ni+ntr+ni+ntr+ni % 第9-10温区间隔
u(1, n+1) = (u(2, n+1)/(w*dx)+T910)/(1+1/(w*dx)); % 设置边界条件
u(end, n+1) = T910/(1+1/(w*dx))+u(end-1,n+1)/((w*dx)*(1+1/(w*dx)));
end
if n >= n15+ni+ntr+ni+ntr+ni+ntr+ni+ntr+ni % 第10-11温区
u(1, n+1) = (u(2, n+1)/(w*dx)+T1011)/(1+1/(w*dx)); % 设置边界条件
u(end, n+1) = T1011/(1+1/(w*dx))+u(end-1,n+1)/((w*dx)*(1+1/(w*dx)));
end
% --------------------------3-6-7中点以及8的结束出焊接中心温度求解--------------------------------
if n == fix(2*ntr+2*ni+ntr/2) % 第3温区中点
data2(1, 1) = (u(8, n)+u(9, n))/2;
xdata(1, 1) = n;
end
if n == fix(5*ntr+5*ni+ntr/2) % 第6温区中点
data2(1, 2) = (u(8, n)+u(9, n))/2;
xdata(1, 2) = n;
end
if n == fix(6*ntr+6*ni+ntr/2) % 第7温区中点
data2(1, 3) = (u(8, n)+u(9, n))/2;
xdata(1, 3) = n;
end
if n == fix(8*ntr+7*ni) % 第8温区结束时焊接区中心点温度
data2(1, 4) = (u(8, n)+u(9, n))/2;
xdata(1, 4) = n;
end
end
% 定义变量
time1 = 0;
time2 = 0;
data = (u(8, :)+u(9, :))/2;
%---------------------------------------------------每个0.5s记录一个数据并画图-------------------------------------
% subplot(121);
data3 = data(1, 1:length(data)/60/2/Lt:length(t));
xdata2 = xdata/4.1686;
%-------------------------------------------------求峰值--------------------------------------------------
Max = max(data3);
% [T, X] = meshgrid(t, x);
% surf(X, T, u)
% shading interp
Ld = length(data4);
plot(1:Ld, data4);
hold on
plot(1:709, result);
% subplot(122);
hold on
plot([1 Ld], [Max Max], '--');
% hold on
% plot([0 xdata2(1, 1)], [data2(1, 1) data2(1, 1)], '--');
% hold on
% plot([0 xdata2(1, 2)], [data2(1, 2) data2(1, 2)], '--');
% hold on
% plot([0 xdata2(1, 3)], [data2(1, 3) data2(1, 3)], '--');
% hold on
% plot([0 xdata2(1, 4)], [data2(1, 4) data2(1, 4)], '--');
% hold on
% plot([xdata2(1, 1) xdata2(1, 1)], [0 300], '--');
% hold on
% plot([xdata2(1, 2) xdata2(1, 2)], [0 300], '--');
% hold on
% plot([xdata2(1, 3) xdata2(1, 3)], [0 300], '--');
% hold on
% plot([xdata2(1, 4) xdata2(1, 4)], [0 300], '--');
% hold on
legend('模型炉温曲线')
axis([0 Ld 0 300]);
xlabel('时间/0.5s');
ylabel('温度/℃');
% K = diff(data3)./diff(1:Ld); % 求斜率
%------------------------------------------------求温度在150-190℃的时间----------------------------------------------------
for m = 1:length(data3)
if data3(1, m)>150 && data3(1, m)<190
time1 = time1+1/2;
end
end
%------------------------------------------------求温度大于217℃的时间----------------------------------------------------------
for m = 1:length(data3)
if data3(1, m)>217
time2 = time2+1/2;
end
end
% diff = data4-result.';
% plot(1:709, diff);
% axis([0 709 -150 150]);
% xlabel('时间/0.5s');
% ylabel('温度/℃');
% Noise = imnoise(diff,'gaussian', 2, 0.5);
% Noise=awgn(diff,0.05);
% data4(1, 585:709) = data4(1, 585:709)-diff(1, 585:709)+50;`
结果展示:
**问题二求解:**问题二在问题一的基础上加上各初始条件,将题目各项参数代入模型,为了分析不同传送带过炉速度下的炉温曲线,以传送带的过炉速度65 cm/min 为初始值,100 cm/min 为终值,0.1cm/min 为步长代入模型进行搜索
问题三求解问题三需要通过不断的迭代找出最优值。这样的特征需要用到最优解法,类似梯度下降原理,不断迭代寻找最优值。通过查找文献,影响阴影部分面积的主要因素为过炉速度与 8~9 小温区温度大小。故假设预热区与恒温区温度一定。遍历过炉速度和 8~9 小温区温度大小组合成二维矩阵,通过该矩阵建立二维粒子群,将阴影面积大小作为收敛条件,带入粒子群算法,不断循环迭代,每一次迭代都确定一次该点是否相比于上一次使得阴影面积更加小,若小于上一次迭代数据则重新更新数据继续迭代,若大于等于上一次迭代数据则保留此次数据不做改变继续下一轮迭代。需要设置二维粒子初值以及合适的粒子飞翔速度与种群规模,尽可能保证损失函数收敛,找到全局最优值。
粒子群算法介绍:
PSO算法的粒子具有飞越性的特点使其能够跨过搜索平面上信息严重不足的障碍,飞抵全局最优目标值。比如 Generalized Rosenbrock 函数全局最小值在原点附近,但是此函数全局最优值与可到达的局部最优值之间有一条狭长的山谷,曲面山谷的中点最速下降方向几乎与到函数最小值的最佳方向垂直,找到全局最小值的可能性微乎其微,但是粒子群算法完全有可能找到全局最优解。并且粒子群收敛速度快,且对计算机内存和 cpu 要求不高,且需要调整的参数少,原理简单,易于实现。
粒子群算法的基本步骤:
1.初始化粒子群(速度和位置)、惯性权重、加速度常数(个人、种群)、最大迭代次数(种群规模)、算法终止的最小允许误差。
2.评价每个粒子的初始适应值。
3.将初始适应值作为当前每个粒子的局部最优解,并将各适应值对应的位置作为每个粒子的局部最优值所在的位置。
4.将最佳初始适应值作为当前全局最优值,并将最佳适应值对应的位置作为全局最优值所在的位置。
5.依据公式 𝑣𝑖^𝑑 = 𝑤𝑣𝑖^𝑑 + 𝑐1𝑟1*(𝑝𝑖^𝑑 − 𝑥^𝑑i ) + 𝑐2𝑟2(𝑝𝑔^𝑑 − 𝑥^𝑑i ),更新每个粒子当前的飞翔速度。
6.对每个粒子的飞翔速度进行限幅处理,使之不能超过设定的最大飞翔速度。
7.依据公式𝑥^𝑑i = 𝑥^𝑑i + 𝛼*𝑣^𝑑i ,更新每个粒子当前所在的位置
8.比较当前每个粒子的适应值是否比历史局部最优值好,若好,则将当前粒子适应值作为粒子的局部最优值,其对应的位置作为每个粒子的局部最优值所在的位置。
9.在当前群中找到全局最优值,并将当前全局最优值对应的位置作为粒子群的全局最优值所在的位置。
10.重复步骤 5~9,直到满足设定的最小误差或者达到最大迭代次数。
11.输出粒子群全局最优值和其对应的位置。
粒子群算法程序流程图
粒子群算法收敛曲线
**问题四求解:**问题四在问题三的基础上还需要考虑 217℃以上峰值温度中心线两侧的炉温曲线尽量对称,即 217℃以上峰值温度两侧的时间差尽可能小。结合问题三,将粒子群算法进一步优化。设置权重矩阵将阴影部分面积以及 217℃以上峰值温度两侧的时间差乘上权重后相加得到一个新的影响因子,带入模型计算新影响因子下的最优温度以及最优过炉速度。在计算中权重分配比为阴影部分面积权重比217℃以上峰值温度两侧的时间差权重,权重比为 6:4。
回忆
从东北三省建模联赛到国赛,能和志同道合的伙伴一起打数学建模真的是一件很值得回忆的事情,到现在我还记得那一年打建模国赛三天两夜,打东三省联赛是在家打的,三个人三个不同的地方,一整晚连着麦,三人小群,群通话打一整晚,后来老师也加入群通话一起,我们熬到了最后。国赛在工程楼里,一晚上一晚上的不睡觉,或者轮流睡,一有新想法就起来一起想,赛前买了很多物资,3天不用出楼。回想起晚上吃完饭三台电脑,六个屏幕正襟危坐一起在等题目出来,既兴奋又紧张,很值得回忆。最后悔的就是没有参加同年的那次美赛,想着全力备战考研不打比赛了,但是还是在家浪费了时间,不如参加美赛。希望本篇文章对你们有所帮助,祝建模取得好成绩。✌