中国大学生数学建模竞赛,目前已成为全国高校规模最大的基础性学科竞赛,也是世界上规模最大的数学建模竞赛。      ——百度百科

  在每年的9月份会举行比赛,放出题目。这么高大上的比赛,本辣鸡抱着试一下的心态参与到其中。

  这个比赛在我们学校持续的周期还是挺长的,从未放假的7月份开始就要培训课程什么的,但是我小学期安排了STC的实验,而且明确要求不能请假,所以所有的培训课程都没有参加。咨询过老师后,我知道只要参与学校的模拟赛就有机会参与到最后的比赛,正巧,模拟赛是在暑假举行的,一共三次模拟,还有一个最终的仿真模拟。我和徐倩就尝试着做了第一次模拟比赛,提交了上去。然后就有了机会去参加下面的模拟。

  但是群里要求每个队伍都要是3个人,我们只有两个,需要找一个队友。这个我反正是不怎么着急,倒是徐倩催过我几次,尝试找了一下,没找到。日子一天天过着,这天有一位同学亲自来找我问我是否缺队友,她因为自己的队友士气不高弃他们而去,来到了我们这里,于是我们的队伍齐了,她叫袁欢,我们是一个社团的。在加入之前她问了我一个问题:你的另一个队友是女生吗?最后我们三个组合成一个队伍了。然后放假了,袁欢回家,徐倩去了三下乡队伍(两周),我去了中科大(一周)。连面基都没有,就这样放假了。

  我从中科大回来后几天,第二次模拟差不多开始了,那时候正好是徐倩的三下乡要结束的时候。我们就开始了做这次的题目,选了一个对数据处理要求较高的地震预测。接下来的过程也很明显,我们不行,沟通不畅,技能掌握较差,草草做了这次的题,几乎都是袁欢自己一个人做的吧,但是我也做了不少。然后就是联系不太上徐倩,原来是那两天她一直在车上,三下乡会学校,学校回家,模拟结束在她回家的途中,就这样,第二次模拟结束了。结束后,徐倩说退队了,没有理由,袁欢说我们什么事都不跟她说,她也走了,去找了她老队友,我又成了孤家寡人。不过,没什么事,本来就是抱着试一下的心态来的,我的期望本就没有那么高,就这样解散了。

  解散以后,还像大一暑假在寝室里一样,刷剧,上次看完了权力的游戏,这次看完了行尸走肉,当然,其中还穿插着学习游泳、学习知识的过程。浑浑噩噩吧,跟我预想的暑假是不一样的。然后在8月20号左右,突然有一个队伍问了是否还有散人没组队,他们联系不上了另一个队友了,然后我就去了。于是倪卓颖、候彦卉、张虎威又组了一个队伍。第三次模拟被我水过去了,最终模拟之前有一个答辩,我们见了一面,就这样,我们等着最后一次的模拟的到来。到了以后,我们一起做了一天的题,后面两天我就回家了。这一天我么将解题思路定了下来,选的是船调度的问题,用程序强行模拟,结果是能做出来的,虽然过程不太好看,但是有了解题思路。接下来的事情就是他俩一起处理的,我回家。他俩很棒,处理的很好,最后模拟也按时提交了。答辩什么的我没去,都是她俩完成的。

  下面就是开学了,最后的国赛报名。原来,只要坚持到最后,所有的队伍都可以报名,并没有筛掉队伍,队伍数目从130+到80+,纯粹是队伍不想参加而已,根据老师的指示,我们成功报名参赛。并在9月13日到9月16日规定的时间内去完成比赛。重头戏也就上来了。

  比赛开始了,当天晚上,我们三个人在综合楼302一起找资料,分析题目等等事情,最终确定出选题,最后选的是B题,RGV小车的智能调度。我理解的这道题目是要CNC仪器工作的时间够长,等待时间越少越好,我是这么想的,既然小车有自己的运动方式,CNC也有自己的工作状态选择,那么也就是说只要搞清楚两者之间的联系,然后在整个8小时内进行合理调度,防止CNC需求的撞车就可以达到我认为的目的,是的,我的想法很简单,自己设计出一套CNC和RGV一起运动的状态,一直运行就行。然后,去网上搜一下车间、小车之类的论文,得到的结果都差不多是使用遗传算法去求解、利用模拟退火的方法找到全局最优值,按照这个最优值去运行流水线等。

  卧槽,这是什么?遗传算法、模拟退火?之前有过耳闻,但是完全没有尝试过,而且百度了知识点以后,基础知识就够喝一壶的,三天时间内哪有那么多时间,而且我觉得这个算法并不适合B题的场景,怎么套入这个算法也是一件麻烦的事情,卧槽,这可怎么办,凉了啊。到了14日的上午10点,我决定不使用什么遗传和退火了,根本做不出来,然后按照自己的思路进行模拟,将机器流水线的运行情况模拟出来得到数据填入到表格中。

  强行模拟的实现我使用了优先队列这种数据结构,然后在模拟的过程中我确定一种选取需求的方法,一个需求直接去需求的位置,多个需求的话,将所有需求进行排队,离得比较近的先访问,以秒为时间进行递增,这样去模拟,虽然感觉没什么用,但是也没有其他的办法了。强行做了一遍,下面是我的代码

