• 结对项目第二次作业



    1.结对成员:

    黄浩 031502310

    刘晓 081500124

    2.项目链接:项目地址

    3.生成最“好”的数据链接:input_data.txt

    数据生成原理:

    • 学生信息:

    • 学号增量生成
    • 空闲时间生成:
      - 遍历一周时间,随机选定周几空闲
      - 随机获取学生空闲时间个数,区间[1,3]
      - 字符串随机生成1~3个互斥的空闲时间段区间[8:00,21:00]
      - 如果生成的时间为空,则默认空闲时间为"Sat.19:00~21:00" 这个比较常见的空闲时间
    • 志愿部门申请:
      - 随机获取申请部门个数
      - 随机选定部门(遍历方式随机(正序,逆序,随机区间正序,随机区间逆序))
      - 选择完调用shuffle函数打乱顺序,模拟随机优先级.
      - 如果最后生成的为空,则在部门中随机挑一个
      - 兴趣标签:
      在兴趣标签表里面,随机选取兴趣标签
    • 部门信息:

    • 编号增量生成
    • 限定人数:随机选一个数,区间[10,15]
    • 活动时间生成:
      - 遍历一周时间,随机选定周几活动
      - 随机获取部门活动时间个数,区间[1,3]
      - 对于活动日,字符串随机生成1~3个互斥的活动时间段区间[8:00,21:00]
      - 如果生成的时间为空,则默认活动时间为"Sat.19:00~21:00"
      - 兴趣标签:
      在兴趣标签表里面,随机选取兴趣标签

    考虑因素:

    空闲时间区间,部门的活动时间个数,对于时间的生成、部门申请表的生成尽可能公平

    4.数据建模及匹配程序的思路及实现方式

    数据建模

    • 数据集:
      - 选择变量( 输入数据抽象为类)
      - Department类
      部门编号department_no
      各部门需要学生数的要求的上限member_limit
      各部门的特点标签tags
      各部门的常规活动时间段event_schedules
      部门录取学生成员members
      - Student类
      学生编号student_no
      学生空闲时间段free_time
      兴趣标签tags
      部门意愿applications_department
      未被部门选中的学生finalUnluckyStudent
      未被分配到学生的部门unluckyDepartment
      - Util类
      基本的IO操作和数据处理
    • 目标:输入实现部门与学生智能自动匹配
    • 算法——匹配程序的思路:

    需要为智能匹配算法确立分配原则,综合考虑兴趣、部门意愿优先级、和时间冲突情况。通过匹配值count的计算来排序得到部门录取学生的序列。
    匹配公式:

    //如果超过1/2活动时间未能到达,则淘汰(返回0)。
    if(conflict>(timeSize*1/2)) { 
        return 0;
    }
    count=3*(5-choosed)+4*(hobbies)+3*(5-priority)+10*(timeSize-conflict+1);//考虑的因素:已加入部门的个数+兴趣匹配+优先级匹配+时间冲突个数
    
    • 实现方式:
      (1)每一个部门都有有一个候选队列,对学生队列遍历,将有意向的学生加入部门的候选队列
      (2)对候选队列中的学生计算匹配值count,进行排序
      (3)由各部门需要学生数的要求的上限member_limit选出成为部门录取学生成员members队列的学生,被录取学生choosed标志位置1,空闲时间扣除活动时间,并将没有入选的学生加入unluncky集合
      (4)遍历所有部门后,选出未被分配到学生的部门unluckyDepartment。再遍历unluncky集合将其中未被部门选中的学生挑出(依据被部门选中标志位choosed==0)加入 finalUnluckyStudent队列

    核心代码

    DSSystem.java
    Util.java

    5.你们在代码遵循了一定的规范,在博客中描述结对团队遵循的代码规范,并截取部分关键代码佐证说明。

    之前一直没有一定的代码规范,队友说java有语言规范,才开始学着写注释、类名首字母大写,方法、变量用小驼峰式书写格式。

    public class Student
    private int choosed;
    private ArrayList<FreeTime>freeTimeByTimeFormat;
    ArrayList<String> eventsSchedules =  departmentTimeGenerator();
    //随机生成限定人数
    

    6.结果评估。对于程序的匹配结果,你们是否满意?请对你们程序处理结果进行分析。

    比较满意:
    1.未匹配人数:192人,占比64%;
    2.未匹配部门:1个,占比5%;
    3.部门最多招纳人数:14人;
    4.部门平均招纳人数:6.3人。

    7.总结

    结对感受

    我们应该都是第一次尝试结对编程的方式,国庆长假过了5天就约着返校进行结对作业的交流(数计的学生永不低头==)。。。在网络交流中,因为要使用jackson包进行json处理所以使用java语言,开始了java语言的学习,还有一些工具的学习使用,感谢队友,带着我入门加上手eclipse.在交流过程中,发现一些思维的不同之处,在匹配程序思路上,我就是板板的按照题目,在时间优先还是兴趣优先之间犹豫,而队友比较有想法,用综合考虑的匹配值来计算。还有和队友结对的过程中,我也学习到开发的流程,先建框架、在逐步细化。在交流方式方面,我感觉见面交流的效率比较高,也要谢队友结对之恩,小伙伴很nice,我问的一些问题,他都耐心+详细的讲解了,而且还通俗易懂,也对我提的一些傻问题作出解答。感觉这次作业收获很多。

  • 相关阅读:
    十六、Redis与MySQL数据双写一致性 —— Canal Demo
    十三、redis分布式锁:缓存续命
    十二、redis分布式锁:单机和多机及案例
    十七、缓存双写一致性之更新策略探讨
    十四、Redis的缓存过期淘汰策略
    自定义类型转换器
    [译]. NET 6 新增API 上
    EF 6 新特性三
    EF 6 新特性二
    [译]. NET 6 新增API 下
  • 原文地址:https://www.cnblogs.com/xiao2017/p/7642877.html
Copyright © 2020-2023  润新知