【数学建模】2018全国大学生数学建模竞赛B题感悟(中)

【数学建模】2018全国大学生数学建模竞赛B题感悟(中)_第1张图片
id=66414512

承接 【数学建模】2018全国大学生数学建模竞赛B题感悟(上)

二、问题概述

1.问题背景(我直接复制原题):

【数学建模】2018全国大学生数学建模竞赛B题感悟(中)_第2张图片

  自从 1959 年 Johnson 发表了两台机床流水车间调度问题,车间调度方案的 优化在生产问题中便尤为重要。调度是指在给定的时间中,对可用的系统资源集 进行加工任务,将调动安排系统环境内有限的资源,使之效率最大化。车间调度 模型由于机器和工件所需工序不同的影响,分为单机调度,流水车间调度,并行 机调度,作业车间调度几种。本文中为智能加工系统,该智能加工系统由 8 台计 算机智能数控机床(CNC)以及轨道式自动引导车(RGV),引导车轨道,上下 料传送带组成。RGV 带有机械手臂、机械手爪、清洗槽,能根据指令在轨道上自 动进行移动方向与距离的控制,并完成上下物料以及清洗的任务。
  在 RGV 执行 任务时有三种情况:
(1) 物料仅需一道工序进行加工时,每台 CNC 安装同样的刀具,物料可 以在任一台 CNC 完成加工;
(2)物料需要两道工序进行加工时,第一和第二道工序则由两台不同的CNC 依次加工完成;
(3) 由统计可得 CNC 在加工过程中有 1%的概率发生故障,进行人工处理 并将未完成的物料报废需要耗时10-20分钟,故障排除完毕后即可加入作业序列。
   要求分别对一道工序和两道工序的物料加工情况进行考虑,根据上述的基 本要求,建立数学模型解决下面的两个问题:
  问题 1:对一般问题进行研究,给出 RGV 动态调度模型和相应的求解算法;

  问题 2:利用表 1 中系统作业参数的 3 组数据分别检验模型的实用性和算法 的有效性,给出 RGV 的调度策略和系统的作业效率,并将具体的结果分别填入 附件 2 的 EXCEL 表中。
【数学建模】2018全国大学生数学建模竞赛B题感悟(中)_第3张图片
6.png

【附件一:智能加工系统的组成与作业流程】
1.系统的场景及实物图说明
  在附图1中,中间设备是自带清洗槽和机械手的轨道式自动引导车RGV,清洗槽每次只能清洗1个物料,机械手臂前端有2个手爪,通过旋转可以先后各抓取1个物料,完成上下料作业。两边排列的是CNC,每台CNC前方各安装有一段物料传送带。右侧为上料传送带,负责为CNC输送生料(未加工的物料);左边为下料传送带,负责将成料(加工并清洗完成的物料)送出系统。其他为保证系统正常运行的辅助设备。

附图1:RGV—CNC车间布局图
【数学建模】2018全国大学生数学建模竞赛B题感悟(中)_第4张图片
附图2:带机械手臂和清洗槽的RGV实物图
  附图2是RGV的实物图,包括车体、机械臂、机械手爪和物料清洗槽等。
【数学建模】2018全国大学生数学建模竞赛B题感悟(中)_第5张图片
附图3:RGV机械手臂前端的2个手爪实物图
  在附图3左图中,机械臂前端上方手爪抓有1个生料A,CNC加工台上有1个熟料B。RGV机械臂移动到CNC加工台上方,机械臂下方空置的手爪准备抓取熟料B,在抓取了熟料B后即完成下料作业。
  在附图3右图中,RGV机械臂下方手爪已抓取了CNC加工台上的熟料B抬高手臂,并旋转手爪,将生料A对准加工位置,安放到CNC加工台上,即完成上料作业。

2.系统的构成及说明
  智能加工系统由8台CNC、1台带机械手和清洗槽的RGV、1条RGV直线轨道、1条上料传送带和1条下料传送带等附属设备构成。

