蔣偉毅 王子超 張謙
【摘要】 考場編排是考試系統都要進行的一項工作,科學、合理、公正的編排考場,對于嚴肅考風考紀、提升考試的公信力起著重要的作用。本文總結了考場中的各種編場方法并對方法的特點進行了介紹和分析,為考試系統工作人員根據編場需求的不同采用更為適合的編場方法提供了參考。
【關鍵詞】 編排 考試 隨機數
一、利用已有信息編場
在考生信息庫里抽取考生信息中的數字,以一定的規則為每名考生重新設置位次數字,根據位次數字重新排序打亂原有順序。
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期.