题目
A题 高温作业专用服装设计
在高温环境下工作时,人们需要穿着专用服装以避免灼伤。专用服装通常由三层织物材料构成,记为I、II、III层,其中I层与外界环境接触,III层与皮肤之间还存在空隙,将此空隙记为IV层。
为设计专用服装,将体内温度控制在37℃的假人放置在实验室的高温环境中,测量假人皮肤外侧的温度。为了降低研发成本、缩短研发周期,请你们利用数学模型来确定假人皮肤外侧的温度变化情况,并解决以下问题:
-
专用服装材料的某些参数值由附件1给出,对环境温度为75℃、II层厚度为6 mm、IV层厚度为5 mm、工作时间为90分钟的情形开展实验,测量得到假人皮肤外侧的温度(见附件2)。建立数学模型,计算温度分布,并生成温度分布的Excel文件(文件名为problem1.xlsx)。
-
当环境温度为65℃、IV层的厚度为5.5 mm时,确定II层的最优厚度,确保工作60分钟时,假人皮肤外侧温度不超过47℃,且超过44℃的时间不超过5分钟。
-
当环境温度为80℃时,确定II层和IV层的最优厚度,确保工作30分钟时,假人皮肤外侧温度不超过47℃,且超过44℃的时间不超过5分钟。
附件1. 专用服装材料的参数值
附件2. 假人皮肤外侧的测量温度
(附件略)
思路
看到这个题的第一反应还是比较兴奋的,毕竟队里有两人都学过热力学。但是我们也不敢保证没有B题比A题简单的可能,所以还是分了工,理论强的队友看A题,自动化的队友看B题,我负责收集资料。事实证明这个决策有一点失误——直到开赛后第二天下午自动化的队友还在研究B题,而确定专攻A题则已经是开赛后第三天上午的事了。
现在事后总结一下,最普遍的解题思路大致应该是:
-
上网搜一堆传热学的教材,先看十小时书;
-
在书中内容的基础上建立模型(圆柱或板),列出传导方程;
-
给定适当的边界条件,利用Matlab或Mathematica解上述方程;
-
对比附件一,确定最优参数。
而二三问本质上都是依据第一问中建立并求解得到的模型来优化参数,因此至此便可以宣告A题结束。这个思路可以说非常清晰而直观,但是大多数参赛队在实践以上思路的过程中会遇到以下几个问题:
-
部分参赛队甚至没读懂《传热学》的内容;
-
此题中有多层介质,如何处理介质交界处的连续性条件;
-
传热方程作为偏微分方程,解法无非采用差分法,而Matlab在这方面较弱,因此很考验编程人员的水平;
-
如何处理附件2给出的边界条件使模型预测值吻合实际。
上述问题解决之后我相信二三问不会有任何难度,这也是最起码会拿省一的水平。
而我们队由于主编程的我很讨厌Matlab因此一开始就没有采用这种解法。队内另外一个小哥哥刚参加过CUPT并且拿了国一,我两一合计这题不就是一个两热场的物理仿真嘛,于是果断上COMSOL。以下基于用COMSOL求解此题的做法,给出我们的思路及实现。
Problem 1
打CUPT的小哥哥花半天的时间搭好了一个二维的四层物理仿真模型然后在他睾贵的垃圾桶上跑了几遍。由于第一题中所有量都是给定的,因此我们只需要对比COMSOL跑出来的结果与附件2是否相近。几次试下来之后发现问题:
-
所有温度值全部偏大;
-
他的垃圾桶跑一遍是在是太慢了(到现在还是不知道为什么)。
于是我们把平台换成了Windows并对题目做出了更符合实际的假设——由于以上不能满足题目所给出的数据,考虑37℃恒温热源与皮肤表面之间有一层皮肤组织,并且明确题目中假人皮肤外侧的测量温度指的是与假人外侧皮肤距离趋于无穷小处的空气温度。这样A题就转化为了一个调参优化问题:
找出一组最优的皮肤参数(厚度,热导率,密度等)使模型满足附件2的数据,且参数符合实际物质参数。
最后我们当然使找到了神奇的暖体假人。
Problem 2
在第一题求解出来的情况下我真不知道第二题有什么值得做的…出题组咋想的啊…
传统优化问题,单变量,范围给定。最简单的暴力线搜索,高级一点的(考虑到精度问题)变步长搜索,模拟退火和遗传都算小题大做了…不管怎么搞这题复杂度不应该超过O(n)。
这题唯一值得讨论的地方是,题目中要求最优厚度,问题在于什么是最优。如果只考虑温度条件,显然把Ⅱ层厚度调最大肯定能保证安全;而如果最优只意味着最薄,这题就太没意思了吧…
最后我们的论文讨论了两种情况,一种是只考虑最薄厚度,一种是结合材料厚度(越厚越贵)和安全两方面同时考虑。
Problem 3
和第二问一样,最简单的优化问题。随便套一个算法上去优化一下就行。
总结
在我刷知乎的时候看到了这样的回答(原出处不可考,仅凭记忆):
为什么在8102还要让一群大一大二的解一些早可以通过某些商用软件精确求解的问题,这样有意义吗
我想说,没有意义。这次我们组能做出来这道题,COMSOL确实在很大程度上帮了忙,减去了许多不必要的麻烦。但是谁说不能用COMSOL这些软件来做呢?就像我一开始说的,我讨厌Matlab。从学校的数学建模培训开始,我坚持用Python做题而不是Matlab。对于数学建模来说,
Matlab是现在,Python是未来。
我相信大部分参赛组都把大量时间花在研究Matlab如何求解偏微分方程、如何正确地差分等琐事上,而我们为什么不能回过头来反思一下,Matlab自身存在的问题在今日的数学建模中已经非常明显了,我们为什么不能舍弃它而拥抱更加强大的其他工具呢?
最后,感谢组里两位大佬带我飞,感谢浙江理工大学硕士潘某的优秀论文。
ps. 据说这次竞赛中被大量引用的论文作者的导师均为同一人,而此题为其两年前所出。