(1)CNC:在上料传送带和下料传送带的两侧各安装4台CNC,等距排列,每台CNC同一时间只能安装1种刀具加工1个物料。
  如果物料的加工过程需要两道工序,则需要有不同的CNC安装不同的刀具分别加工完成,在加工过程中不能更换刀具。第一和第二道工序需要在不同的CNC上依次加工完成,完成时间也不同,每台CNC只能完成其中的一道工序。

(2)RGV:RGV带有智能控制功能,能够接收和发送指令信号。根据指令能在直线轨道上移动和停止等待,可连续移动1个单位(两台相邻CNC间的距离)、2个单位(三台相邻CNC间的距离)和3个单位(四台相邻CNC间的距离)。RGV同一时间只能执行移动、停止等待、上下料和清洗作业中的一项。

(3)上料传送带:上料传送带由4段组成,在奇数编号CNC1#、3#、5#、7#前各有1段。由系统传感器控制,只能向一个方向传动,既能连动,也能独立运动。

(4)下料传送带:下料传送带由4段组成,在偶数编号CNC2#、4#、6#、8#前各有1段。由传感器控制,只能向同一个方向传动,既能连动,也能独立运动。

3.系统的作业流程

(1)智能加工系统通电启动后,RGV在CNC1#和CNC2#正中间的初始位置,所有CNC都处于空闲状态。

(2)在工作正常情况下,如果某CNC处于空闲状态,则向RGV发出上料需求信号;否则,CNC处于加工作业状态,在加工作业完成即刻向RGV发出需求信号。

(3)RGV在收到某CNC的需求信号后,它会自行确定该CNC的上下料作业次序,并依次按顺序为其上下料作业。根据需求指令,RGV运行至需要作业的某CNC处,同时上料传送带将生料送到该CNC正前方,供RGV上料作业。
  RGV为偶数编号CNC一次上下料所需时间要大于为奇数编号CNC一次上下料所需时间。

(4)在RGV为某CNC完成一次上下料作业后,就会转动机械臂,将一只机械手上的熟料移动到清洗槽上方,进行清洗作业(只清洗加工完成的熟料)。
  具体过程:首先用另一只机械手抓取出清洗槽中的成料、转动手爪、放入熟料到清洗槽中,然后转动机械臂,将成料放到下料传送带上送出系统。这个作业过程所需要的时间称为RGV清洗作业时间,并且在这个过程中RGV不能移动。
  熟料在清洗槽中的实际清洗时间是很短的,远小于机械手将成料放到下料传送带上的时间。

(5)RGV在完成一项作业任务后,立即判别执行下一个作业指令。此时,如果没有接到其他的作业指令,则RGV就在原地等待直到下一个作业指令。
  某CNC完成一个物料的加工作业任务后,即刻向RGV发出需求信号。如果RGV没能即刻到达为其上下料,该CNC就会出现等待。

(6)系统周而复始地重复(3)至(5),直到系统停止作业,RGV回到初始位置。

2.问题简述

  就是2*4放置的机器CNC分别编号1~8,有个小车RGV初始在1和2中间的位置,两侧机器有三个道,一个走车,还有上、下料传送带,(因为上料传送带在下方,所以1、3、5、7机器上料快),好玩的地方在于机器的上料方式,还特地去Youtube找视频看(虽然没卵用),机器的上料、下料、换料时间都是一样的!看上面附图3,上料需要小车机械臂上去一轧,一台;下料需要将空手臂一轧,一台;换料需要空的一侧轧,然后转一下,将另一侧的生料轧上去再一台;虽然换料多了一步,但差别时间几乎可以忽略不计。
  题的最终目的是得到产量最大化的调度方式。

