蔣偉毅 王子超 張謙
【摘要】 考場(chǎng)編排是考試系統(tǒng)都要進(jìn)行的一項(xiàng)工作,科學(xué)、合理、公正的編排考場(chǎng),對(duì)于嚴(yán)肅考風(fēng)考紀(jì)、提升考試的公信力起著重要的作用。本文總結(jié)了考場(chǎng)中的各種編場(chǎng)方法并對(duì)方法的特點(diǎn)進(jìn)行了介紹和分析,為考試系統(tǒng)工作人員根據(jù)編場(chǎng)需求的不同采用更為適合的編場(chǎng)方法提供了參考。
【關(guān)鍵詞】 編排 考試 隨機(jī)數(shù)
一、利用已有信息編場(chǎng)
在考生信息庫(kù)里抽取考生信息中的數(shù)字,以一定的規(guī)則為每名考生重新設(shè)置位次數(shù)字,根據(jù)位次數(shù)字重新排序打亂原有順序。
1.1自然順序號(hào)數(shù)字倒排
利用考生原有順序進(jìn)行數(shù)字倒排得到不同位次數(shù)字。如:兩個(gè)考生在數(shù)據(jù)庫(kù)記錄位置1234、1235將考生記錄號(hào)倒排后位次數(shù)字為4321和5321,按位次重新排序后將挨著的考生在編場(chǎng)中隔開(kāi)。缺點(diǎn)是規(guī)律性較強(qiáng)不適合人數(shù)百位以內(nèi)情況下使用。
1.2提取考生信息的數(shù)字進(jìn)行排列
提取考生信息中的一個(gè)或多個(gè)字段中的數(shù)字生成位次數(shù)字,利用新組建的位次數(shù)字將考生順序打亂,較單一自然序號(hào)數(shù)字倒排具有更強(qiáng)的無(wú)規(guī)律性。如:報(bào)名時(shí)相鄰的兩個(gè)考生,報(bào)名時(shí)生成的報(bào)名號(hào)分別A00123和A00124,身份證號(hào)130982198301020928,130981198211250616,手機(jī)號(hào)15612171611,13931210928。編場(chǎng)中抽取考生報(bào)名號(hào)、身份證號(hào)、手機(jī)號(hào)等信息組成一組無(wú)規(guī)律位次數(shù)字。注意的是提取身份證號(hào)、電話等數(shù)字混合排序打亂時(shí)要避開(kāi)信息中有規(guī)律位數(shù),如身份證號(hào)前6位為地域17位數(shù)字男單女雙.手機(jī)號(hào)前3位為手機(jī)運(yùn)營(yíng)商中間4位為市級(jí)區(qū)號(hào).使用這些位數(shù)生成位次數(shù)字易造成相同地域、出生日期相近、性別相同或使用相同手機(jī)業(yè)務(wù)考生相對(duì)集中。
利用已有信息生成位次數(shù)字方法簡(jiǎn)單,大多數(shù)數(shù)據(jù)庫(kù)和數(shù)據(jù)表可通過(guò)字符串截取函數(shù)實(shí)現(xiàn),適合編場(chǎng)要求不復(fù)雜,人數(shù)相對(duì)較少的中小型考試使用。
二、使用計(jì)算機(jī)隨機(jī)數(shù)編場(chǎng)
計(jì)算機(jī)產(chǎn)生隨機(jī)數(shù)字原理是系統(tǒng)定時(shí)器的值作為隨機(jī)種子,每個(gè)種子對(duì)應(yīng)一組根據(jù)算法預(yù)先生成的隨機(jī)數(shù),相同的平臺(tái)環(huán)境下不同時(shí)間產(chǎn)生的隨機(jī)數(shù)是不同的。
2.1、隨機(jī)數(shù)排序法
在計(jì)算機(jī)隨機(jī)編場(chǎng)中較常見(jiàn)生成速度快原理簡(jiǎn)單。如:需要編場(chǎng)的考生為5000人,利用計(jì)算機(jī)隨機(jī)為每名考生產(chǎn)生10組0到9的隨機(jī)數(shù)字,利用產(chǎn)生的10位數(shù)字進(jìn)行排序核心代碼為:
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洗牌法
打亂方式類似撲克牌的洗牌,編場(chǎng)時(shí)遍歷整個(gè)考生數(shù)據(jù)表,遍歷過(guò)程中隨機(jī)產(chǎn)生一個(gè)不大于考生總數(shù)的隨機(jī)數(shù),以該隨機(jī)數(shù)相同記錄序號(hào)與當(dāng)前遍歷到記錄序號(hào)進(jìn)行對(duì)換。以10條記錄數(shù)為例核心代碼為:
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;}}
隨機(jī)數(shù)編場(chǎng),可使考生數(shù)據(jù)進(jìn)行完全隨機(jī)排序,通過(guò)簡(jiǎn)單編程即可實(shí)現(xiàn),在考場(chǎng)設(shè)置要求不復(fù)雜的情況下適用。
三、特定需求下的算法編場(chǎng)
3.1分冶法
把一個(gè)規(guī)模較大的問(wèn)題分成多個(gè)較小的與原問(wèn)題類型相同的子問(wèn)題,通過(guò)對(duì)子問(wèn)題求解,并把子問(wèn)題的解合并起來(lái)從而構(gòu)成整個(gè)問(wèn)題的解。分冶法在每一層遞歸上面都有3個(gè)步驟:
a.分解,將若原問(wèn)題分解為若干個(gè)規(guī)模較小、相互獨(dú)立、與原問(wèn)題形式相同的子問(wèn)題。
b.解決,若子問(wèn)題規(guī)模較小而容易被解決則直接解,否則遞歸解決各個(gè)子問(wèn)題。c.合并,將各個(gè)子問(wèn)題的解合并原問(wèn)題的解。
在涉及地域較廣的大型考試,考生需要在本地區(qū)考試,這種情況下就要使用分冶法,將每個(gè)考區(qū)進(jìn)行單獨(dú)的編場(chǎng),然后合成最終的編場(chǎng)數(shù)據(jù)庫(kù)。
3.2混洗法
采用的是基礎(chǔ)定位、依次插入的原理。把最大的集合看成一個(gè)組,將其他集合均勻的插入到這個(gè)集合中,最終形成一個(gè)全部的集合。在實(shí)際考試中適合把同單位或同班級(jí)的考生打亂均勻的分配到不同的考場(chǎng)中,使同一部分的考生達(dá)到較為理想的均勻分布狀態(tài)。
3.3環(huán)形選取法:讓需要編排考場(chǎng)的考生形成一個(gè)環(huán),按照一定的間隔來(lái)抽取考生到的考場(chǎng)中,該方法需要滿足兩個(gè)條件:1、間隔數(shù)和考生總?cè)藬?shù)互為素?cái)?shù)2、間隔數(shù)要大于編場(chǎng)庫(kù)中同一單位考生最大人數(shù)。同一學(xué)校、班級(jí)或單位等考生相對(duì)熟悉的群體中使用該方法可很大程度上讓互相認(rèn)識(shí)的考生不分配到同一考場(chǎng)。
3.4蟻群算法
a.所有螞蟻遇到障礙物時(shí)按照等概率選擇路徑,并留下信息素;
b.隨著時(shí)間的推移,較短路徑的信息素濃度升高;
c.螞蟻再次遇到障礙物時(shí),會(huì)選擇信息素濃度高的路徑;
d.較短路徑的信息素濃度繼續(xù)升高,最終最優(yōu)路徑被選擇出來(lái)。
該方法適合編場(chǎng)復(fù)雜度較高的情況為考場(chǎng)搭配尋找最優(yōu)的解決方案,如考生需要兩天內(nèi)進(jìn)行4場(chǎng)考試,每次考試都要到新考場(chǎng)中,為了便于考生出行和熟悉環(huán)境,4場(chǎng)考試每名考生只能在小范圍內(nèi)隨機(jī)變換考場(chǎng)。
算法輸入:所有考點(diǎn)的考場(chǎng)數(shù),考生數(shù)量n,迭代次數(shù)K
算法輸出:所有考生4場(chǎng)考試在盡量單一考點(diǎn)范圍內(nèi)的考場(chǎng)隨機(jī)編場(chǎng)。
a.初始化隨機(jī)分配所有考生的第一次所在考場(chǎng);
b.for i = 1 to K
c.for j = 1 to n
d.第j名考生搜索一遍;
e.if 考生分配到的不同考點(diǎn)數(shù)更小
f.更新該考生考場(chǎng);
g.更新4場(chǎng)考試的分配方案;
h.end
i.end
參 考 文 獻(xiàn)
[1]馮向萍 張?zhí)t 李萍.高考考場(chǎng)編排算法研究.新疆農(nóng)業(yè)大學(xué)學(xué)報(bào),2008年 第3期
[2] 安曉東.基于蟻群算法的電子化考試考場(chǎng)座位編排方法.中北大學(xué)學(xué)報(bào):自然科學(xué)版,2007年 第3期.