Advertisement

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

阅读量:

2018年B题摘要:这道题涉及较多的前提条件共分为三种典型情况。本次课程中我了解到构建优化模型需要满足三个基本要素即明确目标函数(因变量)、确定控制变量(自变量)以及设定约束条件(本题中每台CNC设备发出指令时刻需满足的关键不等式)。针对优化问题我们采用了调度优化模型来解决相关问题。在解题过程中发现两个核心代码点值得特别指出首先是先到先得规则其次是引入随机变量这一做法在后续比赛中具有重要参考价值因此对此进行了详细总结。

第一种情况
当RGV接收一个指令时遵循先进 come, 先 serve策略
先进 come, 先 serve调度算法(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

在2018年B题开课前,初次见到这道题时感觉其题干较为复杂且涉及诸多条件限制,在处理起来显得略显棘手。起初倾向于采用if-else分类讨论的方法进行问题解决。然而,在课堂上老师的引导下我们开始系统地梳理了其中的关键限制条件,并逐步形成了清晰的解题思路。

3.1 一道工序无障碍编程思路:

3.1.2. 上料与清洗操作
纪录 CNC 加工过程,在此期间 CNC 预计完成时间为 上料时间 加上 加工时间;而清洗作业所需时间为 上料时间 加上 清洗时间

第3.1.3节更改 CNC 状态为空闲

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

该工艺的第一阶段为:当 CNC 为空闲状态且 RGV 上没有半成品物料时,则找到距离 RGV 最近的 CNC 并返回其编号;随后将 RGV 移动到该 CNC 处。若 RGV 正在等待,则它也会移动到最近可用的 CNC 处。
针对第一级加工任务(First-Order Processing Task)而言,在完成上下料操作后需执行下一阶段骤。
当 RGV 完成从 CNC 处提取原料后,请立即执行下一级加工任务。
首先评估当前状态:若第一级加工任务(First-Order Processing Task)已进入运行阶段(即 CNC 不处于初始状态),且 RGV 正携带原料至该 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;
    else
    key = 0;
    end
    end

这道题总体上强调了严密的逻辑思维能力作为解题的关键提示之一,在程序设计中应当充分利用if-else结构。在解决这类问题时需要具备耐心和细致的观察力,并对每一个条件进行逐一分析和系统性的讨论。当采用全排列的方法进行暴力求解时,请通过优化算法来减少计算量和运行时间。随机变量的概念在实际应用中较为复杂,在具体操作过程中需要注意其引入带来的计算挑战。加强与团队成员之间的协作与交流能够带来更多的创新思路

全部评论 (0)

还没有任何评论哟~