这个作业属于哪个课程 | https://bbs.csdn.net/forums/fzusdn |
---|---|
这个作业要求在哪里 | 2022秋软工实践 第二次结对编程作业 |
这个作业的目标 | 生成符合现实的数据集,实现效益最大的点名算法,加强两人合作 |
学号 | 032002106、051701128 |
重点功能及编程思考
- 数据集生成器
首先我们使用python生成了course矩阵(90×20),其中行表示学生、列表示单次点名;同时为满足“每门课程均有5-8位同学缺席了该学期80%的课,此外每次课程均还有0-3位同学由于各种原因缺席”的要求,我们运用python的随机数生成来记录每位同学的缺勤情况,若缺勤则登记为1,否则登记为0。
其次,为了将学生的绩点和累计缺勤次数作为因素考虑到点名算法中,我们创建student矩阵(90×2),其中行表示学生、第一列表示学生的绩点(范围为1.5-3.9的随机数)、第三列为累计缺勤次数(开始时置为0,若缺勤则不断累加)。
最后在数据集生成的功能中,我们认为重点在于将学生绩点和课程缺勤情况相关联,即构造的课程缺勤情况中,绩点排名前10%的同学和绩点排名后10%的同学有1~2位同学缺席了该学期80%的课;除此之外,我们还将生成的数据集以二进制文件的形式保存在文件夹中,方便点名算法的读取。
- 点名算法
首先,由于第一次点名老师并不知道全体学生的情况,因此第一次点名的方式为全点。经过人工计算,第一次点名的评价标准范围在(5÷90=)5.56%~(11÷90=)12.22%之间,经过测试我们的点名算法第一次评价标准的值为6.67%如下图,符合预期值。
其次在第n次点名(n≥2)中,每次点名前系统要计算每位学生被点名的权重值,权重值由一下几部分组成:
对于公式的解释,若学生上次课点名时缺勤,则下次课点名时这项参数会占40%的比重;若学生累计缺勤次数越多,那么学生被点名的概率越大,这里的累计缺勤次数是指总的缺勤次数÷20,最后这项参数占比54%;学生的绩点分为前10%、后10%以及中间部分80%,前后部分10%被点名的概率会大一些,这部分占比6%。
之后以及所计算出的90位学生的权重值,挑选出权重值最大的11位同学进行点名,再去计算评价标准。经计算和验证,我们的E值稳定在16%~18%区间,符合预期。
最后我们认为这部分的重点功能在于将公式中所给的三种参数归一化,由于三种参数的单位以及所占比例不同,因此需要运用数学的知识对其进行归一化后再进行计算,从而确保答案的准确性。
项目经历
- 工作人员:JC & 丹
- 工位
结对感受
JC:本次我们的代码从数据集的生成再到算法的实现,总共编写的代码超过600行,在只有一点python语言的基础上编写本次作业对于我来说既是挑战也是学习的机会,我对于本次编程作业的感受是有点类似于数学建模,只是数学建模有给我们数据集而本次作业是自己生成,在大量的查询网络上的知识的同时我也进一步提高了自己的自学以及编程能力。
Cyd:本次合作相比上一次合作会好一些,但这次是起到辅助作用,有考虑过用C++来实现,但是商量之后还是采用python更方便。这次是为数不多的算法设计体验,一开始一筹莫展,生成数据集的过程多次推翻idea才敲定,对于一些理想的模型,又觉得不太合理,复杂一些的又实现起来眼高手低,看到了自己的短板所在。模型构建参数设定的过程中进行了反复修改讨论。学习构建参数模型,查询模型和语法知识的过程中,python的语言基础进一步夯实了。
收获事件
学会使用python的随机数生成判断矩阵,并且自己设计公式对问题进行求解,提高了代码能力和解决实际问题的能力。
PSP
PSP | Personal Software Process tags | 预估耗时/分钟 | 实际耗时/分钟 |
---|---|---|---|
Planning | 计划 | 60 | 60 |
Estimate | 估计这个任务需要多少时间 | 60 | 60 |
Development | 开发 | 1600 | 1820 |
Analysis | 需求分析 (包括学习新技术) | 60 | 90 |
Design Spec | 生成设计文档 | 45 | 45 |
Design Review | 设计复审 | 30 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 60 | 60 |
Design | 具体设计 | 150 | 180 |
Coding | 具体编码 | 1000 | 1200 |
Code Review | 代码复审 | 90 | 60 |
Test | 测试(自我测试,修改代码,提交修改 | 90 | 120 |
Reporting | 报告 | 30 | 30 |
Test Report | 测试报告 | - | - |
Size Measurement | 测试报告 | 15 | 15 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 30 |
Total | 合计 | 1720 | 1950 |
学习进度表
第N周 | 新增代码(行) | 累计代码(行) | 本周学习耗时(小时) | 累计学习耗时(小时) | 重要成长 |
---|---|---|---|---|---|
1 | 230 | 230 | 4 | 4 | 熟悉random库的各个方法,构建基本的数据分布模型,调整模型参数 |
2 | 135 | 365 | 3 | 7 | 了解各预测相关算法,对比性能 |
3 | 260 | 625 | 2 | 9 | 验证合理性和稳定性 |
Github仓库地址和commit记录
- Github仓库地址
JC-Ftabf/algorithm - commoit记录