第二次结对编程——毕设导师智能分配

本文介绍了一种基于绩点和志愿优先原则的毕设导师智能分配算法,并探讨了使用费用流算法提高匹配度的可能性。

第二次结对编程——毕设导师分配

张建明黄伟炜

问题描述

编码实现一个毕设导师的智能匹配的程序。提供输入包括:30个老师(包含带学生数的要求的上限,单个数值,在[0,8]内),100个学生(包含绩点信息),每个学生有5个导师志愿(志愿的导师可以重复但不能空缺)。实现一个智能自动分配算法,根据输入信息,输出导师和学生间的匹配信息(一个学生只能有一个确认导师,一个导师可以带少于等于其要求的学生数的学生) 及 未被分配到学生的导师 和 未被导师选中的学生。  

算法设计

我们结对讨论后,决定选择按照绩点优先及志愿优先的原则进行导师分配。绩点高的学生优先分配导师。并且按照这个学生的志愿进行顺序匹配。

这样可以保证,

  • 学生能够选择到自己的志愿前面的导师
  • 导师能够分配到绩点高的学生

伪码描述:

queue.sort()


for s in queue:
  for t in s.list:
        if t.cur < tea.cap:
            t.cur += 1
            t.list.push(s)
            break;
            

实现

  • 生成导师数据

    1019394-20160930183104531-1944043546.png

  • 生成学生数据

    1019394-20160930183127438-976464600.png

  • 从文件导入学生数据

    1019394-20160930183138625-468485873.png

  • 从文件导入导师数据

    1019394-20160930183148938-419302506.png

  • 进行分配

    1019394-20160930183156625-1662043981.png

最后的实现效果如下(忽略那个奇怪的图标)

1019394-20160930183321250-89347875.png

存在问题&改进

在上述的算法实现中,

首先,按照学生的绩点优先和学生志愿优先来选择导师。保证绩点高的学生能够选到心仪的导师。但是在多数学生选择热门导师的时候,就会出现匹配度不高,未分配学生数多的情况。

为了解决这个问题,我们请教了 gy 同学,他提议使用费用流算法来实现毕设导师分配。于是,查阅了资料发现这个算法可以在绩点优先的前提下,达到学生和导师的最大匹配。到发博客为止,针对这个算法,实现了学生和导师之间的最大配,还未考虑绩点优先。还需要后续改进。

因此,我们拥有两个版本:

  • 按照本文算法描述实现的,带有UI的c#版
  • 以及使用最大流实现的python版

后面,会将python版实现的算法移植到cSharp上

总结

结对的过程中,需要对友之间相互磨合。提出自己对问题的理解,通过多次讨论才能把问题解决。每次讨论会对不同看法相互争论,但到最后总能得出解决方法。这就是结对编程的魅力所在吧。

附:代码托管地址,点击这里

转载于:https://www.cnblogs.com/waywong/p/5922181.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值