结对作业——第二次作业
本次作业deadline: 2017-10-09 22:00
作业需求
编码实现一个部门与学生的智能匹配的程序。
提供输入包括:
- 20个部门
- 部门编号(唯一确定值),字符;
- 各部门需要学生数的要求的上限,单个,数值,在[10,15]内;
- 各部门的特点标签,多个(两个以上),字符;
- 各部门的常规活动时间段,多个(两个以上),字符。
- 300个学生
- 学生编号(唯一确定值),字符;
- 学生空闲时间段,多个(两个以上),字符;
- 兴趣标签,多个(两个以上),字符(学生的兴趣标签一定是所有部门特点标签其中的一个)
- 每个学生有不多于5个的部门意愿(助教测试时测试数据中部门意愿可能会出现空缺,非空缺的部分一定是部门编号中的一个,并按照优先级从高到底的顺序排序)。
实现一个智能自动分配算法,根据输入信息,输出部门和学生间的匹配信息(一个学生可以确认多个他所申请的部门,一个部门可以分配少于等于其要求的学生数的学生) 及 未被分配到学生的部门 和 未被部门选中的学生。
要求
- 1、构造输入数据的生成程序,实现可定制的输入数据(输入数据是指 input_data.txt)。在博客中举一个样例(贴出关键数据即可),并说明生成数据的所考虑因素。
- 2、需要为智能匹配算法确立几条分配或排序原则,比如 兴趣优先、或活动时间优先、或其他等等,请你们结对讨论确定。
- 3、给出结果分析,分析自己的输出是否达到算法所达到的指标。关于相关指标条件,每个组感受应当不同,请把想法写在博客中。
- 4、代码需要遵循一定的规范,在博客中描述结对团队遵循的代码规范,并截取部分关键代码佐证说明。
- 5、本次结对项目实现使用程序语言不做具体限制,但需要能生成Windows平台的可执行文件。C/C++/C#编译后即可生成,其他语言可以使用打包工具把依赖打包上传,比如 exe4j。但注意,本次没有重测机会,请确保你项目的所有依赖文件都上传到了Github中。为确保没有问题,最好在无相应语言环境的机器上克隆项目并进行测试。
- 6、代码提交在GitHub上,并给GitHub链接。
- 7、两个人发布独立博客,包含上述内容的描述,同时包含结对感受,以及两个人对彼此结对中的闪光点或建议的分享。项目的测试分数两人共享,博客的分数各自独立。博客可以有共享的架构设计图等,但不可雷同,否则视作抄袭。
- 8、助教将收集各组成员的程序,并基于一组特殊数据进行测试(该测试数据遵循下面的输入规范,该数据由助教根据真实场景讨论得出,作业评定时会给出,事先不对外公布)。测试结果基于全部同学的输出,助教将统计各组同学对于各个部门录取相关人员的频率,得出一组部门与成员的录取关系数据(该数据遵循下面的输出规范),并与各组同学的数据作对比,最终评判同学们的测试结果。
测试须知
测试机为Windows环境,所以提交到Github上的项目均需要建立一个名字为BIN
的文件夹,里面必须含有可执行文件(以exe为后缀)与相关的依赖库,请注意以下两点:
- 确保可执行文件的名字命名为
test.exe
。 - 确保输出的文件
output_data.txt
(文件名固定) 与可执行文件在同一目录下,并遵守下述输出格式的约定,生成文件时使用相对路径("./output_data.txt"即可,无需考虑太多)。 - 测试时助教将提供与可执行文件同目录的输入文件
input_data.txt
,其格式满足下述的输入输出格式约定。
一个示例组织目录如下所示:
/ Project(工程名字自行指定即可,放代码即可)
/ 数据生成程序
/ 匹配程序
/ *评估程序(评估程序可有可无,其输入为input_data.txt和output_data.txt,程序用于评估该匹配算法的效果)
/ BIN
/ Lib.dll (exe运行需要的动态链接库文件,可以没有,或者其他依赖文件,也可以是一个文件夹存储,形式自定)
/ test.exe
/ output_data.txt (运行exe后生成的文件)
下面是一个示例:https://github.com/peiqiaoWang/department_student
助教在测试时,将以命令行运行可执行文件的方式进行批量测试。用例:
test.exe
读取当前目录下的input_data.txt,输出对应的结果的output_data.txt
博文规范
1.给出结对成员的学号及姓名。
2.首页给出项目的Github链接。
3.贴出你们生成的一组最“好”的数据(这里的数据特指 input_data.txt,数据给出对应链接即可),并详细说明"数据生成"程序的原理以及你们所考虑的因素。(15')
4.详细说明你们数据建模及匹配程序的思路及实现方式。(30')
5.你们在代码遵循了一定的规范,在博客中描述结对团队遵循的代码规范,并截取部分关键代码佐证说明。(5')
6.结果评估。对于程序的匹配结果,你们是否满意?请对你们程序处理结果进行分析。(20')
7.已经尝试过结对编码,你一定很多话要说。请发表结对感受,以及两个人对彼此结对中的闪光点或建议的分享。(10‘)
注意事项
1.请务必遵循测试标准,交之前一定要反复检查,如非测试程序导致测试失败的,一律不再重测!!!
2.说明:仅就上述内容,实现一个单独的程序模块。不要和之前的原型整合到一个博客中。
3.本次作业满分为100分,其中博客分80分,测试分20分,请按点答题。
输入输出格式约定
输入
json格式
{
"students": [
{
"free_time": [
"Mon.16:00~18:00",
"Mon.12:00~14:00",
"Tues.10:00~12:00",
"Wed.18:00~20:00",
"Fri.20:00~22:00",
"Fri.12:00~14:00",
"Sat.8:00~10:00",
"Sat.18:00~20:00",
"Sat.14:00~16:00",
"Sun.16:00~18:00",
"Sun.14:00~16:00",
"Sun.20:00~22:00"
],
"student_no": "031502001",
"applications_department": [
"D007",
"D010",
"D012",
"D005",
"D013"
],
"tags": [
"reading",
"programming"
]
},
...
],
"departments": [
{
"event_schedules": [
"Sun.8:00~9:00"
],
"member_limit": 14,
"department_no": "D001",
"tags": [
"film",
"English",
"reading",
"music",
"dance",
"basketball",
"chess"
]
},
...
]
}
输出
json
{
"unlucky_student": [
"031502001",
"031502002",
"031502003",
...
],
"admitted": [
{
"member": [
"031502141"
],
"department_no": "D001"
},
...
],
"unlucky_department": [
"D004",
"D005"
]
}