3.思路

  刚看到题的时候,想到的是数据结构中学的最短路径问题,同样是各个事件间的互相依赖,同样是类似优化的问题,好似很贴切,这是第一天晚上8点下来题时的第一想法。但是队友指出了一些问题,拓扑图是不可以交叉的等等等等,我又无法反驳她,毕竟我不是数学专业,数据结构也只能在期末考试逞威风。并且调度八小时的拓扑模型我也画不出来,同时还思考,最短路径是找到工程的最短完成时间,并且找到如何优化整体工程的方法,似乎并非是完全适用,同时队友提出了排队论的一些想法,可惜我没学过运筹学,不算太懂。
  没有思路就去知网上找找,关键词RGV调度、RGV路径优化之类的,找出了不少关于遗传算法的论文,我很兴奋,因为比赛前几天刚好实现了遗传算法,如果能用遗传算法解决问题就再好不过了。事实上我想多,论文上面的问题和我们做的不是一个问题,大多是多个RGV之间如何防碰撞的调度问题,建模进度似乎就此耽搁了。
  回头睡觉,睡不着。刷知乎,就一个提问两个回答,还都是没意义的。看贴吧,都是骗子,嗯,还加进一个群,里面不是骗子,很多人讨论,但没什么有意义的思想,并且多数是A题。

三、建模经历

第一天:

  没有思路,我就是在找论文中度过了一上午,我无耻的将建模的任务交给了两个队友,并且无耻地说道:我是编程手——建模不用我考虑——你们建完模型后告诉我就行——一定要告诉我所有准确的步骤哦——不然我不能编程哦——
  当然,就算是推卸责任,建模也是大家的事,特别是编程手不能闲着,建模没有思路,但是有一个想法冒了出来:我先建一个程序,将题中的每一个步骤展现出来如何?我好像听说过,这东西叫仿真。
  我是在前几周听到的,当时数学建模群里有人这样问:

学生:“老师,今天讲的第二问可以用神经网络仿真模型吗?”
老师:“怎么仿真?”
学生:“就是构建一个仿真模型的系统动力学方程——”等等等等
老师:“是仿真出来了还是只有想法?”
学生:“想法,因为看了一个这样的文献,可以吗?”
老师:“仿真是最难实现的算法之一,而且仿真的前提是把变化机理(细节)都弄清楚,还得需要很高的编程技术,有这些能力吗?”
学生:“喔,我知道了,谢谢老师”

  听起来好难,我当时也被吓到了,这段话看起来像是坏老师打消学生的积极性。实际上这位老师是学校里数学建模中最负责的老师,数学建模的组织他最积极,从培训到比赛负责指导,他都一直坚持着。我自身也对他有些好感,因为上次建模比赛只有我们选择D题,老师依旧花时间研究并给我们指导。这么说也是对的,我们学校编程水平高的不多,水平高的有搞数学建模的更少,很多同学连matlab的安装都需要靠老师,别说需要大量复杂操作的仿真了,与其投入大量时间做仿真编程,不如去多学习建模方法,老师这么说也是无奈之举。
  不过我闲着也是闲着,并且抱着初生牛犊不怕虎的精神,打开jupyter-notebook就开始写仿真代码,身边的队友在研究其他的,中间我们也去找过几次这个老师,无奈老师选的是A题,B题由其他老师(之前的急性子老师)研究,而我们队的队友不是很喜欢那个急性子老师,于是追着老师问,老师也没办法,大致说了说思路,但没有深入思考,落实到具体还是有缺陷的,就比如提出了规划,要列出目标函数,要写出约束条件,这大家都知道,但如何列出目标函数和约束条件,这是主要问题。队友很不满意,直呼脱粉了脱粉了。其间我对老师说了我的想法,不过当时没编多少代码,还有一些BUG,老师当时没太在意。
  我理解老师,不过老师真的挺好,回去研究了下B题,晚上的时候找到我们再讨论了一下,比之前具体了不少,队友表示粉回来了。
  其中我也和老师讨论了下,老师看了下我的代码,认可了我的编程水平,可惜当时BUG还是太多。

