ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 邯郸学步2之学有所成:随机优化分班

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-8-8 11:01 | 显示全部楼层 |阅读模式
本帖最后由 aoe1981 于 2014-8-8 20:53 编辑

  哈哈,最近看了《美国队长2》,虽是续集,还是很不错的!
  我的均衡分班研究在亦步亦趋中终于可以在我这里宣告一个阶段的圆满结束了……
  今天,那怕是模仿、参照,抑或是重复创新,我实现了我自己的高度!
  下面是新的随机优化分班附件:
   随机优化分班之学有所成.rar (40.16 KB, 下载次数: 375)
  该附件采用的算法不同于前帖:《邯郸学步1之亦步亦趋:也做随机优化分班》
  http://club.excelhome.net/thread-1143710-1-1.html
  该附件成功实现了法师提及的“两两交换优化”的重要思路,详情后述。
  先上效果图:
   2.jpg
   1.jpg
  较小方差对比见下面链接:
  http://club.excelhome.net/forum. ... 1143710&pid=7793730  






评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 11:05 | 显示全部楼层
本帖最后由 aoe1981 于 2014-8-8 12:09 编辑

  本帖受以下两帖的启发和帮助:
  1.尊敬的法师:http://club.excelhome.net/forum. ... 1142756&pid=7786583
  相关引用:
  “第三部分:加入了听起来很愚蠢实际上很有效的做法,随机分配以后,我把两名学生互换班级,然后看看结果是不是变好了
  YES---》保留结果
  NO---》恢复原状
  不断重复上述交换,直到。。。。。。所有学生两两互换,都无法改善结果(这显然至少需要检查 combin(n,2)次互换,n为可分配的学生总数)。
  2.尊敬的香川:http://club.excelhome.net/forum. ... =521943&pid=7789589
  相关引用:
  “索性帮你写好了遍历的框架代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 11:06 | 显示全部楼层
本帖最后由 aoe1981 于 2014-8-8 11:22 编辑

  香川曾说:
  “这个不是随机交换了,而是遍历交换。
  当然,我的算法遍历次数会少一点。
  但也许法师的算法本来也就是这个样子的。
  当时,我也认为是遍历,直到现在,我的附件中消息框中还留有一处稍微恰当的“遍历”的字眼,但是我发现,还是说“随机”的好,因为“遍历1次”是不够的,需要n次……

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 11:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 aoe1981 于 2014-8-8 11:29 编辑

  其实与我的“学步1”相比而言,该帖倒是我首先做的,然而在关键地方卡住了……
  当时很沮丧,以为是思路上的根本性错误,便暂停了……
  紧接着思考了新思路,就是“学步1”,结果好了,不太成功,便又碰壁回到这儿了……

TA的精华主题

TA的得分主题

发表于 2014-8-8 11:26 | 显示全部楼层
很棒!!!继续留意。

点评

多谢您的鼓励,好似冬日暖阳!  发表于 2014-8-8 11:31

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 11:29 | 显示全部楼层
  所以能成功,有一个关键:
  毛主席说:“不会休息的人不会工作”
  我的父亲曾说:“什么时候你自己会做饭了,你就会工作了”
  每次从卡住的地方重新突围都是在清晨,“一日之计在于晨”是极正确的,还有就是大脑确实得到了充分的休息,处于相对最好的状态!
  记起某人说过:我们没钱、没地位、没权力、没后台、没长相,我们凭什么,凭状态,凭“拼命三郎”的状态……
  也只能如此了……

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 12:35 | 显示全部楼层
  关于两两交换优化的基本思路如法师所言,我补充一点我的新发现:
  h名学生分n班,假设1班有学生hn1人,姓名分别为:
  A1、A2、A3、A4、……、A(hn1)
  这时首先把A1拿出来与后面的(n-1)个班的学生逐一交换,交换后即进行方差的重算,比较方差是否更小……
  这个过程,看似遍历,实则如果不加控制的真的遍历了,反倒会出错,会进行重复替换,所得到的结果也有相当一部分重复的学生了……
  因为,交换后能够使各班各科现有方差和较小的学生可能不只一个,如果一一交换,交换几次就有几次的重复……

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 12:39 | 显示全部楼层
  这时,我只处理第一次找到的会使现有方差变小的学生进行交换,这个学生的位置完全是“随机”的,这也是我不想称为“遍历”的原因……
  交换后,便不再继续往下寻找了,而是跳出,再把1班的学生A2拿出来,与后面的(n-1)个班的学生逐一交换、对比测试……
  ……
  1班完成后,轮到2班,这时与后面的(n-2)个班的学生逐一交换、对比测试……
  依次类推。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 12:44 | 显示全部楼层
  还有一个关键十分重要,我在一开始做这个附件时,95%的工作都已经完成了,就是由于在这个关键点上出错了……
  这就是:一定要像法师所说的,当交换后结果没有变优时,一定要恢复原状,也就是说紧接着又要换回!
  我当时是忘了这一点的,也许我当时根本还意识不到这一句重要提示有多重要!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 12:49 | 显示全部楼层
  这时,细心的人会发现另一种选择:
  既然与一个学生进行交换后会结果变优的学生可以有多个,为何不找一个最好的,而只盯住第一个学生?
  我当时的确有这样的想法,但紧接着就否定了……
  因为,要从所有可变优交换的学生中比较出最优,首先要把剩下的数据扫描、测试、比对完,而且还要加入判断、记录这样的语句。要知道,在一个大量循环的内部加入一条判断,也有可能影响大量的时间,所以我舍弃了。
  换言之,交换第一个真的不好吗?
  未尝见得。方差是受全体数据共同影响的,不单只是一个数据,后面的交换会对这种“遗憾”进行补偿!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 03:57 , Processed in 0.042788 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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