基于考场编排的算法调研
一、混洗算法
目前广泛使用的一种考场编排算法,混洗的思路有多种,主要使用的是基础定位、一次插入的方式进行混洗。
其主要思想是:设某类考生中包含有m个班级的考生,各班级的考生分别用集合B1,B2,…,Bm表示,集合间无包含关系,即不可能出现同一考生分别存在于一个以上的班级中,且有Bi={bi1,bi2,…,bik}。Bi中元素的个数,即该班该类考生人数,用符号|Bi|来表示。令某类考生的全集N=mi=1Bi,则该类考生的总人数为|N|,且|N|=mi=1|Bi|。设|B1||B2|…|Bm|,令集合T=B1,记录初始编排元素,混洗算法的基本思想是把集合T看成一个首尾相连的环,且相邻。
二、分治算法
设计思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
分治策略:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。
基本步骤:分治法在每一层递归都有三个步骤:
分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;
解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题
合并:将各个子问题的解合并为原问题的解。
适用于考场编排:
-
首先将考点中全部考生的座位编排问题,分解为各中学考生的座位编排问题;
-
各中学考生的座位编排问题,再分解为该中学考生在每个考场的座位编排问题;
-
分别对每个中学在各个考场的座位编排子问题进行求解,然后将各子问题的解合并,即得到考场编排问题的全局解。
三、蚁群算法
来源:仿生学算法,根据蚂蚁觅食的行为而启发。蚂蚁行走过程中释放的信息素,来标识自己的行走路径,若没有信息素,随机选择一条路径,并留下信息素。
简介:一种用来在图中寻找优化路径的概率型算法。
主要用来解决路径规划等离散优化问题。
基本步骤:
初始化:将 m 只蚂蚁随机放置;
更新禁忌表:将当前位置添加到禁忌表;
确定行走方向:根据转移概率选择下一点;
求信息素增量:每只蚂蚁游玩一周后,计算每条边上的信息素增量;
判断终止条件:判断周游次数是否满足终止条件。
适用于考场编排中:
蚁群算法(AS)利用蚁群从蚁穴到食源搜索最短路径的过程与TSP问题之间的相似性,通过模拟人工蚂蚁搜索食物的过程来求解具有NP难度的TSP问题,并得到了它的最优解。
在动态寻优过程中,考生选择机位的原理与蚂蚁选择路径的原理相似,
考生根据不同机位上信息量的大小来动态的更新自己的机位,每更新一次机位,计算一次机器冗余数,然后与上一次的数值进行比较,当机器冗余数最小时,即达到了最优分配状态,
此时的座位安排与蚂蚁寻找的最短路径相似,即为最后结果。
四、线性随机算法
新疆维吾尔自治区高考考场编排的现用算法。
基本原理:
使用随机数发生器或随机数生成算法为每个考生生成一个随机数,然后按随机数排序,最后根据随机数的大小为各考生生成考场号和座位号。
五、二级混洗算法
每一级用于控制考场编排的不同层面和特性。第一级混洗用于控制某一报名中学内部不同班级考生的随机排列,防止同一考生出现同一班级的考生相邻;第二级混洗用于控制报名中学之间的均匀分布。
六、奇偶排序算法
步骤:
1、选取所有奇数列的元素与其右侧相邻的元素进行比较,将较小的元素排序在前面;
2、选取所有偶数列的元素与其右侧相邻的元素进行比较,将较小的元素排序在前面;
3、重复前面两步,直到所有序列有序为止
代码:
算法比较
|
算法名称 |
关键字 |
优点 |
缺点 |
|
混洗算法 |
随机、不可控 |
可将各报名点的考生均匀分配到各个考场;可以保证一个考场至少有两个报名点的考生。基本可以达到考场编排的目的,尽量使每一个考生前后位置不是本报名点的考生。 |
分布不可控,考场中考生的均匀性主要依赖于随机数生成器的好坏。 |
|
分治算法 |
速度快、均衡 |
可控制编排过程,直接量化了考生的分布,编排结果达到了非常理想的均衡状态。通过仿真实验结果表明:分治算法速度快、效果好。 |
|
|
蚁群算法 |
搜索、最短路径 |
信息素初值相同,选择下一个节点时倾向于随机选择,导致算法初期收敛速度较慢。 |
|
|
线性随机算法 |
随机、不可控 |
容易理解、易于实现 |
考生的分布不可控,考场中考生的均匀性主要依赖于随机数生成器的好坏。分布不可控,没有真正达到考场编排的要求。 |
|
二级混洗法 |
随机、重复 |
既解决了不同报名中学考生均匀分布在同一考场的问题,也解决了同一考场中分布同一报名中学考生相同班级考生相邻的问题。 |
|

浙公网安备 33010602011771号