老师:既然你编程能力不错,可以试试元胞自动机吧。
我:元胞自动机emmm这是什么,好像听说过,没了解过。
老师:元胞自动机就是这样…… 临时讲了一堆

  在我理解中,元胞自动机就是一个持有状态为成员变量的对象,而网格就是元胞自动机的二维矩阵,而多个时间的元胞自动机会组成一个体,就像是图片叠加成电影一样,总感觉摸到一些门道,又缺点什么。
  就这样第一天结束了,不过老师的任务还没结束,第二天起来看到老师一点发在群里的文件,心中感慨万千。

第二天:

  这一天是我最兴奋的一天,首先在上午我完成了仿真程序的编写;并在中午想到了一个自己感觉可行的方案,生成树核(自造)+遗传算法解决问题;在下午完善了这一套理论,讲给办公室的其他老师听,老师认为是可行方案,于是兴奋地回去执行了。倒是可怜我的队友,也花了很多精力想出了一个大致可行的模型,但是当时那些老师已经认可我说的模型了,只能转换思路接受我的模型。
  我在晚上完成了生成树核的编写。之前的急性子老师表示我们有两个选择,一是回去睡觉,这样以更好的精力完成最后一天的建模;二是继续坚持,不过老师也要睡觉,之前我们最喜欢的老师要留在这里,一直辅导到12点然后睡办公室。
  我惊叹于:还有这种操作?本来我是坚持的睡觉党,认为不睡好觉根本建不好模型,不过当时还有不少人留在比赛现场(机房和办公室),我也兴奋头没过,准备加班编程,同时队友表示也留下,其中一个第三天还要上物理实验(因为她听说一次不上就挂),不加班就没时间写论文了,不过老师好像帮她解决了。

第三天:

  如果第二天是天堂,相比起来,第三天就是地狱了,或许我应该好好睡一觉
  半夜里,我完成了遗传算法的代码编写,然后成功跑出了一道工序情况的运行结果。当我进军第二种情况(两道工序)时,却发现问题不仅仅是那么简单,第一问的状态转变仅仅是加了一道工序,状态转移就变得很复杂,我简单得将转移示意图画在纸上,所有情况打在word中,并按照上面的方式完成状态转移和生成树核,然而噩梦就来了。
  三状态转移复杂到多状态还有机械手状态相互叠加,虽然改的函数差不多只有那么一个,然而却总能发现问题,还要回去改word,复杂的逻辑乱窜,整个办公室只有我一个醒着的,而我也魔怔了。
  第三天,上午困,趴了一个小时,起来时明明睁着眼睛,却好像包了一层膜,等了两分钟恢复了,开始继续写生成树核,程序也在慢慢走向正轨,然而时间不够了!老师过来看到我第一种情况的结果,劝我不要忙着写代码了,应该去帮队友写论文,我断断续续地写了些,又总认为自己能玩完成第二种情况生成树核,在五点的时候终于撑不住了,一头趴在桌子上,等队友叫我的时候,已经七点多了。
  时间已经来不及了,第二问我只写完了状态转移代码,没写完生成树核,自然就无法随机生成调度,我随意写了一个先来先服务的调度方式,只有第一类数据是可用的,其他的,我不想提交了,但老师说必须交支撑材料,此时已经9点半了,还有半个小时……
  随后是屈辱的,将数据复制过去几份,放到论文的支撑材料中,在九点五十八分,颤抖着将论文和支撑材料提交上去。
  或许我不应该不睡觉的,或许我不应该写仿真,或许再给我一天我就能写出第二问的生成树核,再或许……我的编程能力还是不够的。可惜时间不等人,再大的不甘也随着十点的那一刻定格了。

此刻:

  我依旧是不甘心的,但现在我只想把我的解题思想写下,作为留念,作为一个参考留下来。

由于字数原因,请看【数学建模】2018全国大学生数学建模竞赛B题感悟(下)

你可能感兴趣的:(【数学建模】2018全国大学生数学建模竞赛B题感悟(中))