//365

#include <iostream>
#include<queue>
#include<cmath>
#include <fstream>
using namespace std;const int RGV_1 = 20;            //rgv移动需要的时间
const int RGV_2 = 33;
const int RGV_3 = 46;
const int CNC_WORK = 560;       //cnc加工完成的时间
const int RGV_WORK_JI = 28;     //奇数cnc上下料
const int RGV_WORK_OU = 31;     //偶数cnc上下料
const int clean = 25;            //清洗时间
int wuliao_bianhao = 9;struct cnc{int bianhao_cnc;            //cnc仪器的编号int bianhao_wuliao;         //物料编号int time_begin;             //开始时间int time_end;               //结束时间int distan;                 //距离grv的距离bool xuqiu;                 //需求信号bool wuliao;                //是否有物料void init_cnc(int i){       //初始化bianhao_cnc = i;bianhao_wuliao = 0;time_begin = 0;time_end = 0;distan = 0;xuqiu = true;wuliao = false;}friend bool operator< (cnc c1,cnc c2){if(c2.distan < c1.distan) return true;else if(c1.distan == c2.distan && c2.bianhao_cnc < c1.bianhao_cnc) return true;return false;}
};struct grv{int weizhi;                 //rgv的位置bool work;                  //上下料bool clea;                  //清洗信号bool wait;                  //等待信号void init_grv(){            //初始化weizhi = 1;work = false;wait = true;clea = false;}
};void Init(cnc c[],grv g){       //初始上料的状态c[1].bianhao_wuliao = 1;c[1].time_begin = 1;c[1].time_end = 59*4+20*3;c[1].distan = 3;c[1].xuqiu = false;c[1].wuliao = true;c[2].bianhao_wuliao = 2;c[2].time_begin = 29;c[2].time_end = 59*4+20*3;c[2].distan = 3;c[2].xuqiu = false;c[2].wuliao = true;c[3].bianhao_wuliao = 3;c[3].time_begin = 80;c[3].time_end = 59*4+20*3;c[3].distan = 2;c[3].xuqiu = false;c[3].wuliao = true;c[4].bianhao_wuliao = 4;c[4].time_begin = 80+28;c[4].time_end = 59*4+20*3;c[4].distan = 2;c[4].xuqiu = false;c[4].wuliao = true;c[5].bianhao_wuliao = 5;c[5].time_begin = 128+31;c[5].time_end = 59*4+20*3;c[5].distan = 1;c[5].xuqiu = false;c[5].wuliao = true;c[6].bianhao_wuliao = 6;c[6].time_begin = 128+28+31;c[6].time_end = 59*4+20*3;c[6].distan = 1;c[6].xuqiu = false;c[6].wuliao = true;c[7].bianhao_wuliao = 7;c[7].time_begin = 128+48+31+31;c[7].time_end = 59*4+20*3;c[7].distan = 0;c[7].xuqiu = false;c[7].wuliao = true;c[8].bianhao_wuliao = 8;c[8].time_begin = 128+48+31+28+31;c[8].time_end = 59*4+20*3;c[8].distan = 0;c[8].xuqiu = false;c[8].wuliao = true;g.clea = false;g.wait = false;g.weizhi = 4;g.work = false;
}int time_daolu(cnc c,grv &g){                            //计算出上下料需求需要的时间if(c.distan == 0){g.weizhi = (c.bianhao_cnc+1) >> 1;return 0;}else if(c.distan == 1){g.weizhi = (c.bianhao_cnc+1) >> 1;return RGV_1;}else if(c.distan == 2){g.weizhi = (c.bianhao_cnc+1) >> 1;return RGV_2;}else{g.weizhi = (c.bianhao_cnc+1) >> 1;return RGV_3;}
}
int time_fangxiang(cnc c){if(c.bianhao_cnc%2 == 1) return RGV_WORK_JI;return RGV_WORK_OU;
}
void gengxin_time(cnc s,cnc c[],grv &g, int dl,int x){         //更新时间    x总时间  time没加清洗时间for(int i = 1; i < 9; i++){if(s.bianhao_cnc == c[i].bianhao_cnc){c[i].bianhao_wuliao = wuliao_bianhao;wuliao_bianhao++;c[i].time_begin = s.time_end+dl;c[i].time_end = x;c[i].distan = 0;c[i].xuqiu = false;c[i].wuliao = true;}else{c[i].time_end = x;}}g.clea = false;
}void gengxin_dis(cnc c[],grv &g){                                //更新cns距grv的距离for(int i = 1; i < 9; i++){c[i].distan = abs(((i+1)>>1) - g.weizhi);}
}void gengxin_xuqiu(cnc c[]){for(int i = 1; i < 9; i++){c[i].xuqiu = false;}
}int main()
{ofstream outfile;outfile.open("结果.txt");int count = 1;cnc c[9];grv g;for(int i = 1; i < 9; i++){c[i].init_cnc(i);}g.init_grv();Init(c,g);count += (27+32)*4+18*3;priority_queue<cnc>cn;while(count <= 28800){for(int i = 1; i < 9; i++){int xy = (i%2==0)?RGV_WORK_OU:RGV_WORK_JI;if(!c[i].xuqiu && ((c[i].time_end-c[i].time_begin) >= (CNC_WORK+xy))){c[i].xuqiu = true;cn.push(c[i]);}}if(!cn.empty()){cnc stem = cn.top();outfile << stem.bianhao_wuliao << " " << stem.bianhao_cnc << " " << stem.time_begin << " ";cn.pop();int dl = time_daolu(stem,g);int fx = time_fangxiang(stem);outfile << stem.time_end+dl << endl;count += dl+fx+clean;gengxin_time(stem,c,g,dl,count);gengxin_dis(c,g);while(!cn.empty()) cn.pop();gengxin_xuqiu(c);}else{count++;for(int i = 1; i < 9; i++){c[i].time_end++;}}}cout << wuliao_bianhao-1;outfile.close();return 0;
}

  紧赶慢赶,这个不算是很复杂的代码算是完成了,而且根据题目难度的增加,调整相应的细节可以得出一些数据,例如两个队列啊,价格随机故障啊这样的,数据可以弄出来了,填进去就ok了,即使这个数据是没用的,也是我们自己做出来的。

  其中还有一个事,写代码这个事情真的不简单啊。就这个这么简单的代码,当然包括他的一点升级版,花了我两天整去写,最后一晚,就为了加一个随机数,折腾了一夜,一把老骨头也是拼了,第二天早中晚都没吃饭,直到提交上去才松口气。

  紧张刺激。努力写代码,努力学习,什么都不会的自己真的太菜了。

