第一种情况大致思路: 每秒判断各个CNC的状态,若工作完成或者是出于空闲状态下则向RGV发出一个请求。同时,RGV每秒判断自己的状态(上下料、移动、闲置、清洗等),如果是处于闲置状态,则启用调度算法,把目前在闲置的CNC做一个全排列,计算把他们都换上料所花的时间。得到最优方案后再决定这次给谁上料,同时切换状态。

第二种情况大致思路: 大致与上面的相同,还是每秒判断各种状态,再特殊时段启用调度算法决定去哪,不过这里是双工序,所以需要在初始确定一种刀片分配方案。这里用循环直接枚举出所有的分配方案,每一种在仿真八个小时(实际上就是几秒,不显示界面的话)得到一个分数,选择最好的一种分配方案。这里对于某一种确定的分配方案,我们在调度的时候,选择把空闲的一号刀片CNC与二号刀片CNC放在两个列表中,也是对两个列表做一个全排列,并计算交错运行的间隔时间,找到最短方案。(比如1 2 是一号刀片 3 4 5是二号刀片 因为一个长一个短,全排列后也无法正好一个一号一个二号全上一次料,所以我们以短的那组作为上下料的数目 这里第一个列表长度是2 第二个是3 所以计算两对即可,去一个一号工序的,去一个二号工序的;再去一个一号,再去另一个二号;计算过程中所有CNC的等待时间),因为我们两个列表都做了全排列,且取较短的那个,所以可以穷举所有情况:比如最终采取1 4 2 5,然后在完成1 4之前就不再变动,当1 4 完成后,重新启用调度算法,对剩下的空闲CNC再算一次,决定当前状态下怎么抉择最好。

第三种情况大致思路: 这里我们启用了一种智能的调度算法,框架大体同上,只是让RGV每时每刻都处于一个接收命令的状态,所以命令列表就是所有的CNC,而非空闲的CNC了。对所有CNC进行全排列,计算去哪一个花费的时间少。并直接过去,如果此CNC未完成工作就继续等待。在完成一个工作后,立马计算当前状态下应该前往哪一个CNC那里。双刀片类似。

2018年数学建模国赛B题代码 本代码实现的是一个仿真模型,并在优化模型中使用了智能化的小车

具体代码太长,已经上传到Github:https://github.com/xiaoDragon/-2018-mathematical-modeling-competition-Question-B

05-02 18:47