蒋伟毅 王子超 张谦
【摘要】 考场编排是考试系统都要进行的一项工作,科学、合理、公正的编排考场,对于严肃考风考纪、提升考试的公信力起着重要的作用。本文总结了考场中的各种编场方法并对方法的特点进行了介绍和分析,为考试系统工作人员根据编场需求的不同采用更为适合的编场方法提供了参考。
【关键词】 编排 考试 随机数
一、利用已有信息编场
在考生信息库里抽取考生信息中的数字,以一定的规则为每名考生重新设置位次数字,根据位次数字重新排序打乱原有顺序。
1.1自然顺序号数字倒排
利用考生原有顺序进行数字倒排得到不同位次数字。如:两个考生在数据库记录位置1234、1235将考生记录号倒排后位次数字为4321和5321,按位次重新排序后将挨着的考生在编场中隔开。缺点是规律性较强不适合人数百位以内情况下使用。
1.2提取考生信息的数字进行排列
提取考生信息中的一个或多个字段中的数字生成位次数字,利用新组建的位次数字将考生顺序打乱,较单一自然序号数字倒排具有更强的无规律性。如:报名时相邻的两个考生,报名时生成的报名号分别A00123和A00124,身份证号130982198301020928,130981198211250616,手机号15612171611,13931210928。编场中抽取考生报名号、身份证号、手机号等信息组成一组无规律位次数字。注意的是提取身份证号、电话等数字混合排序打乱时要避开信息中有规律位数,如身份证号前6位为地域17位数字男单女双.手机号前3位为手机运营商中间4位为市级区号.使用这些位数生成位次数字易造成相同地域、出生日期相近、性别相同或使用相同手机业务考生相对集中。
利用已有信息生成位次数字方法简单,大多数数据库和数据表可通过字符串截取函数实现,适合编场要求不复杂,人数相对较少的中小型考试使用。
二、使用计算机随机数编场
计算机产生随机数字原理是系统定时器的值作为随机种子,每个种子对应一组根据算法预先生成的随机数,相同的平台环境下不同时间产生的随机数是不同的。
2.1、随机数排序法
在计算机随机编场中较常见生成速度快原理简单。如:需要编场的考生为5000人,利用计算机随机为每名考生产生10组0到9的随机数字,利用产生的10位数字进行排序核心代码为:
int[] array = new int[10];
for (int i = 0; i < array.Length; i++)
{ int x = Convert.ToInt32(random.Next(0,9);
for (int j = 0; j < i; j++)
{if (x == array[j])
{ x = Convert.ToInt32(random.Next(0,9));
j = 0}}
array[i] = x;
2.2洗牌法
打乱方式类似扑克牌的洗牌,编场时遍历整个考生数据表,遍历过程中随机产生一个不大于考生总数的随机数,以该随机数相同记录序号与当前遍历到记录序号进行对换。以10条记录数为例核心代码为:
public void Reshuffle()
{int[] cards = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Random ram = new Random();
int currentIndex;
int tempValue;
for (int i = 0; i < 10; i++)
{currentIndex = ram.Next(0,10- i);
tempValue = cards[currentIndex];
cards[currentIndex] = cards[9 - i];
cards[9 - i] = tempValue;}}
随机数编场,可使考生数据进行完全随机排序,通过简单编程即可实现,在考场设置要求不复杂的情况下适用。
三、特定需求下的算法编场
3.1分冶法
把一个规模较大的问题分成多个较小的与原问题类型相同的子问题,通过对子问题求解,并把子问题的解合并起来从而构成整个问题的解。分冶法在每一层递归上面都有3个步骤:
a.分解,将若原问题分解为若干个规模较小、相互独立、与原问题形式相同的子问题。
b.解决,若子问题规模较小而容易被解决则直接解,否则递归解决各个子问题。c.合并,将各个子问题的解合并原问题的解。
在涉及地域较广的大型考试,考生需要在本地区考试,这种情况下就要使用分冶法,将每个考区进行单独的编场,然后合成最终的编场数据库。
3.2混洗法
采用的是基础定位、依次插入的原理。把最大的集合看成一个组,将其他集合均匀的插入到这个集合中,最终形成一个全部的集合。在实际考试中适合把同单位或同班级的考生打乱均匀的分配到不同的考场中,使同一部分的考生达到较为理想的均匀分布状态。
3.3环形选取法:让需要编排考场的考生形成一个环,按照一定的间隔来抽取考生到的考场中,该方法需要满足两个条件:1、间隔数和考生总人数互为素数2、间隔数要大于编场库中同一单位考生最大人数。同一学校、班级或单位等考生相对熟悉的群体中使用该方法可很大程度上让互相认识的考生不分配到同一考场。
3.4蚁群算法
a.所有蚂蚁遇到障碍物时按照等概率选择路径,并留下信息素;
b.随着时间的推移,较短路径的信息素浓度升高;
c.蚂蚁再次遇到障碍物时,会选择信息素浓度高的路径;
d.较短路径的信息素浓度继续升高,最终最优路径被选择出来。
该方法适合编场复杂度较高的情况为考场搭配寻找最优的解决方案,如考生需要两天内进行4场考试,每次考试都要到新考场中,为了便于考生出行和熟悉环境,4场考试每名考生只能在小范围内随机变换考场。
算法输入:所有考点的考场数,考生数量n,迭代次数K
算法输出:所有考生4场考试在尽量单一考点范围内的考场随机编场。
a.初始化随机分配所有考生的第一次所在考场;
b.for i = 1 to K
c.for j = 1 to n
d.第j名考生搜索一遍;
e.if 考生分配到的不同考点数更小
f.更新该考生考场;
g.更新4场考试的分配方案;
h.end
i.end
参 考 文 献
[1]冯向萍 张太红 李萍.高考考场编排算法研究.新疆农业大学学报,2008年 第3期
[2] 安晓东.基于蚁群算法的电子化考试考场座位编排方法.中北大学学报:自然科学版,2007年 第3期.