转载于:https://www.cnblogs.com/huhusw/p/9674150.html

记一次紧(you)张(dian)刺(wu)激(liao)的数学建模相关推荐

  1. 上海交大张拳石:神经网络的可解释性,从经验主义到数学建模

    作者 | 张拳石 来源 | 转载自知乎Qs.Zhang张拳石 本来想把题目取为"从炼丹到化学",但是这样的题目太言过其实,远不是近期可以做到的,学术研究需要严谨.但是,寻找适当的数 ...

  2. 极客战记攻略java第一张_极客战记[森林]:平常的一天 - 通关代码及讲解

    本栏目为极客战记关卡通关讲解栏目,将会从地牢-森林-沙漠-山峰-冰川,按用户的正常过关顺序,挑出难度较大或有教学意义的关卡进行讲解,长期更新. 森林 地牢里的关卡主要是偏向锻炼用户的基本语法结构和计算 ...

  3. 深入理解张正友相机标定法:数学理论详细推导

    最近在项目中需要在激光雷达(Lidar)和相机(Camera)之间进行标定,即需要标定出相机内参和外参,使用的标定方法是张正友标定法,这里给出其数学理论推导过程. 论文原文:<A Flexibl ...

  4. 华裔数学家张益唐:逆境中的数学人生

    中国侨网11月26日电 美国<侨报>日前采访了华裔数学家张益唐夫妇.张益唐儒雅平和,标准的学者形象,一直安静地独自坐在休息区沉思.如果不是夫人孙女士引见介绍,没入休息区零零散散游客中的张益 ...

  5. 张益唐喊你参加阿里数学大赛:奖金400多万,今年还有文科开放题

    丰色 发自 凹非寺 量子位 | 公众号 QbitAI 3.14国际数学日-- 那个全民都可参与的阿里巴巴全球数学竞赛又来了. 今年,比赛选手有机会与张益唐大师进行直接交流. 因为组委会新增了一道向全社 ...

  6. 21张GIF动图让你秒懂数学原理

    全世界有3.14 % 的人已经关注了 数据与算法之美 数学是很难的科学,但因为它是科学家用数学来解释宇宙的语言,我们无可避免的要学习它.看看下面的这些GIF动图,它们提供了视觉的方式来帮助你理解各种数 ...

  7. 记2019年高教杯全国大学生数学建模竞赛

    目录 个人背景 主要人物 培训前相关 面试阶段 培训前的水群阶段 基础培训阶段 第一天 第二天&&第三天 第四天~第十天 放假阶段 真题模拟阶段 正赛阶段 赛后 收获 关于建模的一些建 ...

  8. 记第一次参加五一数学建模竞赛

    这个五一总算是做了一件有意义的事情,没有再次在睡懒觉,刷手机,玩电脑中度过.什么都不说了,先给自己竖起大拇指,然后再双击666,最后狂刷一波赞.嘿嘿,是不是太不要脸了吧.好了,不自夸了,怕被打,我们来 ...

  9. 记第一次(失败的)数学建模校赛,脚踏实地

    记录第一次(失败的)数学建模校赛,脚踏实地.现在数学建模还没结束,但我已经可以开始总结自己的失败的教训了,具体的过程不想讲了,失败的教训有:首先,选题不利,在选择自己的题目上,过于快速,只是粗浅地看了 ...

