结对作业——第二次作业

时间:2022-02-08 08:53:57

本次作业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"
]
}