2018年全国大学生数学建模B题RGV感想

2018年B题
摘要:本道题题目条件很多,一共三种具体情况。这节课我学习到了优化模型的三大条件:确定优化目标(因变量)、找决策变量(自变量)和约束条件(本题时每台CNC发出指令时刻需满足的不等式)。
目标是优化问题,所以采用优化调度模型。本题主要有两个关键代码点分别是先到先得服务和引入随机变量,特别引入随机变量会在之后的比赛中常用,特此总结。

1.第一种情况
RGV收到一个指令时采用先到先得服务
先来先服务(FCFS)调度箅法
核心代码:

void finish_Time(int *courseNum)//进程的完成时间
{int i=0;if(course[0].arriveTime != 0)//第一个进程的时间{course[0].finishTime=course[0].arriveTime + course[0].serviceTime; }course[0].finishTime=course[0].serviceTime;for(i=1; i<*courseNum; i++){if(course[i-1].finishTime >= course[i].arriveTime) {course[i].finishTime=course[i-1].finishTime + course[i].serviceTime;}else{course[i].finishTime=course[i].arriveTime + course[i].serviceTime;}}
return;
}
void cyclingTime(int *courseNum)//周转时间
{int i=0;for(i=0; i<*courseNum; i++)	{course[i].cyclingTime=course[i].finishTime - course[i].arriveTime;}return;
}

2.第三种情况
通过题目分析“每次故障排除时间介于10~20分钟之间,故障排除后即刻加入作业序列”和“CNC在加工过程中可能发生故障”需引入关于发生故障次数和维修花费时间的随机参数
下面总结常用随机参数调用代码:
3.1 rand(N),rand(M,N):
rand(N)是生成一个符合标准均匀分布的矩阵,其值位于开区间0~1
3.2 randi(IMAX,N),randi(IMAX,M,N)
randi生成1:IMAX或者IMIN:IMAX之间的离散均匀分布的整数矩阵
3.3 randn(N),randn(M,N)
randn(N)是生成一个符合标准正态分布的矩阵,其值位于开区间0~1

3.心得
2018年B题没有上课之前看到这道题感觉题干特别复杂,条件颇多,每一个工序的时间和条件限定都很复杂,感觉用if-else直接分类讨论。这道题上课老师带领我们反复阅读题干,寻找出所有的约束条件。
首先对于题目题干理解,我们先从一道工序无障碍出发。RGV总共分为4种状态:移动、停止等待、上下料和清洗作业。
3.1 一道工序无障碍编程思路:
3.1.1.在RGV和CNC均空闲状态下,找到距离最近的CNC编号
如果CNC空闲,找到距离最近的CNC并返回CNC编号,记录CNC位置以传递给RGV,记录RGV走的步数的绝对值,此时RGV移动到最近的CNC处。

3.1.2.上下料和清洗操作
记录加工CNC,此时 CNC预计完成时间=上下料+工作时间,清洗作业完成时间=上下料+清洗时间

3.1.3更改cnc状态为空闲
3.2两道工序无障碍编程思路:
上课采取的是通过判断CNC的状态,若在工作就等待工作完成,在这个等待时间里对安装了第一道工序刀具的CNC进行排序;若CNC状态为完成,就寻找已完成第二道工序且距离RGV最近或空闲状态的CNC。
该方法使用判断过多,容易出现逻辑错误,所以想将完成第一道工序和第二道工序的CNC的数目与位置进行全排列。即RGV从加工第一道工序的CNC处取到半熟料后,下一操作仅对加工第二道工序CNC进行上下料操作;RGV在清洗作业完成后,下一操作仅对加工第一道工序的CNC进行上下料操作。

3.2.1.在rgv和cnc均空闲状态下,找到距离最近的cnc,并让rgv移动过去

第一道加工;
如果CNC空闲并且RGV上没有半成品物料,就找到距离RGV最近的CNC并返回CNC编号,RGV移动到最近的CNC处.若RGV在等待,RGV也将移动到最近的CNC处
3.2.2.RGV对第一道工序进行上下料操作
3.2.3.RGV在第一道工序的CNC处取物料后,寻找最近的第二道工序CNC.
首先判断如果第一道工序的CNC不是初始状态,且RGV携带了半成品物料。如果第二道工序CNC空闲,找到距离最近的CNC并返回CNC编号

3.3出现故障编程思路
设置三个变量:
1)可能故障时间t1:0到CNC加工完成一个一道工序的物料所需时间之间的随机整数
2)维修时间t2:600到1200之间的随机整数,对应10-20min维修时间
3)故障概率p:从均匀分布(0,1)中随机取一个数小于等于0.01的概率
%百分之一概率生成函数

function [key] = probability()
R=rand(1,1000);
if(R(100)<=0.01)key = 1;
elsekey = 0;
end
end

这道题,总体来说要求逻辑思维严密,提醒了我要善用if-else函数。要对题目阅读有耐心,把每一个条件都列出来好好讨论。在全排列暴力解决问题时,要学会优化,减少运行的难度和时间。对于随机变量的引入需要更多地练习使用。多和队友交流沟通,探讨才能挖掘更多
隐藏条件。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部