结对第二次作业

一、结队成员:

031502541 张昭锡
031502512 黄世辉


二、Github链接:

address


三、数据分析:

数据地址:address

数据生成程序主要分成两个部分:先是初始化各个学生的信息以及部门的信息并保存在类对象里,接着是输出到文件。信息的生成主要是通过随机数结合枚举来实现时间段以及兴趣标签的生成,通过容器vextor的存入枚举值并随机化枚举值在容器中的位置来避免重复数据的产生;然后就是控制输出的格式,但是这里没有使用JSON库输出。

在数据考虑方面主要考虑的是时间段和部门意愿。时间段数量方面根据学生在工作日的空闲时间较少周末较多,所以控制工作日的空闲时间上限为3个,周末的上限为5个并且让周末必定能让出一个空闲时间。在时间段范围,考虑作息时间控制在8:00-22:00。由于之前考虑过算法要尽可能让部门能够收到人因此我们希望能够学生部门志愿能够比较均匀覆盖所有的部门,通过将系统时间作为种子,发现生成的数据中,每个部门被学生选中的次数都相差不是特别大,这样达到了我们预期的比较均匀分布的状况。


四、思路及实现方式:

数据建模:用类来实现,模拟学生和部门的各项信息。
匹配算法是基于稳定婚姻算法并稍加修改实现的。在本次作业中要考虑的指标相对较多,经过商量我们决定对一句学生的信息与部门相比较后给出一个分值,然后根据分值来为学生和部门之间进行分配,并且侧重保证学生能够加入自己意愿的部门。

分值规划:

志愿优先,志愿占比40%,根据志愿的优先级依次递减5分

兴趣标签占比30%,每次与志愿部门的标签相同得6分最高得30分

时间优先占比30%,以半小时为单位时间段,每一个时间段单位重合得6分,最高得30分

算法主要考虑尽量让学生能加入自己希望加入的部门,同时部门也尽可能能够收到学生。因此志愿的占比是最大一部分,就是希望学生能够加入自己最想要的部门。当然志愿的占比不能过大刚开始我们设置了50%的占比,发现被部门收入的学生都是第一志愿就是该部门,这样就导致了兴趣标签和时间段的作用不大,所以后来再调整了各个部分的占比。


五、代码规范:

我们代码规范遵循的是张栋老师在大一的时候给我们的一份代码规范要求。主要是在注释、函数名(采用驼峰式)、和程序板式上的统一


六、结果评估:

在生成数据方面我们生成了一个学生部门选择较为平均的一个数据。由图可以看出每个部门被学生选择的次数差别都不大。这样也尽可能保证每一个学生都能加入自己选择的部门,同时也尽可能保证部门的招收的人数能够达到自己的要求。从部门匹配结果来看,被录取的学生大部分都是第一志愿进入的,只有少部分是其他志愿进的,这样就确保了学生尽可能能够加入社团,同时匹配的结果显示每一个部门都能收满,在我们看来这是一个比较好的结果,选择双方都获得了自己想要的。


七、心得:

这次结队是我第一次尝试结队编程,然后又卡在国庆放假,所以肯定无法做到与队友面对面,身处同地的敲代码。在开始编程前进行了好几次的QQ电话,共同协商了这个作业的一些细节部分,编码过程中也因为一些格式的不统一造成了一些小麻烦。这部分确实在编程之前得做好统一,不然后面的修改做的真是累。总而言之结队编程让我感到了紧迫感和交流的重要性,总是担心自己做的部分不够好,怕耽误了队友的工作。队友昭锡在这次结队作业中承担了较重的任务匹配算法主要是他来构造,真心感谢他,但也为自己的不足感到担心,所以希望自己能够加强算法的能力吧。

posted @ 2017-10-09 20:49  hsh1234  阅读(169)  评论(1编辑  收藏  举报