ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 超级强大2:性别与科目均衡分班

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-3 21:54 | 显示全部楼层
琼恩·雪诺 发表于 2014-8-3 21:49
天哪,,,,,

  肿么啦?说来听听……

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-3 22:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  备注:附件中第2张工作表“分班信息”的工作表保护密码是:123
  以备不时之需!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-3 22:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 aoe1981 于 2014-8-4 06:40 编辑

  以下做了一个效率测试,954个学生分16班,情况如下图:
  用时如下:

   4.jpg
  折合9分2秒左右,可能效率不高吧,需有同类对比才好说,总之要耐心等待!
  匹配情况:
   5.jpg
  匹配效果,还是很均衡,看来人数越多,效果越好,可能有这个趋势!
   6.jpg


TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-3 22:46 | 显示全部楼层
本帖最后由 aoe1981 于 2014-8-4 21:52 编辑

  楼上的测试附件如下:
   性别与科目均衡分班(效率测试).rar (78.92 KB, 下载次数: 174)
  其中成绩来源为热心网友提供的真实小学语文、数学、英语成绩,附件中把英语成绩引用为综合,其中的姓名与性别不具有对应关系。

TA的精华主题

TA的得分主题

发表于 2014-8-3 23:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
好是很好,就是运行太慢了,多谢

TA的精华主题

TA的得分主题

发表于 2014-8-4 01:30 | 显示全部楼层
aoe1981 发表于 2014-8-3 21:40
  不过,我的这种算法可能适应性不够好,如果科目是8科,加上性别是9个判断指标,这样会使代码变得很长很 ...


哦,我的算法总的来说由三部分组成:

第一部分:把所有可分配的学生随机分配到各班。重复N次,最好的一次作为最终结果

我最早的分班程序是这一帖(现在已经完全没用了。。。),但后来发现单用随机分配不够好。。。。。。
http://club.excelhome.net/thread-916084-1-1.html

第二部分:既然把所有学生一次性随机分配,结果不够理想,那么我就把问题的规模缩小。
每次只随机分配若干学生(比如说 班级数x10,即每次每班只增加十个学生),重复N次选出最好一次。
然后继续上步直到所有学生分配完毕。
显然,每次分配的学生数减少,随机分配的结果就会更好,分成多批的最终结果也一样会更好。

第三部分:加入了听起来很愚蠢实际上很有效的做法,随机分配以后,我把两名学生互换班级,然后看看结果是不是变好了
YES---》保留结果
NO---》恢复原状
不断重复上述交换,直到。。。。。。所有学生两两互换,都无法改善结果(这显然至少需要检查 combin(n,2)次互换,n为可分配的学生总数)。

其实这个第三部分,跟第一第二部分都没有关系,不管你用任何算法得到一个分班结果,都可以直接应用这里的第三部分的算法去“再优化”一下。

最后,对于各种奇葩的平衡分班要求(优等生,住宿生,xx生,各分数段等等),我采用全部转换为“特殊科目分数”的做法。
所以程序只需考虑平均分配各科“分数”,就能达到平均分配各种特殊生的结果。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-4 06:40 | 显示全部楼层
达州张先生 发表于 2014-8-3 23:27
好是很好,就是运行太慢了,多谢

这是因为循环体内存在大量的判断造成的的……而且循环的嵌套也很多……更有一点,每分配一名学生到班,就要引发重算,更新工作表信息,然后重新读取……

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-4 06:55 | 显示全部楼层
灰袍法师 发表于 2014-8-4 01:30
哦,我的算法总的来说由三部分组成:

第一部分:把所有可分配的学生随机分配到各班。重复N次,最好的 ...

  “所有的分班指标数字化”
  “把两名学生互换班级,优化结果”
  是我现在感觉到的极其智慧、强大的两种解决问题的思路,足见,这样的方法写出的代码适应性才足够好……
  有点好奇的是:
  “其实这个第三部分,跟第一第二部分都没有关系,不管你用任何算法得到一个分班结果,都可以直接应用这里的第三部分的算法去“再优化”一下。”
  既然如此,似乎第三部分可以独立出来的,它的运行只需要一个“分班基础”,甚至是不是我们可以手动复制粘贴等量的学生到各分班表(然后读取到内存数组),然后用这第三部分优化即可?

点评

是的。  发表于 2014-8-4 13:20

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-4 07:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  发现了分段统计中的一个问题:
  由于在统计完一科后没有释放变量,导致统计后面的科目时,数据出现了累加……
  表现出来就是:语文正确,数学累加了语文的,综合累加了语文和数学的……
  呵呵,已修改,19楼、34楼附件已更新……
  现在的效果截图如下:
   7.jpg
  至于效率测试,也修改了附件,但是没有再次运行结果,前面测试过了,要9分钟,等不住啊……大家可以试下,电脑性能强的……

TA的精华主题

TA的得分主题

发表于 2014-8-4 08:01 | 显示全部楼层
aoe1981 发表于 2014-8-3 21:47
  这个您得问版主,我也不知道……不过,财富值只要你每天都来泡论坛,每天都活跃、都抢红包,自然就累 ...

哇,谢谢哈!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-22 22:55 , Processed in 0.041723 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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