ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 邯郸学步1之亦步亦趋:也做随机优化分班

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-7 15:02 | 显示全部楼层
  不好意思,刚刚又运行测试了下,发现一个问题:
  没有替换“方差次优方案”时,统计数据也会变化,这时的变化不应当被记录!
  我再想想……

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-7 15:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  好了,11楼问题已解决!
  有四个关于序号的关键数组,此处做一下说明:
  arr()、arr1()、arr2()、arr3()
  第一个初始化后(填充自然数序列值)用于不断产生乱序;
  第二个用于方差计算自定义函数接收乱序;
  第三个用于不断存储“方差次优方案”的乱序;
  第四个用于保存初始状态(自然数序列)。
  上述第四个数组是新增的用于解决11楼问题的数组,这时记录下了“基础数据表”中学生顺序的初始状态!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-7 15:16 | 显示全部楼层
  说一下本附件的一个重要特点:
  为了实现前述所谓的“愚公移山”,其中一个关键的步骤就是记录下上次运行后的状态,如何做到这一点的呢?
  我采用的是最简便的方法:
  运行完后,整体更新“基础数据表”。
  其实,分班表中也做了这样的记录,但是读取要利用循环,不太方便,浪费宝贵的时间!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-7 15:19 | 显示全部楼层
  说一下本附件的另一个重要特点:
  就是使用了香川大侠的:【经典数组洗牌法】产生不重复随机数序列。
  引用代码如下:
  1.     Randomize
  2.     For i = 1 To h - 1 '香川之【经典数组洗牌法】
  3.         r = Int(Rnd() * (h - i + 1)) + i
  4.         t1 = arr(r): arr(r) = arr(i): arr(i) = t1
  5.     Next i
复制代码
  只有短短5行代码,却构成了本程序的核心!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-7 15:22 | 显示全部楼层
  说一下本附件的另一个优点:
  (前面的如果算的话应该是“愚公移山”)
  本附件运行结果的优化不受“科目”多少,以及其他需要量化的均衡指标(比如:性别)的影响!
  影响本附件运行结果的因素是:学生总数与随机次数!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-7 15:25 | 显示全部楼层
  性别均衡的实现仍然采用了法师的量化方法:
  男:100分,女:0分;
  取各班性别均分的均衡。
  如果存在其他指标,也可以依法炮制!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-7 15:31 | 显示全部楼层
  关于本附件代码的优化:
  我一开始其实是试图这么做的,结果越搞越困难,到头来连基本的想看一看的都没有搞出来……差点瞎折腾死!
  后来便暂时放弃了,先做了这个最基本的试一试……
  我现在只猜测下优化方向:
  绝对是优化“随机方案”的产生办法。
  假设有两种方案:
  1、2、3、……、h
  2、1、3、……、h
  可以看到,1与2对换了,当然,不见得其他位置就相同,此处不影响要说明的问题。
  如果1与2同班,则这种产生方案是无效的,即不影响班级方差,同时假设其他班的“随机乱序”也在同班内出现!
  如何规避出现不重复随机方案,可能办不到,但是这个可能有办法吧,我的思路后面再说。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-7 15:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  以下是我前后约摸运行60万次得到的“次优结果”:
   3.jpg
  效果还不如我在“超2”中的办法,尽管“超2”的方法在均衡指标数量上拓展性不好!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-7 15:51 | 显示全部楼层
  现在接着17楼说一下我的优化方向:
  h个学生,序列为:1、2、3、4、……、h
  分n个班,以前面我说的方式截成n截(平均加合理处理余数),分别为:hn1、hn2、hn3、hn4、……、hnn
  首先,随机确定前n-1个班需调换的人数,产生n-1个随机数(最大不能超过各班人数):tn1、tn2、tn3、tn4、……、tn(n-1)
  然后,每个班要调出去的人数确定了,还要确定到具体的人,这个也应当是随机的,但是如果不好实现的话,就退而求其次,产生一组随机起点,连片出去,可设变量为:qn1、qn2、qn3、qn4、……、qn(n-1),当然,此时最大不能超过各班人数-各班随机调出人数!
  最后,调换方向,一律向后:
  第1班的与后面的n-1个班里的学生随机调换;
  第2班的与后面的n-2个班里的学生随机调换;
  ……
  第n-1班的与第n个班里的学生随机调换。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-7 15:56 | 显示全部楼层
  我一开始就是折腾在了19楼的思路中,没有出来,毫无结果……
  补充一下我用到的均衡性指标:
  性别+语文+数学+综合  

点评

继续折腾。老毛教导我们要学习《愚公移山》的精神,当今世界该学点愚公搬家的办法。  发表于 2014-8-7 15:59
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-19 05:53 , Processed in 0.041997 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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