快速了解學(xué)術(shù)期刊目錄級別、選刊、行業(yè)刊物等解決方案
經(jīng)過詳細(xì)分析組卷過程中的各項約束條件,以試卷難度系數(shù)、知識點(diǎn)覆蓋率、題型、題量、總分為依據(jù),采用遺傳算法,設(shè)計并實(shí)現(xiàn)基于SSM框架的自動組卷系統(tǒng)。以遺傳算法和FreeMarker模板技術(shù)為支撐,結(jié)合對科目、知識點(diǎn)、題型、試題模塊的管理,系統(tǒng)提供的自動生成Word格式試卷的功能,能有效解決教師在實(shí)際中組卷的需求。系統(tǒng)目前已經(jīng)部署并投入教學(xué)使用,并取得了良好的教學(xué)效果。
《計算機(jī)科學(xué)與探索》是由中國電子科技集團(tuán)公司主管、華北計算技術(shù)研究所主辦的國內(nèi)外公開發(fā)行的計算機(jī)學(xué)報級高級學(xué)術(shù)期刊,中國計算機(jī)學(xué)會會刊。報道計算機(jī)(硬件、軟件)各學(xué)科具有創(chuàng)新性、前沿性、導(dǎo)向性、開拓性及探索性的科研成果。內(nèi)容包括高性能計算機(jī),體系結(jié)構(gòu)、并行處理,計算機(jī)科學(xué)新理論、算法設(shè)計與分析、人工智能與模式識別、系統(tǒng)軟件,軟件工程、數(shù)據(jù)庫、計算機(jī)網(wǎng)絡(luò)、信息安全、計算機(jī)圖形學(xué)與計算機(jī)輔助設(shè)計、虛擬現(xiàn)實(shí)、多媒體技術(shù)及交叉學(xué)科的相互滲透和新理論的衍生等。榮獲工業(yè)和信息化部優(yōu)秀科技期刊;中國計算機(jī)學(xué)會優(yōu)秀會刊。
1 背景
隨著計算機(jī)技術(shù)的快速發(fā)展,傳統(tǒng)人工組卷方式已經(jīng)落后,計算機(jī)組卷成為新型的教學(xué)輔助方式。計算機(jī)組卷是按照教學(xué)要求,由計算機(jī)自動從試題庫中選擇試題,組成符合知識點(diǎn)分布、題型分布、難度分布、分?jǐn)?shù)分布要求的試卷[1]。計算機(jī)自動組卷,組卷算法是關(guān)鍵。該文以難度系數(shù)、知識點(diǎn)覆蓋率、題型、題量、總分五個指標(biāo)為約束條件,采用遺傳算法進(jìn)行組卷。該系統(tǒng)主要實(shí)現(xiàn)了自動組卷、手動組卷和導(dǎo)出Word格式試卷功能,同時提供對科目、知識點(diǎn)、題型、題目、試卷的操作,幫助用戶有效便捷地管理組卷過程。
2 自動組卷系統(tǒng)的功能模塊設(shè)計
根據(jù)實(shí)際使用情況,系統(tǒng)有管理員、教師、試題錄入人員三種用戶角色,不同的用戶角色對應(yīng)不同的功能權(quán)限。經(jīng)過分析用戶組卷以及用戶使用系統(tǒng)的流程,用戶的行為主要有:管理科目、知識點(diǎn)、題型、試題信息;管理試卷信息、自動生成試卷、手動生成試卷、導(dǎo)出Word格式試卷;管理員、教師管理下屬用戶;管理員管理系統(tǒng)信息、公告信息;用戶管理個人信息。根據(jù)以上分析,該系統(tǒng)功能結(jié)構(gòu)如圖1所示。
3 基于SSM架構(gòu)的系統(tǒng)體系結(jié)構(gòu)設(shè)計
3.1 關(guān)鍵技術(shù)及作用
SSM是Spring、SpringMVC、MyBatis三大框架的簡稱。作為目前較為流行的Web框架,SSM框架有許多優(yōu)良的特性,使其成為當(dāng)前輕量級Web應(yīng)用領(lǐng)域最優(yōu)秀的框架組合之一。
Spring是應(yīng)用于設(shè)計層面的框架。它不解決開發(fā)過程中具體的功能點(diǎn),而從系統(tǒng)設(shè)計層面出發(fā),解決代碼的耦合問題。Spring在系統(tǒng)中的主要作用有:1)提供容器功能,管理Bean的生命周期,整合SpringMVC和 MyBatis框架[2];2)通過依賴注入,管理代碼間的依賴關(guān)系;3)通過AOP切面,獨(dú)立管理事務(wù)、日志功能;4)整合EhCache緩存框架管理緩存;5)整合dbcp數(shù)據(jù)庫連接池管理數(shù)據(jù)庫連接。
SpringMVC是Spring框架基于MVC設(shè)計模型的用于構(gòu)建Web應(yīng)用程序的一個模塊[3],主要作用有:1)將請求映射到處理器;2)輔助實(shí)現(xiàn)上傳文件功能;3)整合Hibernate Validator驗(yàn)證用戶輸入合法性;4)解析并渲染視圖,最終返回響應(yīng)頁面。
MyBatis是一個基于Java的數(shù)據(jù)持久層框架[4],實(shí)現(xiàn)了對數(shù)據(jù)庫中數(shù)據(jù)的CRUD操作。
MyBatis通過XML配置文件或者Java程序獲得連接數(shù)據(jù)庫的SqlSession對象,該系統(tǒng)采用Java程序形式,將其與Spring框架整合開發(fā)。其中,最重要的是mapper映射器,mapper映射器中最主要的是SQL映射語句。這些映射語句以注解或者SQL映射文件的形式存在,通過select、insert、update、delete等元素,執(zhí)行編寫的SQL語句。
3.2 體系結(jié)構(gòu)設(shè)計
該系統(tǒng)采用分層式體系結(jié)構(gòu),分為View視圖層、Controller控制層、Service服務(wù)層、Dao數(shù)據(jù)持久層、Model模型層。下文結(jié)合系統(tǒng)中自動生成試卷功能的實(shí)現(xiàn),展示架構(gòu)中各個層的任務(wù)與功能。
3.2.1 View視圖層
View視圖層采用JSP,JQuery,BootStrap技術(shù)。BootStrap框架用來搭建靜態(tài)頁面;JQuery負(fù)責(zé)發(fā)送AJAX請求,獲得后臺數(shù)據(jù)并將其渲染進(jìn)頁面;JSP技術(shù)實(shí)現(xiàn)動態(tài)網(wǎng)頁效果。在自動生成試卷頁面中,提供試卷標(biāo)題、難度系數(shù)、題型個數(shù)、題型分?jǐn)?shù)、題型順序供用戶設(shè)置,并將其作為自動組卷功能的入?yún),頁面效果如圖2所示。本頁面在以下3個方面做出優(yōu)化:1)在頁面中多處使用AJAX異步交互技術(shù),刷新局部數(shù)據(jù)時,不用刷新整個頁面;2)根據(jù)數(shù)據(jù)庫中已有的題目數(shù)量,限制用戶在一定范圍內(nèi)選擇,保證了執(zhí)行遺傳算法時題目的充足性;3)用戶點(diǎn)擊生成試卷按鈕時,匯總呈現(xiàn)所選擇的信息,經(jīng)過二次確認(rèn)后再發(fā)起自動生成試卷請求。
3.2.2 Controller控制層
從View層發(fā)起的自動生成試卷請求:testPaper/generatePaperAuto,會被web.xml中定義的servlet攔截,并將請求交給SpringMVC框架中的核心處理器DispatcherServlet。核心處理器請求HandlerMapping映射器,返回Handler對象,再請求HandlerAdapter適配器,找到控制類中的方法。映射關(guān)系通過注解在控制類中的方法上配置,注解如下:
@RequestMapping(value="/testPaper/generatePaperAuto",method=RequestMethod.POST)
組卷控制類中的自動組卷方法負(fù)責(zé)處理自動組卷功能的業(yè)務(wù)流程。業(yè)務(wù)處理流程如下:
1)得到前臺用戶選擇的科目Id、知識點(diǎn)列表、題型列表,根據(jù)這些條件查找試題,組成題庫:questionDB=questionService.getQues(sId,kPList,qTList);
2)根據(jù)試卷id、總分、難度系數(shù)、知識點(diǎn)列表,題型列表初始化用戶期望試卷:expectedExam=new TempExam(eId,totalScore,paperDiffLev,kpsSet,qtList);
3)將以上方法返回的參數(shù)questionDB、expectedExam,作為遺傳算法的入?yún),進(jìn)行組卷:resultExam=testPaperServcie.geneticAlgorithm(questionsDB,expectedExamA);
4)將生成的試卷信息存入數(shù)據(jù)庫:examService.examInToDB(resultExam);
5)將數(shù)據(jù)庫中的試卷信息導(dǎo)出成Word格式試卷:examService.exportWord(eId);
6)返回試卷生成成功信息
可以看出,控制層只是調(diào)用Service層中的方法,而沒有方法的具體實(shí)現(xiàn)。Service服務(wù)層對象通過@Autowired注解,被注入控制器類中,這避免了實(shí)例化帶來的代碼耦合問題。
3.2.3 Service服務(wù)層
Service服務(wù)層分為Service接口與ServiceImpl實(shí)現(xiàn)類,控制層直接調(diào)用Service接口但不用關(guān)心此接口的具體實(shí)現(xiàn)。這樣的分離隱藏了代碼的實(shí)現(xiàn)細(xì)節(jié),具有封裝性、高內(nèi)聚性的特點(diǎn)。Spring框架通過@Service注解將ServiceImpl注冊成服務(wù)類,存放于Spring容器中,供控制類調(diào)用。
以ExamService中插入試卷方法的具體實(shí)現(xiàn)為例:插入試卷信息,需要向數(shù)據(jù)庫中exam、exam_question、exam_questiontype三張表中插入相應(yīng)數(shù)據(jù),考慮到數(shù)據(jù)一致性的問題,使用Spring中的@Transaction注解,實(shí)現(xiàn)對插入試卷信息功能的事務(wù)管理。向數(shù)據(jù)庫中插入數(shù)據(jù)的方法在Dao層中實(shí)現(xiàn),因此ExamService需調(diào)用Dao層中examMapper對象的insert方法,Dao層的對象實(shí)例同樣通過@Autowired注解注入ServiceImpl類中。
3.2.4 Dao數(shù)據(jù)訪問層
數(shù)據(jù)訪問層主要對數(shù)據(jù)庫進(jìn)行操作,并將處理結(jié)果封裝成實(shí)體對象返回給服務(wù)層[5]。數(shù)據(jù)訪問層采用MyBatis框架,通過Mapper.xml映射文件中的SQL語句,對數(shù)據(jù)庫進(jìn)行基本的 CRUD操作。通過在Spring配置文件中聲明Dao層所在的包名稱,Spring容器實(shí)現(xiàn)對Dao層中的Mapper接口以及Mapper映射文件的管理。Mapper接口與Mapper.xml映射文件一一對應(yīng),以方法名為id所對應(yīng)的配置內(nèi)容就是操作數(shù)據(jù)庫的SQL語句。例如examMapper接口中的insert(Exam exam)方法,在examMappper.xml映射文件中,有以下映射語句與其對應(yīng): insert sql
3.2.5 Model模型層
模型層中存放的是與數(shù)據(jù)庫中表相對應(yīng)的POJO(Plan Ordinary Java Object),表中的字段對應(yīng)模型中的成員變量。模型對象負(fù)責(zé)在數(shù)據(jù)庫中存取數(shù)據(jù),除此之外,層與層之間的數(shù)據(jù)傳輸也大量使用模型對象。
4 系統(tǒng)核心功能的實(shí)現(xiàn)
該系統(tǒng)的核心功能有:自動、手動生成試卷、導(dǎo)出Word格式試卷。其他諸如管理科目、知識點(diǎn)、題型、題目的功能都是為這兩個功能提供服務(wù)。
4.1 遺傳算法實(shí)現(xiàn)自動組卷功能
遺傳算法是模擬達(dá)爾文生物進(jìn)化論,從而得到問題最優(yōu)解的算法。傳統(tǒng)遺傳算法容易陷入局部極值,出現(xiàn)過成熟的情況[6]。該系統(tǒng)針對組卷這一實(shí)際場景進(jìn)行調(diào)參優(yōu)化,主要體現(xiàn)在:對題目采取實(shí)數(shù)編碼、對試卷采取分段實(shí)數(shù)編碼、有條件產(chǎn)生初始種群、變異算子的有效選擇。算法關(guān)鍵步驟如下所示:
1)設(shè)計基因編碼:傳統(tǒng)的遺傳算法編碼使用二進(jìn)制編碼,即用一串二進(jìn)制數(shù)表示每個基因。該系統(tǒng)中改進(jìn)遺傳算法,采用實(shí)數(shù)編碼,用一個唯一實(shí)數(shù)表示每道題目。
2)初始種群的設(shè)計與實(shí)現(xiàn):該系統(tǒng)在一定條件下產(chǎn)生種群。遺傳算法的實(shí)現(xiàn)封裝在geneticAlgorithm方法中,方法接受兩個參數(shù):questionDB題庫、expectExam期望試卷。產(chǎn)生種群操作,便是按照用戶期望的試卷信息,在滿足總分以及各題型數(shù)目的條件下,從questionDB中隨機(jī)選擇題目,形成初始種群。
3)設(shè)計適應(yīng)度函數(shù):適應(yīng)度函數(shù)用來評價試卷個體的質(zhì)量。適應(yīng)度用浮點(diǎn)數(shù)表示,適應(yīng)度值越大,對環(huán)境的適應(yīng)能力越強(qiáng),被選擇繁殖后代的幾率越大[7]。因?yàn)樵诋a(chǎn)生初始種群時已經(jīng)考慮過題型、題量、試卷總分,因此現(xiàn)在只需要考慮試卷難度系數(shù)以及知識點(diǎn)覆蓋率。題目的難易等級[8]設(shè)計為5級:很容易、容易、中等、困難、很困難,分別用5個0-1的小數(shù)表示。試卷難度系數(shù)P=第i題的難易等級值×分值/總分。知識點(diǎn)覆蓋率R=試卷中已包含的知識點(diǎn)數(shù)M/用戶期望包含的知識點(diǎn)個數(shù)N[9]。適應(yīng)度與知識點(diǎn)覆蓋率成正比;與試卷難度系數(shù)和用戶期望的難度系數(shù)之差的絕對值成反比,適應(yīng)度函數(shù)如下所示:
[f=1-1-R*f1-EP-p*f2]
其中f1和f2分別代表試卷知識點(diǎn)覆蓋率的權(quán)重以及試卷難度系數(shù)的權(quán)重,EP代表用戶期望的適應(yīng)度。
4)算子的設(shè)計與實(shí)現(xiàn):遺傳算法共有選擇、交叉、變異三種算子。選擇算子的作用是從當(dāng)前群體中選出優(yōu)良個體,使它們有機(jī)會作為父代,產(chǎn)生后代個體[10]。該系統(tǒng)使用輪盤賭算法挑選試題,適應(yīng)度越大的個體被選中的概率越大。交叉是按照題型對兩套試卷中的題目進(jìn)行交換操作,整張試卷即表現(xiàn)為分段多點(diǎn)交叉。變異操作是隨機(jī)對試卷中的一道題目進(jìn)行變異,系統(tǒng)改進(jìn)變異后算子的選擇操作:變異后的題目要求和原題目題型相同、題目id不同、知識點(diǎn)屬于用戶期望知識點(diǎn)集合與試卷中不存在知識點(diǎn)集合的交集。
遺傳算法實(shí)現(xiàn)偽代碼如下:
geneticAlgorithms(questionDB,expectExam)//入?yún)轭}庫和期望試卷
count=1;//迭代計數(shù)器
initMass(30,expectedExam,questionDB);//初始種群,種群個體數(shù)目為30
while(種群中個體適應(yīng)度未達(dá)到期望適應(yīng)度))
count達(dá)到最大迭代次數(shù)無結(jié)果,退出
種群數(shù)量<=1,退出
select(unitList,20);//選擇,選擇后的種群大小為20
cross(unitList,15,expectedExam);//交叉,交叉后的種群大小為15
if(種群中有個體適應(yīng)度達(dá)到期望適應(yīng)度) break;
change(unitList,questionDB,expectedExam);//變異
4.2 導(dǎo)出Word格式試卷功能的設(shè)計與實(shí)現(xiàn)
該系統(tǒng)采用FreeMaker模板技術(shù),實(shí)現(xiàn)生成Word格式試卷的功能,該功能實(shí)現(xiàn)流程如下:1)制作Word模板,將需要改變的地方用占位符表述,保存為ftl(FreeMarker模板文件)類型文件;2)查詢所需數(shù)據(jù);3)處理包含圖片的試題信息:在ftl文件編碼時,需要將圖片信息以base64編碼存儲在ftl文件中,文件末尾規(guī)定著各種資源的引用位置,而實(shí)際展示圖片的body部分只是做一個引用。因此,ftl文件需要改動三個地方:base64編碼部分${imagesBase64},聲明資源引用位置 ${imagesXmlHrefString},body中的引用代碼。處理圖片信息,主要就是處理以上三個地方;4)用數(shù)據(jù)替換占位符,并寫入Word模板文件中。
5 結(jié)束語
該文描述了以遺傳算法為核心的基于SSM框架的自動組卷系統(tǒng)的設(shè)計以及實(shí)現(xiàn)過程。通過一系列功能模塊,系統(tǒng)實(shí)現(xiàn)了對組卷過程的有效管理。目前該系統(tǒng)各模塊功能運(yùn)行良好,但是關(guān)于試題難易等級的設(shè)置,未有充足的反饋信息來支撐。因此,試題反饋模塊以及進(jìn)一步的組卷算法優(yōu)化是組卷系統(tǒng)未來需要考慮的。
參考文獻(xiàn):
[1] 黃國政. 基于遺傳算法的自動組卷系統(tǒng)的設(shè)計與實(shí)現(xiàn)[D]. 南京: 南京理工大學(xué), 2008.
[2] 李洋. SSM框架在Web應(yīng)用開發(fā)中的設(shè)計與實(shí)現(xiàn)[J]. 計算機(jī)技術(shù)與發(fā)展, 2016, 26(12): 190-194.
[3] 鄒紅霆. 基于SSM框架的Web系統(tǒng)研究與應(yīng)用[J]. 湖南理工學(xué)院學(xué)報: 自然科學(xué)版, 2017, 30(1): 39-43.
[4] 任曉鵬, 趙文兵, 張春平. 基于框架的Web系統(tǒng)開發(fā)研究[J]. 計算機(jī)工程與設(shè)計, 2010, 31(4): 772-775.
[5] 魏書寒. 基于SSM框架的圖書管理系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J]. 工業(yè)控制計算機(jī), 2017, 30(7): 133-134.
[6] 李勇, 曹廣益, 朱新堅. 一種基于復(fù)合交叉的實(shí)數(shù)編碼遺傳算法[J]. 計算機(jī)仿真, 2006(6).
[7] 于淼, 王日宏. 改進(jìn)遺傳算法在自動組卷中的應(yīng)用研究[J]. 計算機(jī)工程與應(yīng)用, 2008(25): 236-238.
[8] 柳浪濤, 谷林. 自動組卷系統(tǒng)試題難度和知識點(diǎn)覆蓋控制算法[J]. 西安工程大學(xué)學(xué)報, 2015, 29(3): 320-324.
[9] 黃艷峰, 陳濤. 基于改進(jìn)遺傳算法的智能組卷系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J]. 煤炭技術(shù), 2009, 28(10): 150-151.
[10] 夏愛月. 基于遺傳算法的自動組卷系統(tǒng)研究與實(shí)現(xiàn)[J]. 電腦編程技巧與維護(hù), 2009(2): 94-95.
硬核推薦閱讀
SCIE
SCIE
SCIE
SCIE
SCIE、SCI
SCIE
SCIE
SCIE
SCIE
SCIE
SCI、SCIE
SCIE