注:本次成绩排行榜是针对结对项目二的点评分数
作业要求
http://www.cnblogs.com/easteast/p/7604534.html
评分细则
(1)有贴生成得最“好”的数据链接(5'),并详细解释了"数据生成"程序的原理与所考虑的因素。(10')
(2)数据建模及匹配程序的思路及实现方式方面,给分点主要在几个方面:是否有清晰明了的框架图或结构图(10’),算法的理论基础或源自的相似问题,对原始算法做出的改进等(10'),建模时考虑了哪些因素,是如何把这些因素综合进算法的(10')。
(3)代码规范方面只要给出结对时采用的代码规范,比如变量与方法的命名,接口约定等均可得分(5')
(4)结果评估方面,主要从三方面评分:是否提出了合理的评价结果的方式,比如从学生满意度,社团满意度等多重指标都可(8'),是否从得到的结果预测与评估算法的局限性(6’),是否针对不同输入数据的场景进行了实验,观察算法的稳定性与通用性(6')。
(5)已经尝试过结对编码,你一定很多话要说。请发表结对感受,以及两个人对彼此结对中的闪光点或建议的分享。(10‘)
作业情况总结
本次结对项目是所有个人作业里整体质量最差的一次,满分100分的情况下整体平均分只有48分。小于60分的同学占整体的2/3,唯一一个上80分的同学是陈翔同学。综合大家在博客里的抱怨来看,本次作业没有完成好主要有几个原因:(1)结对作业的日期放在了国庆假期,但很多同学很早就制定好了出行计划,没办法与小伙伴结对编程。许多组作业开始的时间很晚,所以质量不佳。这个助教也与栋哥商量过,明年会尽量避免这种情况。(2)许多同学一开始不知道作业采用的JSON格式是一种通用数据格式,于是自己编写了Parser,花了很多无用功;(3)大部分同学在编程方面花费了许多时间,但在题意的理解上却没有下功夫。这个题目并不是一个板上钉钉的唯一解问题,而是一个开放性的问题。它的本意就是希望大家在综合考虑现实世界的情况下,用数据生成程序生成一些与现实世界分布相近的数据。举个栗子,现实世界中不同部门热度不同,所以会大概率出现80%的学生选择20%的部门的情况,这是在数据生成部分应当考虑的。在生成模拟现实世界的数据后,同学们再设计一套匹配的算法去优化一些参数,这些参数可以是部门的满意度,可以是学生的满意度,也可以它们的加权和。因为存在着学生志愿与部门渴求的矛盾性,匹配程序里面一定会有一些权衡,这也是我们希望同学们重点去阐述与在博客中描述的部分:如何处理这些需要权衡之处?怎样的优化目标是好?为什么说这样的优化目标就好,有数据佐证吗?希望同学们可以从这里得到一些新的启发,对这个问题有一次全新的认识。
本次结对项目大部分同学都是用部门挑选人的方式来遍历挑选,挑选主要参考因素权重计算的分值。对于这样做的小组我有一个统一的问题要问:这样的算法是稳定的么?是不是先挑选人的部门更有利呢?这样做的小组可以思考一下。有一部分小组采用的是稳定婚姻算法的改良版来完成作业,从最终评估的结果来看效果并不理想。第1组的同学采用了网络最大流最小流的方法来完成作业,算法思路很有意思,可惜程序运行不出来结果,有兴趣的老师或同学可以点击下方小组链接查看。
本次作业也无疑对测试提出了很大的挑战:开放性的问题也就意味着我们不能用传统的标准答案来衡量大家匹配算法的好坏。而实际上,我们最终采用的是群体决策结果为评价标准的做法。选择一份对现实世界建模做得较好的输入文件,收集所有小组程序运行结束后的输出文件,这样就得到了每位同学对于每个部门招到哪些学生的期望。将所有同学的结果合并为一份结果,按照出现次数从高到低排序,就得到了小组们群体决策下每个部门录取同学的优先级。再然后,利用理想录取优先级表对各个小组的实际匹配结果进行打分,打分的具体公式受信息搜索领域MRR(Mean Reciprocal Rank)的启发,用如下公式表示小组在部门\(i\)的匹配得分:
\[score_{ij} = c / rank_{term_{ij}} ( j =1,2,..n) \]
其中\(term_{ij}\)指小组匹配结果中第\(i\)个部门录取的第\(j\)个同学,\(rank_{term_{ij}}\)指该同学在理想优先级表中所处的位置,\(c\)为常数。
这个公式显式的意义是:如果大家都觉得同学A应该被部门B录取(\(rank_{A}\)很低,因为优先级很高,靠前),小组匹配的结果中部门B确实录取了同学A,那么匹配程序的得分应当高些;如果大家都觉得同学A不应该被部门C录取(\(rank_{A}\)很高,因为优先级很低,靠后),小组匹配的结果中部门C却录取了同学A,那么匹配程序的得分应当低些。
本次项目测试选择的是陈翔同学设计的输入文件(需要下载验证的同学下载后更改后缀为txt即可),在此也强烈推荐他的博客,博客的结构、匹配的方法和建模的思路都非常值得大家学习。当然也有不少同学在本次项目测试中得到了低分甚至0分,助教复核过了所有程序,列出各个组出错的原因如下:
分组 | 出错原因 |
---|---|
1 | 死循环,没有错误信息 |
2 | Json格式不对 |
4 | 所有都是unlucky boy |
5 | 没有Github项目地址 |
8 | 没有输出文件 |
9 | java.lang.UnsupportedClassVersionError: main/Main : Unsupported major.minor version 52.0 |
11 | 没有输出文件 |
19 | 所有都是unlucky boy |
25 | 没有test.exe |
27 | 所有都是unlucky boy |
28 | 项目崩溃,停止运行 |
29 | 运行崩溃 |
31 | 输出的是空白,没有实质内容 |
32 | 崩溃退出 |
33 | 无可执行文件 |
得分明细
分组 | 学号 | 12.1 | 12.2 | 12.3 | 12.4 | 12.5 | 12.6 | 12.7 | 总分 |
---|---|---|---|---|---|---|---|---|---|
1 | 500 | 10 | 18 | 5 | 8 | 5 | 0 | 0 | 46 |
1 | 908 | 10 | 18 | 5 | 8 | 5 | 0 | 10 | 36 |
2 | 102 | 10 | 18 | 3 | 5 | 6 | 3 | 0 | 45 |
2 | 409 | 10 | 18 | 3 | 5 | 6 | 3 | 0 | 45 |
3 | 118 | 6 | 8 | 1 | 3 | 2 | 0 | 0 | 20 |
3 | 509 | 6 | 8 | 0 | 1 | 4 | 0 | 5 | 14 |
4 | 106 | 11 | 20 | 5 | 12 | 8 | 5 | 0 | 61 |
4 | 634 | 6 | 15 | 5 | 0 | 5 | 5 | 0 | 36 |
5 | 433 | 0 | 10 | 4 | 0 | 10 | 0 | 0 | 24 |
5 | 109 | 0 | 4 | 0 | 0 | 4 | 0 | 0 | 8 |
6 | 308 | 15 | 25 | 5 | 12 | 10 | 5 | 0 | 72 |
6 | 113 | 15 | 18 | 5 | 10 | 10 | 5 | 0 | 63 |
7 | 142 | 15 | 22 | 4 | 10 | 8 | 7 | 0 | 66 |
7 | 216 | 15 | 21 | 4 | 10 | 8 | 7 | 0 | 65 |
8 | 209 | 15 | 26 | 5 | 20 | 10 | 5 | 0 | 81 |
8 | 316 | 15 | 22 | 5 | 16 | 10 | 5 | 0 | 73 |
9 | 245 | 12 | 23 | 5 | 10 | 6 | 0 | 0 | 56 |
9 | 210 | 10 | 18 | 1 | 12 | 5 | 0 | 0 | 46 |
10 | 212 | 9 | 22 | 2 | 10 | 6 | 20 | 0 | 69 |
10 | 240 | 9 | 17 | 2 | 10 | 7 | 20 | 0 | 65 |
11 | 220 | 9 | 10 | 5 | 5 | 2 | 0 | 0 | 31 |
11 | 344 | 9 | 10 | 5 | 5 | 2 | 0 | 0 | 31 |
12 | 232 | 8 | 22 | 4 | 8 | 7 | 13 | 0 | 62 |
13 | 243 | 12 | 15 | 5 | 11 | 6 | 0 | 5 | 44 |
13 | 642 | 12 | 14 | 5 | 11 | 6 | 0 | 5 | 43 |
14 | 306 | 0 | 0 | 0 | 0 | 0 | 14 | 0 | 14 |
14 | 314 | 0 | 0 | 0 | 0 | 0 | 14 | 0 | 14 |
15 | 339 | 8 | 12 | 2 | 3 | 4 | 16 | 0 | 45 |
15 | 309 | 7 | 12 | 0 | 3 | 4 | 16 | 0 | 42 |
16 | 310 | 9 | 17 | 5 | 6 | 7 | 13 | 0 | 57 |
16 | 124 | 9 | 17 | 5 | 6 | 7 | 13 | 10 | 47 |
17 | 312 | 12 | 18 | 2 | 10 | 8 | 10 | 0 | 60 |
17 | 340 | 12 | 10 | 2 | 0 | 8 | 10 | 0 | 42 |
18 | 315 | 13 | 20 | 5 | 12 | 5 | 11 | 0 | 66 |
18 | 332 | 13 | 20 | 5 | 12 | 5 | 11 | 30 | 36 |
19 | 324 | 14 | 25 | 5 | 5 | 6 | 5 | 0 | 60 |
19 | 411 | 14 | 25 | 5 | 5 | 6 | 5 | 0 | 60 |
20 | 328 | 4 | 18 | 2 | 0 | 4 | 12 | 0 | 40 |
20 | 337 | 0 | 15 | 2 | 2 | 3 | 12 | 0 | 34 |
21 | 331 | 7 | 17 | 3 | 8 | 8 | 11 | 0 | 54 |
21 | 430 | 7 | 13 | 3 | 8 | 8 | 11 | 0 | 50 |
22 | 333 | 9 | 22 | 5 | 10 | 2 | 13 | 0 | 61 |
23 | 517 | 15 | 18 | 5 | 10 | 4 | 11 | 0 | 63 |
23 | 336 | 15 | 12 | 5 | 10 | 4 | 11 | 0 | 57 |
24 | 427 | 6 | 18 | 4 | 1 | 8 | 14 | 0 | 51 |
24 | 341 | 6 | 12 | 4 | 1 | 5 | 14 | 15 | 27 |
25 | 404 | 8 | 21 | 5 | 16 | 8 | 0 | 0 | 58 |
25 | 443 | 8 | 21 | 5 | 16 | 8 | 0 | 0 | 58 |
26 | 412 | 8 | 9 | 5 | 0 | 8 | 0 | 0 | 30 |
26 | 414 | 8 | 9 | 5 | 0 | 8 | 0 | 0 | 30 |
27 | 424 | 13 | 20 | 5 | 12 | 6 | 5 | 0 | 61 |
27 | 513 | 13 | 20 | 5 | 12 | 6 | 5 | 10 | 51 |
28 | 442 | 15 | 25 | 5 | 17 | 10 | 0 | 0 | 72 |
28 | 522 | 15 | 25 | 5 | 17 | 10 | 0 | 0 | 72 |
29 | 506 | 13 | 20 | 5 | 10 | 6 | 0 | 0 | 54 |
29 | 529 | 8 | 12 | 4 | 3 | 3 | 0 | 0 | 30 |
30 | 541 | 12 | 22 | 5 | 14 | 10 | 11 | 0 | 74 |
30 | 512 | 10 | 14 | 5 | 6 | 5 | 11 | 0 | 51 |
31 | 641 | 10 | 10 | 5 | 3 | 4 | 0 | 0 | 32 |
31 | 513 | 6 | 10 | 5 | 3 | 4 | 0 | 0 | 28 |
32 | 537 | 12 | 20 | 5 | 0 | 9 | 0 | 5 | 41 |
32 | 518 | 10 | 20 | 5 | 0 | 9 | 0 | 5 | 39 |
33 | 533 | 10 | 12 | 5 | 0 | 7 | 0 | 0 | 34 |
33 | 538 | 10 | 12 | 5 | 0 | 7 | 0 | 0 | 34 |
34 | 610 | 11 | 16 | 5 | 6 | 4 | 20 | 0 | 62 |
34 | 609 | 8 | 12 | 5 | 6 | 3 | 20 | 0 | 54 |
35 | 614 | 10 | 19 | 5 | 9 | 10 | 10 | 0 | 63 |
35 | 627 | 10 | 17 | 5 | 9 | 8 | 10 | 0 | 59 |
36 | 626 | 12 | 18 | 4 | 7 | 8 | 18 | 0 | 67 |
36 | 643 | 12 | 18 | 4 | 6 | 8 | 18 | 0 | 66 |
37 | 631 | 10 | 18 | 5 | 8 | 7 | 11 | 0 | 59 |
37 | 629 | 10 | 14 | 5 | 8 | 7 | 11 | 0 | 55 |
38 | 630 | 12 | 15 | 5 | 6 | 6 | 11 | 0 | 55 |
38 | 644 | 12 | 15 | 5 | 6 | 6 | 11 | 0 | 55 |
无 | 125 | 0 | 0 |
注:各项对应内容:
- 12.1:好的数据与生成原理(15')
- 12.2:数据建模匹配程序思路与实现(30')
- 12.3:代码规范(5')
- 12.4:结果评估(20')
- 12.5:结对感受(10')
- 12.6:项目测试得分(20')
- 12.7:扣分,这里主要是指因为博文的高度重复而导致的扣分,以先发博客的人为原创作者为准。