ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 18749|回复: 25

随机算法对学生平衡分班,以每科平均分最接近为目标,人数科目班数什么都无限制。。。

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-9-5 19:25 | 显示全部楼层 |阅读模式
本帖最后由 灰袍法师 于 2012-9-8 22:44 编辑

也许是论坛里面到目前为止最好的分班程序?

随机算法毫无智能可言,要得到较佳结果,就必须大量尝试,慢是一定的
附件把之前C1单元格的尝试100万次,改为1万就不慢了,不过这时候的求解结果就相对悲剧。。。。。。
不过话说回来,1万次随机的结果,已经比论坛上所有的分班方法都更加平均了。
即使是千人以上分班,也可以保证分差不超过1分

要追求更平衡的分班,就得花更多的随机次数去碰运气
大概是每增加100倍的计算时间,可以把结果的每班差异降低5-10倍左右
即如果1万次随机,得到分差1分的结果,那么100万次随机,应该可以得到比分差0.2更好的结果!
建议没耐心的就用10000到10万的随机次数。

注意:性别必须转化为数值来进行分配,比如说 1000代表男性,0代表女性
同理:其余特殊项目如体育生之流,也可以用数值来代替,从而可以对其进行平衡分配。

可以先人手指定若干学生的分班,然后再运行程序把其余学生平衡分配

也可以把学生按成绩波动程度从大到小排序,然后每次增加一部分进行分配,这样虽然麻烦一些,但是分配的结果会更平均。

附件在9楼







补充内容 (2013-8-4 16:50):
注意:12楼 龙行九州 的链接,有我更新更强大的分班程序,而且有 龙行九州 兄的分班结果报告,此帖附件不建议下载,请移步该帖拿取更强大的武器。

TA的精华主题

TA的得分主题

发表于 2012-9-5 19:45 | 显示全部楼层
怎么慢啊。。。。。。。。。。。

TA的精华主题

TA的得分主题

发表于 2012-9-5 20:17 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-9-5 20:31 | 显示全部楼层
是不是要分好多次,然后找个最好的结果?

点评

是的,等于买彩票,买的注数越多,中奖机会越高,呵呵  发表于 2012-9-5 22:54

TA的精华主题

TA的得分主题

发表于 2012-9-5 20:37 | 显示全部楼层
法师贴必读!坐等原理解析。

TA的精华主题

TA的得分主题

发表于 2012-9-5 20:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-9-5 20:55 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-9-5 22:30 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-5 23:32 | 显示全部楼层
本帖最后由 灰袍法师 于 2012-9-6 05:24 编辑
mjzxlmg 发表于 2012-9-5 22:30
期待法师讲解。

其实也没什么可以讲解的
这个程序是在下帖17楼的程序改良过来的
http://club.excelhome.net/thread-896998-2-1.html

100万次随机求解上述链接的数据,300人分6班的话,每班每科分差距都在0.01之内
另外,我人工随机生成1200个学生的成绩,保证绝对可以分出 每班男女人数一样,所有科目平均分一样
然后用顶楼程序去排班,如果用1万次随机,分男女两批分班,那么可以做到每班所有科目平均分不超过0.35,耗时不到20秒
如附件
分班_人造完美分班测试数据_1200人分24班.rar (126.02 KB, 下载次数: 1585)
个人认为是足够用了

算法的核心还是碰运气
附件的改良只是
1 每次只处理一个班,降低了求解的规模,增加碰到好结果的机会,即提高求解的精度。
2 可以支持逐渐增加学生的分批分班方式,这样每个学校的不同要求都可以自己分批,然后扔进这个程序去分配
比如说
可以先分 所有的特长生
然后再增加 所有的贫困生
然后再增加 每科前三名
最后增加所有的其余学生







补充内容 (2013-8-17 18:17):
强烈建议移步此帖下载新的附件。
http://club.excelhome.net/thread-1034379-2-1.html

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-10-9 08:58 | 显示全部楼层
本帖最后由 andy3303 于 2012-10-9 08:58 编辑

请教法师:以下单独发了贴,恐怕你看不到,在此帖中重复,望赐教。http://club.excelhome.net/thread-929057-1-1.html
用VBA有个问题发现很头疼,在多层循环中时间太长了,能不能分成1000个或者更多的同时计算的过程?
例如,以下程序要运行约300天,能不能按i值分成1000个同时计算的过程?如果在VBA中不方便实现,用什么工具能实现?谢谢了先,法师。
Sub example()
Dim i&, j&, k&
For i = 1 To 1000
For j = 1 To 500
  For k = 1 To 500
    Call exam0 '每次运行需0.1秒
  Next
Next
Next
End Sub


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 06:18 , Processed in 0.040783 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表