2021高教社杯全国大学生数学建模竞赛D题
关键词:连铸切割 切割损失 整线性规划 平均绝对偏差 最优方案
D 题 连铸切割的在线优化
连铸是将钢水变成钢坯的生产过程,而优化切割是连铸的关键技术之一,直接影响了钢坯的利用率和用户的满意度。本文从尾坯切割损失、满足用户目标值两方面研究连铸的最优切割方案,并制定了出现异常情况下的实时最优切割方案。
问题1:在满足基本要求和正常要求的前提下,首先,证明了关于尾坯长度和用户目标范围实现切割损失为0的充要条件。考虑实际生产和测量都建立在一定精度之上,取定精度为0.1米,将4.8米~12.6米划分为79种长度规格; 根据参数与要求、用户目标值范围等条件,建立基于79种长度规格的切割损失最小整线性规划模型。进一步,给出了切割总损失最小值函数f(L)关于尾坯长度L的函数解析表达式。其次,将整线性规划模型所求的切割损失最小值固定,构造平均绝对偏差来刻画满足用户目标值,在切割损失最小的前提下,建立了最小平均绝对偏差模型并最终求得最优切割方案。结果表明,在切割损失最小的前提下,问题1中给出的12个尾坯最优切割方案的平均绝对偏差在0.16~0.5米之间。
问题2:考虑结晶器异常会出现报废段,基于问题1的模型和结果,本文分“尾坯+0.8米废坯”、 “部分长度(≤0.8米)废坯+尾坯+0.8米废坯”、 “尾坯1+0.8米废坯+尾坯2+0.8米废坯”等三种讨论了实时初始最优切割方案和调整后最优切割方案。结果表明,9段异常时刻初始切割方案总共调整了8次,声明不做调整0次; 总的切割损失为16.6米
问题3:结晶器出现异常的时刻都与问题2相同的条件下,分别求出了用户目标值为8.5米和11.1米的实时初始最优切割方案和调整后最优切割方案。用户目标值为8.5米初始切割方案总共调整了8次,声明不做调整0次,总的切割损失为8.8米; 用户目标值为11.1米初始切割方案总共调整了8次,声明不做调整0次,总的切割损失为17.1米。
二. 模型假设
1. 假设本文中连铸设备钢坯切割的精度为0.1米;
2. 假设t=0表示带有坯壳的钢水刚从结晶器中心出现;
3. 假设未说明结晶器异常时,连铸设备正常生产钢坯:
4. 由于报废段长度为固定值,本文切割损失仅为正常钢坯的切割所产生的报废钢坯长度,不计入报废段长度;
5. 假设温度、压力恒定,切割设备能正常进行,不存在漏钢现象;
6. 不考虑切割方案调整所需的时间。
三. 符号说明
符号 | 说明 | 单位 |
L | 尾坯长度 | 米 |
Y | 切割损失 | 米 |
Ymin | 最小切割损失值 | 米 |
d | 用户的目标值 | 米 |
t | 钢水在结晶器中心的时间 | 分钟 |
x₁ | 第i种规格的板坯数量 | 根 |
z | 用户目标值的平均绝对偏差 | 米 |
*其他未标明符号在文中说明
四. 问题分析
针对问题1,要给出尾坯的最优切割方案,首先对已知报废长度进行规律探索,初步推论出理论切割总损失最小值与尾坯长度的关系。接着,建立两阶段模型求出尾坯切割最优方案。其中,第一阶段模型求解切割损失的最小值; 第二阶段模型寻找尽可能满足用户目标值的切割方案。最后,发现实际最小切割损失与理论最小切割损失完全相同,说明本文找到最小切割损失与尾坯长度的联系。
针对问题2,在两段报废段之间的正常钢坯可视为问题1中的“尾坯”。由于结晶器异常时常发生,本文将分三种情况讨论尾坯与废坯的连接类型,并给出相应的切割算法。第(1)小问要给出钢坯首次初选报废段的实时切割方案,由题目可知结晶器首次出现异常的时刻为0.0,因为假设未说明结晶器异常时,钢坯中不存在报废段,按照用户目标值9.5米进行钢坯的切割。第(2)小问要给出新一段钢坯和当前段钢坯的调整方案,
按照三种类型的对应算法进行求解。
针对问题3,在假设实时最优切割方案和结晶器出现异常的时刻都与问题2相同的条件下,要给出用户目标值分别为8.5米和11.1米的最优实时切割方案。直接使用问题2的算法,即可求出问题3中(1)(2)小问的实时最优切割方案。
五. 模型建立与求解
5.1模型的准备
连铸停浇时,将必然会产生尾坯,因此在实际生产中需要对尾坯进行切割。切割就可能会产生报废钢坯(即切割出的长度不满足用户的目标值范围),为使报废钢坯的长度尽可能的小,首先讨论钢坯报废长度为0的条件。设尾坯长度为L,用户目标范围为[a,b],若L/a或I/b恰好为整数,那么可将尾坯平均切割长度为a或b,从而报废长度为0。因此,下面将讨论L/a,L均不为整数时,报废长度为0的充要条件。
定理1:在钢材连铸切割中,若尾坯长度为L,用户目标范围为[a,b],且a≠b。若 L,L与均不是整数,那么报废钢坯长度为0的充要条件是 L-|b|≥1,
证 明:
(1) 充分性证明。
|
若 L |
|
|
另一方面, 得 L≡La5)L+1<Lb=b。 |
|
因此,每一段长度都在[a,b],符合用户目标范围,报废钢坯长度为0。
(2) 必要性证明。
若报废钢坯长度为0,则可设尾坯长度为L被切割为 L1,L2,⋯,Ln, 且 a≤b1≤b2≤⋯≤Ln≤b,
得 na≤∑i=1nL4≤nb,
又由于 L、Lb
均不是整数,可得 na<L< nb, 即有 Lb<n<La
因此 La≥n,|Lb|≤n-1, 即有 La-|Lb|≥1,
综上所述,报废钢坯长度为0的充要条件是 LM-|b≥1,
|
|
|
由于 因此,若 的值不满足定理1中 |La-|Lb]≥1 |
推论1:在钢材连铸切割中,若尾坯长度为L,用户目标范围为[a,b],且a<b。若 L, |
|
.2 问题1的求解
实际生产过程和测量工作总是建立在一定的精度之上。根据问题1给出的数据,我们不妨假设该连铸工艺切割的精度为0.1米,在此基础上建立模型寻找最优切割方案。由于切割方案要优先考虑切割损失,在相同的切割损失下才需要尽量满足用户的目标值; 因此,本文将分别建立两阶段模型:第一阶段模型,根据参数与要求、用户目标值范围等条件建立切割损失最小模型; 第二阶段模型,在切割损失达到最小值的前提下,寻找尽可能满足用户目标值的切割方案,建立满足用户目标值最优模型。
5.2.1切割损失最小模型的建立
根据基本要求,要将在线切割后的钢坯运走,切割出的长度值必须在4.8~12.6米之间.我们已经假定连铸工艺切割的精度为0.1米,因此,尾坯只能被切割成4.8米、4.9米、5.0米、⋯⋯、12.6米共79种不同长度规格. 设x₁表示尾坯被切割出第i种长度规格数,其中i=1,2,……,79.假设尾坯长度为L,由于被切割后尾坯总长度仍保持不变,因此有:
∑t=1m4.8+0.1i-1=L
问题1中,用户的目标值范围为9.0~10.0 米之间,因此,9.0米以下长度规格及10.0米以上长度规格均产生切割损失。其中:
(1)9.0米以下长度规格的切割损失为: ∑i=1424.8+0.1i-1xi:
(2)10.0米以上长度规格,超过10.0米的部分要离线切下报废,因此10.0米以上长度规格的切割损失为: ∑j=1260.1j⋅x3.
因此,长度为L的尾坯被切成79种不同长度规格后,其切割总损失量为:
Y=∑i=1424.8+0.1i-1xi+∑j=1260.1j⋅x83+
基于以上分析,我们建立以下切割损失最小的整线性规划模型:
5
minY-∑i=14248+0.1i-1xi+∑i=1260.1j⋅x33, (1)
s.t.∑t=1m4.8+0.1i-1=L (2)
z₁∈N i=1,2,…,79
下面对上述建立在0.1米精度上的整线性规划模型的求解结果进行分析和检验。问题1中用户目标值为[9.010.0],假设尾坯长度为L,切割总损失最小值为f(L)。对于尾坯长度L的不同取值范围,根据定理1,从理论上构建切割总损失最小值f(L)的解析式,具体分15种情况讨论:
(1)在 L∈[9,10]∪[18,20]∪[27,30]∪[36,40]∪[45,50]∪[54,60]∪[63,70]
∪[72,80]∪[81,+∞]时, f(L)=0
(2)在L∈(80,81)时, f(L)=L-80 (3)在L∈(80,81)时, f(L)=L-80
(4)在L∈(70,72)时, f(L)=L-70 (5)在L∈(60,63)时, f(L)=L-60
(6)在L∈(60,63)时, f(L)=L-60 (7)在L∈(50,54)时, f(L)=L-50
(8)在L∈(40,45)时, f(L)=L-40 (9)在L∈(30,36)时, f(L)=L-30
(10)在L∈(20,27)时, f(L)=L-20 (11)在L∈(14.8,18)时, f(L)=L-10
(12)在L∈(13.7,14.8]时, f(L)=4.8 (13)在L∈(12.6,13.7]时, f(L)=L
(14)在L∈(10,12.6]时, f(L)=L-10 (15)在L∈[4.8,9)时, f(L)=L
对问题1给出的12种不同长度的尾坯,根据给出的切割总损失最小值f(L)解析函数,可以计算其切割总损失最小的理论值。将该理论值与建立在0.1米精度上的整线性规划模型求出的最小值进行对比,如下表1所示。
表1 不同尾坯长度的最小损失值对比表
尾坯长度 | 整线性规划所求损失最小值 | 最小值函数f(L)计算的理论值 |
109 | 0 | 0 |
93.4 | 0 | 0 |
80.9 | 0.9 | 0.9 |
72 | 0 | 0 |
62.7 | 2.7 | 2.7 |
52.5 | 2.5 | 2.5 |
44.9 | 4.9 | 4.9 |
42.7 | 2.7 | 2.7 |
31.6 | 1.6 | 1.6 |
22.7 | 2.7 | 2.7 |
14.5 | 4.8 | 4.8 |
13.7 | 13.7 | 13.7 |
检验结果表明,本文建立的整线性规划模型虽然建立在一定精度之上,但模型求解结果与理论计算结果完全吻合。
6
5.2.2满足用户目标值最优模型的建立
通过上文建立的整线性规划模型,求解出了尾坯切割损失的最小值。对于整线性规划模型,切割损失的最小值是唯一的,但最优解即切割方案可能不唯一。下面将求得的尾坯切割最小值Y,固定,在此条件下寻找最满足用户目标值的切割方案。设板坯长度L,用户的目标值为d,目标范围为[a,b]:第1~79种长度规格分别对应长度4.8米、4.9米、5.0米、……、12.6米, 2₄表示尾坯被切割出第i种长度规格数,其中i=1,2,……,79,设长度a、b分别对应第k₁和第k₂种长度规格,则显然有:
面构建平均绝对偏差来刻画满足用户目标值的情况。由于不在目标范围的长度规格全部报废而不提交给用户,只考虑目标范围内的钢坯满足用户目标值的情况。但需要注意的是,按照第一阶段模型结果,超过目标值范围上限值b长度规格的仍离线切割成长度b提交用户,因此仍需考虑这些长度规格带来的偏差。 |
第k₁~第k₂种长度规格的绝对偏差和为: ∑n=0kxk+n|a+0.1n-d|;
第 k₁+1~第79种长度规格的绝对偏差和为: ∑m=1mxk+m|b-d|;
因此,满足用户目标值的平均绝对偏差为:
表3 钢坯第2次出现报废段的最优切割方案
初始切 割方案 | 切割时间 (分钟) | 70.3 | 79.8 | 89.3 | 98.8 | 108.6 | 118.1 | 127.6 | |
切割长度 (米) | 9.5+0.8 | 9.5 | 9.5 | 9.5 | 9.5 | 9.5 | 9.5 | 9.5 | |
调整后 的切割 方案 | 切割时间 (分钟) | 70.8 | 80.8 | 90.8 | 100.8 | 106.4 | 115.9 | 125.4 | … |
切割长度 (米) | 10+0.8 | 10 | 10 | 10 | 4.8+0.8 | 9.5 | 9.5 | 9.5 | |
切割损失: 4.8米 |
表4 钢坯第3次出现报废段的最优切割方案
初始切 割方案 | 切割时间 (分钟) | 100.8 | 106.4 | 115.9 | 125.4 | 134.9 | 144.4 | 153.9 | 163.4 |
切割长度 | 10 | 4.8+0.8 | 9.5 | 9.5 | 9.5 | 9.5 | 9.5 | 9.5 |
10
(米) | |||||||||
调整后 的切割 方案 | 切割时间 (分钟) | 100.8 | 106.4 | 116.9 | 127.4 | 137.8 | 148.2 | 159.4 | 168.9 |
切割长度 (米) | 10 | 4.8+0.8 | 10.5 | 10.5 | 10.4 | 10.4 | 10.4+0.8 | 9.5 | |
切割损失: 2.2米 |
表5 钢坯第4次出现报废段的最优切割方案
初始切 割方案 | 切割时间 (分钟) | 137.8 | 148.2 | 159.4 | 168.9 | 178.4 | 187.9 | 197.4 | 206.9 |
切割长度 (米) | 10.4 | 10.4 | 10.4+0.8 | 9.5 | 9.5 | 9.5 | 9.5 | 9.5 | |
调整后 的切割 方案 | 切割时间 (分钟) | 137.8 | 148.2 | 159.4 | 170.1 | 180.8 | 192.3 | 201.8 | 211.3 |
切割长度 (米) | 10.4 | 10.4 | 10.4+0.8 | 10.7 | 10.7 | 10.7+0.8 | 9.5 | 9.5 | |
切割损失: 2.1米 |
表6 钢坯第5次出现报废段的最优切割方案
初始切 割方案 | 切割时间 (分钟) | 192.3 | 201.8 | 211.3 | 220.8 | 230.3 | 239.8 | 249.3 | *** |
切割长度 (米) | 10.7+0.8 | 9.5 | 9.5 | 9.5 | 9.5 | 9.5 | 9.5 | 9.5 | |
调整后 的切割 方案 | 切割时间 (分钟) | 192.3 | 202.1 | 211.9 | 221.7 | 231.4 | 241.1 | 251.6 | … |
切割长度 (米) | 10.7+0.8 | 9.8 | 9.8 | 9.5 | 9.7 | 9.7 | 9.7+0.8 | 9.5 | |
切割损失: 0米 |
表7 钢坯第6次出现报废段的最优切割方案
初始切割 方案 | 切割时间 (分钟) | 241.1 | 251.6 | 261.1 | 270.6 | 280.1 | 289.6 | *** |
切割长度 (米) | 9.7 | 9.7+0.8 | 9.5 | 9.5 | 9.5 | 9.5 | 9.5 | |
调整后的 切割方案 | 切割时间 (分钟) | 241.1 | 251.6 | 262.1 | 272.5 | 282.9 | 294.1 | … |
切割长度 (米) | 9.7 | 9.7+0.8 | 10.5 | 10.4 | 10.4 | 10.4+0.8 | 9.5 | |
切割损失: 1.7米 |
11
表8 钢坯第7次出现报废段的最优切割方案
初始切割 方案 | 切割时间 (分钟) | 272.5 | 282.9 | 294.1 | 303.6 | 313.1 | 322.6 | … |
切割长度 (米) | 10.4 | 10.4 | 10.4+0.8 | 9.5 | 9.5 | 9.5 | 9.5 | |
调整后的 切割方案 | 切割时间 (分钟) | 272.5 | 282.9 | 294.1 | 305.1 | 316 | 326.8 | … |
切割长度 (米) | 10.4 | 10.4 | 10.4+0.8 | 11 | 10.9 | 10+0.8 | 9.5 | |
切割损失: 1.9米 |
表9 钢坯第8次出现报废段的最优切割方案
初始切 割方案 | 切割时间 (分钟) | 272.5 | 282.9 | 294.1 | 305.1 | 316 | 326.8 | 336.3 | … |
切割长度 (米) | 10.4 | 10.4 | 10.4+0.8 | 11 | 10.9 | 10+0.8 | 9.5 | 9.5 | |
调整后 的切割 方案 | 切割时间 (分钟) | 272.5 | 282.9 | 294.1 | 305.1 | 316 | 326 | 331.5 | … |
切割长度 (米) | 10.4 | 10.4 | 10.4+0.8 | 11 | 10.9 | 10 | 0.8+3.9 +0.8 | 9.5 | |
切割损失: 3.9米 |
表10 钢坯第9次出现报废段的最优切割方案
初始切割 方案 | 切割时间 (分钟) | 341 | 350.5 | 360 | 369.5 | 379 | 388.5 | … |
切割长度 (米) | 9.5 | 9.5 | 9.5 | 9.5 | 9.5 | 9.5 | 9.5 | |
调整后的 切割方案 | 切割时间 (分钟) | 340.9 | 350.3 | 359.7 | 369.1 | 378.5 | 388.7 | … |
切割长度 (米) | 9.4 | 9.4 | 9.4 | 9.4 | 9.4 | 9.4+0.8 | 9.5 | |
切割损失: 0米 |
综上,每次出现新异常均需对原切割方案进行调整。9次异常总切割损失(不计报废段自身长度) 为: 4.8+2.2+2.1+0+1.7+1.9+3.9+0=16.6 (米)。
附 录
附录1 |
介绍:支撑材料的文件列表 |
问题1的源代码 fenduanhanshu. m 切割损失最小模型. lg4 满足用户目标值最优模型. Ig4 问题2的源代码 main. m 问题3的源代码 main. m 注: m 文件是 Matlab程序, Ig4 是 lingo文件 |
附录2 |
介绍: lingo代码, 作用是求解切割损失最小模型 |
model: sets: r/1..79/:x;1x为长度为4,4.1, ⋯⋯, 12.6米铁坯的个数; endsets data: 1=109;! 1为尾坯长度; d=4.8;1 d为最小长度限制: enddata min=8sum(r(i)|i# le#42:(d+0.1*(i-1))*x(i))+8sum(r(i)|i# ge#54:(d+0.1*(i-1)-10 )*x(i));! 损失最小; θsum(r(i):(d+0.1*i-0.1)*8(i)]=1; @ for(r:@ gin(x)); End |
附录3 |
介绍: lingo代码, 作用是求解满足用户目标值最优模型 |
model: sets: r/1..79/:x; endsets data: 1=109;! 1为尾坯长度; d=4.8;! d为最小长度限制: enddata |
20
min=(9sum(r(i)|i# ge#43# and#i# le#53:9abs(9.5-(d+0.1*(i-1)))^2*x(i))+(10-9.5) *@ sum(r(i)|i# ge#54:x))/@ sum(r(i)|i# ge#43:x);|用户满意度最优: 9sum(r(1)1i#1e#42:(d+0.1*(i-1))*x(i))+8sum(r(i)|i#ge#54:(d+0.1*(i-1)-10)*x( i))=0;!保证在损失最小的情况: @ sum(x(i):(d+0.1*i-0.1)*x(i)]=1; θfor(r:0gin{x}); end |