最新文章

  1. python三步实现人脸识别
  2. 27. FormPanel类的defaults属性
  3. rpm包安装apache发布多个虚拟主机
  4. JQuery-UI组件化开发
  5. 转载:谢谢原作者:块设备驱动实战基础篇四 (逐渐成型,加入ioctl通信机制)
  6. c语言吗 程序语言,编程语言为什么从c语言开始,那有没有a语言b语言呢?
  7. TypeError系列之:TypeError: 'tuple' object is not callable.
  8. SQL-33 创建一个actor表,包含如下列信息
  9. XCTF_Web_新手练习区:disabled_button
  10. Windows SDK笔记(三):定制控件消息处理函数
  11. mac搭建mysql环境
  12. Js中Number对象
  13. Java与XML编程之SAX
  14. 15_http响应相关概念
  15. vue2.0 之事件处理器
  16. 单元测试总结反思_语文期中考试总结反思
  17. SAP smartforms打印图片
  18. vsCode 源代码管理插件GitLens使用指南
  19. 麦克风有突突突的杂音
  20. 腾讯:实名举报举报老干妈欺负我这个小可爱

热门文章

  1. MATLAB之自动控制原理(1)
  2. swing版本山寨微信打飞机
  3. Python3.6+Twisted+Scrapy安装
  4. php 个人摄影,展示个人摄影作品的12种方式(ZT)
  5. 在Win10中安装虚拟机:VMware Workstation Player+Ubuntu20.04
  6. python turtle库画画
  7. CTO 说公司的 ES 性能不够好、集群不够稳定!直到我用了这些调优技巧后。。。...
  8. (转)一位计算机牛人的心得,谈到计算机和数学,很实用
  9. 2020-11-30 网络爬虫
  10. 米兔机器人终于拼完了_米兔机器人上手组装如果你不会拼装或拆卸建议收藏