国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于圖的連通性指標(biāo)實(shí)現(xiàn)知識(shí)點(diǎn)的最優(yōu)推薦

2021-07-27 00:02:49趙鴻昌

摘? ?要:文章以加權(quán)無向圖的連通性作為量化評(píng)價(jià)指標(biāo),在鞏固復(fù)習(xí)階段實(shí)現(xiàn)了基于知識(shí)點(diǎn)網(wǎng)絡(luò)的學(xué)習(xí)內(nèi)容最優(yōu)推薦,能對(duì)全部知識(shí)點(diǎn)做整體掌控性練習(xí)。知識(shí)點(diǎn)網(wǎng)絡(luò)具有固有權(quán)值、已練習(xí)權(quán)值和待練習(xí)權(quán)值,通過遍歷待練習(xí)知識(shí)點(diǎn)能得到待練習(xí)權(quán)值及知識(shí)點(diǎn)網(wǎng)絡(luò)的最優(yōu)連通性指標(biāo)。文章對(duì)49個(gè)知識(shí)點(diǎn)的小型Linux腳本題庫給出了求取連通性指標(biāo)的前后端兩種實(shí)現(xiàn)方法,并在應(yīng)用場(chǎng)景下實(shí)現(xiàn)了針對(duì)學(xué)生個(gè)體的一步和多步最優(yōu)推薦,以及針對(duì)班級(jí)和學(xué)習(xí)小組的最優(yōu)推薦。實(shí)踐結(jié)果表明:最優(yōu)推薦的有效性與教師的直覺相吻合,學(xué)生反映知識(shí)結(jié)構(gòu)性明顯增強(qiáng),學(xué)習(xí)的主動(dòng)性也增強(qiáng),并獲得較好的知識(shí)遷移能力。該案例為教育信息化軟件應(yīng)用于素質(zhì)教育的內(nèi)涵式提升給出了有益的借鑒。

關(guān)鍵詞:知識(shí)點(diǎn)網(wǎng)絡(luò);圖的連通性;最優(yōu)推薦策略;矩陣特征值

中圖分類號(hào):G434 文獻(xiàn)標(biāo)志碼:B 文章編號(hào):1673-8454(2021)12-0085-07

一、引言

以《國(guó)家職業(yè)教育改革實(shí)施方案》等文件作為指引,教師、教材和教法的研究已經(jīng)成為教育界各級(jí)各類教師普遍關(guān)注的熱點(diǎn)[1],尤其在當(dāng)前線上教育蓬勃發(fā)展的大背景下,改進(jìn)線上個(gè)性化學(xué)習(xí)效果更是教法研究的重中之重。個(gè)性化學(xué)習(xí)能破解優(yōu)質(zhì)教師資源不足的難題,又能充分利用現(xiàn)代信息技術(shù),特別是大數(shù)據(jù)和人工智能等技術(shù),來加速推動(dòng)教育信息化,提高教育的效率和質(zhì)量,實(shí)質(zhì)上相當(dāng)于用技術(shù)手段有效擴(kuò)大優(yōu)質(zhì)教師資源的影響力。

理想的個(gè)性化學(xué)習(xí)一般需要兩個(gè)前提:一是富于經(jīng)驗(yàn)的教師設(shè)計(jì)好電子題庫,庫中諸多基礎(chǔ)知識(shí)點(diǎn)和應(yīng)用類型知識(shí)點(diǎn)聯(lián)系緊密,形成關(guān)系復(fù)雜的網(wǎng)狀連接即知識(shí)點(diǎn)網(wǎng)絡(luò);二是有適合學(xué)生當(dāng)前學(xué)習(xí)階段的知識(shí)點(diǎn)推薦策略。知識(shí)點(diǎn)網(wǎng)絡(luò)形式的電子題庫目前已經(jīng)有了一些研究。例如,根據(jù)所設(shè)置的題型題量、題目覆蓋次數(shù)和題目間的包含容斥關(guān)系,已有研究者構(gòu)建了基于SystemVerilog語言的全自動(dòng)約束隨機(jī)抽題組卷系統(tǒng)[2]。而推薦策略目前則只有隨機(jī)推薦和電商平臺(tái)中的相似推薦兩類可供借鑒,前者目標(biāo)不明確,而后者需要做大量結(jié)構(gòu)化數(shù)據(jù)的特征相關(guān)度分析以挖掘用戶的歷史喜好信息,并不完全適合學(xué)習(xí)過程的各個(gè)階段。

學(xué)習(xí)主要分為三個(gè)階段:知識(shí)點(diǎn)識(shí)記、知識(shí)點(diǎn)應(yīng)用和知識(shí)點(diǎn)創(chuàng)新。學(xué)習(xí)的前期主要涉及前兩個(gè)階段。知識(shí)點(diǎn)只有熟練才能應(yīng)用,因此需要反復(fù)“刷題”,以從不同側(cè)面理解知識(shí)點(diǎn)。一般基于教材、習(xí)題冊(cè)或電子題庫開展練習(xí)。此外,練習(xí)的技巧與學(xué)習(xí)的階段又密切相關(guān)。例如,初次學(xué)習(xí)階段與鞏固復(fù)習(xí)階段對(duì)知識(shí)點(diǎn)的練習(xí)需求完全不同。初次學(xué)習(xí)階段一般需要臨近式學(xué)習(xí),重在練習(xí)與當(dāng)前知識(shí)點(diǎn)關(guān)系密切的知識(shí)點(diǎn),容易產(chǎn)生“舉一反三”的效果從而增強(qiáng)學(xué)習(xí)信心,這已是教育界的共識(shí)。而鞏固復(fù)習(xí)階段的練習(xí)策略則需要在整體框架下統(tǒng)籌設(shè)計(jì)以產(chǎn)生最好的學(xué)習(xí)效果,要在有限的學(xué)習(xí)時(shí)間內(nèi),對(duì)所有知識(shí)點(diǎn)做整體掌控性的練習(xí),獲得知識(shí)點(diǎn)應(yīng)用能力的最大提升。

綜上所述,以優(yōu)秀教師提供的知識(shí)點(diǎn)網(wǎng)絡(luò)為基礎(chǔ),需要深入研究鞏固復(fù)習(xí)階段知識(shí)點(diǎn)的最優(yōu)練習(xí)策略。既不能簡(jiǎn)單地隨機(jī)推薦知識(shí)點(diǎn)開展“題?!笔骄毩?xí),也不能漫無目標(biāo)地利用人工智能等先進(jìn)技術(shù)推薦知識(shí)點(diǎn)。目前尚缺少一個(gè)能夠達(dá)成共識(shí)的策略,原因在于知識(shí)點(diǎn)網(wǎng)絡(luò)的整體掌控程度缺乏量化的評(píng)價(jià)指標(biāo)。

本文針對(duì)上述研究背景,提出了一種基于代數(shù)圖論中圖連通性指標(biāo)的最優(yōu)知識(shí)點(diǎn)推薦策略,在鞏固復(fù)習(xí)階段基于知識(shí)點(diǎn)網(wǎng)絡(luò)實(shí)現(xiàn)個(gè)性化學(xué)習(xí)。學(xué)習(xí)過程中,記錄每個(gè)學(xué)生的練習(xí)程度,多個(gè)學(xué)生的練習(xí)程度還可以疊加。最優(yōu)知識(shí)點(diǎn)推薦的對(duì)象可以是學(xué)生個(gè)體,也可以是學(xué)習(xí)小組,還可以是班級(jí)整體,甚至可以是年級(jí)或更大規(guī)模的組。因此,這種推薦策略不但可以指導(dǎo)學(xué)生自主練習(xí),還可以為教師推薦作業(yè)和習(xí)題課的內(nèi)容,為翻轉(zhuǎn)課堂和線上線下混合教學(xué)的開展提供了有效的技術(shù)支撐。

二、知識(shí)點(diǎn)網(wǎng)絡(luò)的連通性指標(biāo)

如上所述,需要研究鞏固復(fù)習(xí)階段基于知識(shí)點(diǎn)網(wǎng)絡(luò)的最優(yōu)練習(xí)策略。圖1所示的知識(shí)點(diǎn)網(wǎng)絡(luò)由知識(shí)點(diǎn)及之間的連線組成,每條連線賦予一個(gè)非負(fù)的固有權(quán)值,表示所連接兩個(gè)知識(shí)點(diǎn)之間的關(guān)系緊密程度,權(quán)值越大則關(guān)系越密切,連線也越粗。每當(dāng)練習(xí)了一個(gè)知識(shí)點(diǎn),則把與該知識(shí)點(diǎn)相連的所有知識(shí)點(diǎn)之間的連線權(quán)值加1,如圖1中“生成20行hi”這個(gè)知識(shí)點(diǎn)練習(xí)了一次,就把圖中高亮的知識(shí)點(diǎn)與它之間連線的權(quán)值加1。因此,任何時(shí)刻知識(shí)點(diǎn)網(wǎng)絡(luò)已經(jīng)確定的權(quán)值由兩部分作和:一是反映知識(shí)點(diǎn)之間內(nèi)在關(guān)聯(lián)的固有權(quán)值;二是反映學(xué)習(xí)練習(xí)過程的已練習(xí)權(quán)值。如果是多人學(xué)習(xí)小組,則知識(shí)點(diǎn)網(wǎng)絡(luò)的權(quán)值就取作固有權(quán)值與所有學(xué)生已練習(xí)權(quán)值之和。

任何時(shí)刻除了確定的權(quán)值之外,知識(shí)點(diǎn)網(wǎng)絡(luò)的權(quán)值還有未確定的因素即待練習(xí)權(quán)值,這就是需要最優(yōu)推薦的待練習(xí)知識(shí)點(diǎn)對(duì)應(yīng)權(quán)值。假設(shè)優(yōu)秀教師提供的知識(shí)點(diǎn)網(wǎng)絡(luò)是全連通的,即在固有權(quán)值的狀態(tài)下就已經(jīng)是全連通的,那么加入已練習(xí)權(quán)值和待練習(xí)權(quán)值后連通程度更強(qiáng),連通程度可以由代數(shù)圖論中圖的Laplacian矩陣來表征,該矩陣是半正定矩陣且最小特征值為0[3]。在無線傳感網(wǎng)和多智能體協(xié)同控制的研究領(lǐng)域中,通常選取上述矩陣的第二小特征值作為連通性指標(biāo)[4],這對(duì)于知識(shí)點(diǎn)網(wǎng)絡(luò)同樣適用。孤立的知識(shí)點(diǎn)越多則知識(shí)點(diǎn)網(wǎng)絡(luò)越呈現(xiàn)出碎片化而不易學(xué)習(xí)(學(xué)習(xí)更需要強(qiáng)記)的特征,連通性越強(qiáng)則知識(shí)點(diǎn)之間不同側(cè)面串聯(lián)的應(yīng)用場(chǎng)景越多。因此,給定知識(shí)點(diǎn)網(wǎng)絡(luò)的固有權(quán)值和已練習(xí)權(quán)值,問題歸結(jié)為再練習(xí)哪個(gè)知識(shí)點(diǎn)獲得的待練習(xí)權(quán)值能讓連通性指標(biāo)最大。

三、實(shí)現(xiàn)方案與關(guān)鍵代碼

1.系統(tǒng)結(jié)構(gòu)

系統(tǒng)由客戶端、服務(wù)器和計(jì)算引擎三部分組成,如圖2所示。其中,計(jì)算引擎的實(shí)現(xiàn)方式具有一定的靈活性,可以在服務(wù)器實(shí)現(xiàn),也可以在客戶端的瀏覽器上實(shí)現(xiàn),還可以分散在服務(wù)器和客戶端實(shí)現(xiàn),因服務(wù)器性能和計(jì)算負(fù)載而定。服務(wù)器上的JSON文件是客戶端和服務(wù)器之間數(shù)據(jù)交換的標(biāo)準(zhǔn)格式,記錄了知識(shí)點(diǎn)網(wǎng)絡(luò)的全部信息,由客戶端讀取并顯示給用戶。JSON文件由電子題庫生成,不同電子題庫格式對(duì)應(yīng)不同的生成規(guī)則??蛻舳诉€要提交已練習(xí)的知識(shí)點(diǎn)號(hào)給服務(wù)器,生成的練習(xí)過程數(shù)據(jù)用在計(jì)算引擎中,而計(jì)算引擎的工作過程相對(duì)復(fù)雜,共有三步:①由JSON文件生成節(jié)點(diǎn)度矩陣;②由三種權(quán)值和JSON文件計(jì)算出鄰接矩陣;③再遍歷待練習(xí)的知識(shí)點(diǎn)號(hào),并通過多次計(jì)算Laplacian矩陣的第二小特征值得到最優(yōu)的連通性指標(biāo)和最優(yōu)待練習(xí)的知識(shí)點(diǎn)號(hào)。

由圖2可知,本系統(tǒng)結(jié)構(gòu)的優(yōu)點(diǎn)在于對(duì)學(xué)生個(gè)體和班級(jí)整體作最優(yōu)推薦的流程完全相同,差別只在于收集一個(gè)人或所有人的練習(xí)過程文件,此類操作只引入極少的計(jì)算負(fù)荷。

2.電子題庫設(shè)計(jì)

知識(shí)點(diǎn)網(wǎng)絡(luò)包括知識(shí)點(diǎn)本身和知識(shí)點(diǎn)之間的連線,每條連線具有不同的固有權(quán)值。知識(shí)點(diǎn)網(wǎng)絡(luò)記錄在JSON文件中,而JSON文件則來自于電子題庫。電子題庫的格式設(shè)計(jì)重在簡(jiǎn)潔高效,既要便于生成JSON文件,也要考慮網(wǎng)頁前端顯示的易用性,又要盡量減少教師長(zhǎng)期維護(hù)的工作量。以如下格式Linux腳本電子題庫為例:

level1

生成一行hi? ? ? 用echo在屏幕上打印hi? ? echo hi

生成一行echo? ? 用echo命令在屏幕上打印echo? ? ? echo echo

……

level2

生成20行hi? ? ? 用不用awk實(shí)現(xiàn)。 seq 20 | xargs -i echo hi

生成5個(gè)目錄? ? ?目錄名依次為1,2,3,4,5。 seq 5 | xargs -i mkdir {}

……

level3

用grep取前3行? ?先seq 5,再用grep取出前3行來。? seq 5 | grep -m 3 "."

用sed取前3行? ? 先seq 5,再用sed取出前3行來。? ?seq 5 | sed -n '1,3p'

用sed加空行? ? ?先seq 5,再用sed每行后面加兩個(gè)空行。? ? seq 5 | sed 'G;G'

……

level4

生成20行hi? ? ? 用awk循環(huán)實(shí)現(xiàn)? ? echo hi | awk '{ for(i=0;i<20;i++) print $0}'

用awk取前3行? ? 先seq 5,再用awk取出前3行來。? ?seq 5 | awk '{if(NR<4){print $0}}'

……

level5

不用tac反序顯示 先用seq 4,再用awk實(shí)現(xiàn)反序顯示。? seq 3 | awk '{i=$0"\n"i} END{printf i}'

……

該題庫共有49個(gè)知識(shí)點(diǎn),所有知識(shí)點(diǎn)按難度組織成level1到level5的級(jí)別,前三個(gè)級(jí)別屬于基礎(chǔ)知識(shí)點(diǎn),后兩個(gè)級(jí)別是應(yīng)用類型的知識(shí)點(diǎn)。每個(gè)知識(shí)點(diǎn)包括三個(gè)字段:功能描述、詳細(xì)信息以及實(shí)現(xiàn)該功能的Linux腳本具體命令,字段之間用跳格隔開。如此設(shè)計(jì)不但方便教師整理知識(shí)點(diǎn),還方便網(wǎng)頁以“刷題”方式顯示前兩個(gè)字段,又方便用靜態(tài)隱藏且鼠標(biāo)懸停的效果顯示第三個(gè)字段(答案)。另外,教師只需關(guān)注知識(shí)點(diǎn)本身和難度分類,知識(shí)點(diǎn)之間連線的固有權(quán)值由腳本自動(dòng)生成,知識(shí)點(diǎn)號(hào)也由行號(hào)自動(dòng)生成,最大限度地降低了人工維護(hù)成本。

3.JSON格式與知識(shí)點(diǎn)網(wǎng)絡(luò)

知識(shí)點(diǎn)網(wǎng)絡(luò)源自電子題庫,但其載體是JSON文件,其中最重要的信息是自動(dòng)生成知識(shí)點(diǎn)之間連線的固有權(quán)值,在計(jì)算引擎中用以生成節(jié)點(diǎn)度矩陣和鄰接矩陣。眾所周知,Linux腳本命令行以管道符號(hào)“|”連接多級(jí)簡(jiǎn)單腳本命令,而簡(jiǎn)單腳本命令如echo、seq、sed、awk等一般只用到20個(gè)左右。對(duì)于這種情況,連線間固有權(quán)值(見下文JSON格式中的“weight”參數(shù))就取作兩個(gè)知識(shí)點(diǎn)的Linux腳本具體命令中同時(shí)出現(xiàn)的簡(jiǎn)單腳本命令數(shù)目。為方便網(wǎng)頁和服務(wù)器進(jìn)行數(shù)據(jù)交換,將上述電子題庫轉(zhuǎn)換成JSON格式。其中,知識(shí)點(diǎn)的名字取作該知識(shí)點(diǎn)所在電子題庫文件中的行號(hào),而“numOfPipes”參數(shù)則表示Linux腳本具體命令中的字符數(shù),字符數(shù)越多則知識(shí)點(diǎn)在圖1中就顯示為越大的橢圓,代表知識(shí)點(diǎn)的難易程度。此外,JSON格式中沒有知識(shí)點(diǎn)對(duì)應(yīng)的答案,答案是網(wǎng)頁中某知識(shí)點(diǎn)的鼠標(biāo)點(diǎn)擊事件觸發(fā)時(shí),用其名字在電子題庫中即時(shí)查找出來的。

{

"level1": [ { "name": "pp2",? "value":"生成一行hi",? "numOfChars":7}, { "name": "pp3",? "value":"生成一行echo",? "numOfChars":9} ……],

……

"level5": [ { "name": "pp50",? "value":"不用tail取后3行",? "numOfChars":70}, { "name": "pp51",? "value":"不用tac反序顯示",? "numOfChars":39}……],

"links": [

{"weight": 4, "source": "pp32", "target": "pp44"},

{"weight": 4, "source": "pp44", "target": "pp54"},

{"weight": 4, "source": "pp47", "target": "pp54"},

{"weight": 5, "source": "pp31", "target": "pp47"},

{"weight": 5, "source": "pp44", "target": "pp47"},

{"weight": 6, "source": "pp31", "target": "pp44"}

……

]

}

以上將電子題庫轉(zhuǎn)換成JSON格式的實(shí)現(xiàn)腳本過于復(fù)雜,此處只描述其核心思想。

第1步:為電子題庫文件加行號(hào),因此得到每個(gè)知識(shí)點(diǎn)前面的行號(hào),并加上“pp”用作“name”參數(shù)。

第2步:用awk中的length()函數(shù)統(tǒng)計(jì)每個(gè)知識(shí)點(diǎn)的Linux腳本具體命令中的字符數(shù),并把每個(gè)知識(shí)點(diǎn)整理成name、value和numOfChars格式。

第3步:將每個(gè)知識(shí)點(diǎn)中管道符號(hào)前后的基本命令提取出來,與知識(shí)點(diǎn)的“name”參數(shù)一起生成link文件,每行形如51 seq。

第4步:統(tǒng)計(jì)出任何兩個(gè)知識(shí)點(diǎn)之間相同基本命令的總數(shù)目,所用Linux腳本如下:

cat link | xargs -i sed 's/^/{} /g' link | \

awk '{if($1<$3 && $2==$4) print $1" "$3}'? | sort | uniq -c

其中整體分三步:①link文件與自身作信息擴(kuò)充即所有行全交叉,結(jié)果每行由2個(gè)字段變成4個(gè)字段,即兩個(gè)知識(shí)點(diǎn)的“name”參數(shù)和具體命令中的某個(gè)基本腳本命令。②根據(jù)源知識(shí)點(diǎn)和目標(biāo)知識(shí)點(diǎn)的對(duì)稱可互換性,只需用awk過濾出源知識(shí)點(diǎn)號(hào)更小的情況,并只顯示出兩個(gè)知識(shí)點(diǎn)的“name”參數(shù),表示兩者之間出現(xiàn)了一次相同的簡(jiǎn)單腳本命令。③排序并用uniq命令統(tǒng)計(jì)出所有知識(shí)點(diǎn)兩兩之間相同簡(jiǎn)單腳本命令的總數(shù)。

第5步:按JSON格式要求生成weight、source和target信息,并補(bǔ)齊所有匹配的區(qū)域定界符號(hào)。

4.生成Laplacian矩陣并求特征值

知識(shí)點(diǎn)網(wǎng)絡(luò)的Laplacian矩陣定義為無向圖的節(jié)點(diǎn)度矩陣與鄰接矩陣之差,其中鄰接矩陣則由固有權(quán)值、已練習(xí)權(quán)值和待練習(xí)權(quán)值疊加生成。因?yàn)橹R(shí)點(diǎn)的“name”參數(shù)取自電子題庫文件的行號(hào),所以,諸如“l(fā)evel1”這樣的行會(huì)讓知識(shí)點(diǎn)號(hào)有跳號(hào),生成Laplacian矩陣的第一步就需要把link文件中的知識(shí)點(diǎn)號(hào)轉(zhuǎn)換為無跳號(hào)的知識(shí)點(diǎn)號(hào),并且得到固有權(quán)值文件zlap.2。關(guān)鍵腳本如下:

cat 1tiku.txt | cat -n | grep level -v | cat -n | awk '{print $1" "$2}' > zlap.1.translation

cat zlap.1.translation? |? ?awk '{system("sed '\''s/ "$2" / "$1" /g'\''? -i zlap.2");}'

所生成的固有權(quán)值文件zlap.2格式為(第一個(gè)字段是固有權(quán)值,后兩個(gè)字段為知識(shí)點(diǎn)號(hào)):

1 9 10

1 9 11

1 9 12

1 9 13

……

下一步合并反映學(xué)習(xí)過程的已練習(xí)權(quán)值和待練習(xí)權(quán)值。實(shí)現(xiàn)策略是待練習(xí)的知識(shí)點(diǎn)號(hào)寫入zlap.input.1文件的同時(shí),再合并上每個(gè)學(xué)生已經(jīng)練習(xí)過的知識(shí)點(diǎn)文件zlap.learned,然后將這些知識(shí)點(diǎn)相關(guān)所有連線的權(quán)值依次加1,關(guān)鍵腳本如下:

cat zlap.input.1? <( find? allStudents/? |? grep zlap.learned? | xargs -i cat {}) \

| xargs -i \bash -c " grep \" {} \\\| {}\$\" zlap.2" \

| awk '{print "1 " $2" "$3}'? ?> zlap.2.learning

cat zlap.2? zlap.2.learning? > zlap.2.all

其中<(xxx)是Linux腳本中不常用的嵌入輸入數(shù)據(jù)管道,功能是將命令xxx的執(zhí)行結(jié)果作為cat命令除zlap.input.1之外的那一部分輸入數(shù)據(jù)流。

至此,知識(shí)點(diǎn)網(wǎng)絡(luò)的固有權(quán)值、已練習(xí)知識(shí)點(diǎn)對(duì)應(yīng)的權(quán)值和待練習(xí)知識(shí)點(diǎn)對(duì)應(yīng)的權(quán)值已合并到總權(quán)值文件zlap.2.all中,最后即由該文件生成節(jié)點(diǎn)度矩陣和鄰接矩陣進(jìn)而得出Laplacian矩陣及其特征值。關(guān)鍵腳本如下:

1 seq 49 | xargs -i bash -c " grep \" {} \\\| {}\$\" zlap.2.all | awk 'BEGIN{s=0;}{s=s+\$1;}END{print s}'? "? ? ?\

2? ?| sed '1i d=[' | sed '$a ];' | tr '\n' ' ' > zlap.3.degree

3 seq 49 | xargs -i bash -c "sed 's/^/{} /g' <(seq 49)" \

4? ?| xargs -i bash -c "echo -n hi: ; grep \" {}\$\"? zlap.2.all | awk '{print \$1}' \

5? ?| awk 'BEGIN{s=0;}{s=s+\$1;}END{print s}' \

6? ?| sed 's/\$/,/g' " | sed 's/hi:\([0-9]\)/\1/g' | sed 's/hi:/0,\n/g' \

7? ?| xargs -n 49 | sed 's/,$/;/g' | sed '1i a=[' | sed '$a ]; ' | tr '\n' ' ' > zlap.4.adja

8 cat zlap.3.degree? zlap.4.adja? | sed '$a eig(diag(d)-a-a'\'')' | octave 2> /dev/null

其中,首先生成節(jié)點(diǎn)度矩陣,算法見第1行。遍歷每個(gè)節(jié)點(diǎn)并從總權(quán)值文件中取出含有該節(jié)點(diǎn)號(hào)的行,這些行的第1列之和就是此節(jié)點(diǎn)的度,所有節(jié)點(diǎn)的度組成的對(duì)角矩陣即為節(jié)點(diǎn)度矩陣。其次由總權(quán)值文件生成鄰接矩陣,即對(duì)總權(quán)值文件進(jìn)行擴(kuò)充,把沒有連接關(guān)系的節(jié)點(diǎn)對(duì)的位置寫上數(shù)值0,見第3~6行,其中第3行再次應(yīng)用信息擴(kuò)充生成所有知識(shí)點(diǎn)號(hào)的全交叉。最后求取特征值用到的命令是octave,其要求的矩陣格式轉(zhuǎn)換與矩陣運(yùn)算代碼見第2、7、8行。

在只有固有權(quán)值的情況下,求取特征值的結(jié)果如下:

ans =

-5.7033e-15

1.7428e+00

5.0000e+00 ……

9.8136e+01

其中反映出知識(shí)點(diǎn)網(wǎng)絡(luò)的連通性指標(biāo)是1.7428,計(jì)算耗時(shí)不足1秒(配置為Intel 酷睿i5-3230M、內(nèi)存4GB、Ubuntu x64、octave版本4.0.0)。當(dāng)存在已練習(xí)權(quán)值和待練習(xí)權(quán)值時(shí),連通性指標(biāo)必將增加,關(guān)鍵是要找到讓增加量最大的情況:自變量是待練習(xí)的知識(shí)點(diǎn)號(hào),因變量是知識(shí)點(diǎn)網(wǎng)絡(luò)的連通性指標(biāo)。

四、應(yīng)用場(chǎng)景與性能測(cè)試

本文列舉典型應(yīng)用場(chǎng)景的功能需求及其實(shí)現(xiàn)方法,并對(duì)所得結(jié)果做了相應(yīng)的對(duì)比分析。其中,針對(duì)學(xué)生個(gè)體的一步最優(yōu)推薦是學(xué)生個(gè)性化學(xué)習(xí)時(shí)最常用的場(chǎng)景,針對(duì)班級(jí)整體的最優(yōu)推薦則是為教師推薦作業(yè)和習(xí)題課內(nèi)容的場(chǎng)景。

1.針對(duì)學(xué)生個(gè)體的一步最優(yōu)推薦

學(xué)生基于知識(shí)點(diǎn)網(wǎng)絡(luò)的學(xué)習(xí)過程就是反復(fù)練習(xí)所關(guān)注的知識(shí)點(diǎn),每當(dāng)練習(xí)完某個(gè)知識(shí)點(diǎn),該知識(shí)點(diǎn)號(hào)被存入服務(wù)器上每個(gè)學(xué)生已經(jīng)練習(xí)過的知識(shí)點(diǎn)文件zlap.learned中。在求取知識(shí)點(diǎn)網(wǎng)絡(luò)的連通性指標(biāo)時(shí),與文件zlap.learned中知識(shí)點(diǎn)相關(guān)的知識(shí)點(diǎn)之間連線的權(quán)值就會(huì)加1。根據(jù)代數(shù)圖論中圖的疊加理論可知,鄰接矩陣中的權(quán)值變大則Laplacian矩陣相應(yīng)的特征值均變大[3],特別地,Laplacian的第二小特征值即連通性指標(biāo)必將增加,反映出知識(shí)點(diǎn)網(wǎng)絡(luò)更強(qiáng)的連通性,符合常識(shí)。由此,只要遍歷所有待練習(xí)的知識(shí)點(diǎn)、相應(yīng)地改變鄰接矩陣的權(quán)值并多次求取Laplacian矩陣的特征值就能斷定應(yīng)學(xué)習(xí)的知識(shí)點(diǎn)。用到的腳本如下:

seq 49 | xargs -i bash -c "echo {} > zlap.input.1; ./zlaplacian.cmd "? \

| grep ans -A 3 | awk '{if(NR%5==4) print $0}' | cat -n | sort -k 2

其中的zlaplacian.cmd是求取一次連通性指標(biāo)的腳本,其內(nèi)容前已述及。

在只有固有權(quán)值而沒有已練習(xí)知識(shí)點(diǎn)的情況下,求取的最優(yōu)推薦知識(shí)點(diǎn)及其連通性指標(biāo)如表1所示。表1中的結(jié)果說明,學(xué)習(xí)者與固有權(quán)值情況下1.7428的連通性指標(biāo)相對(duì)照,按最優(yōu)推薦的知識(shí)點(diǎn)學(xué)習(xí),則連通性指標(biāo)有約50%的提升,而第6個(gè)最優(yōu)推薦知識(shí)點(diǎn)的連通性指標(biāo)則改進(jìn)甚微。由此可見,此49個(gè)知識(shí)點(diǎn)的電子題庫中只有5個(gè)知識(shí)點(diǎn)能讓連通性指標(biāo)有較為顯著的改進(jìn),因此最優(yōu)知識(shí)點(diǎn)推薦策略相比隨機(jī)推薦有相當(dāng)大的優(yōu)勢(shì)。

值得一提的是,針對(duì)學(xué)生個(gè)體的一步最優(yōu)推薦知識(shí)點(diǎn)是“統(tǒng)計(jì)詞頻”,這與筆者基于此電子題庫的教學(xué)實(shí)踐相吻合。該知識(shí)點(diǎn)一般都在前幾次課引入,而且大多數(shù)學(xué)生都在學(xué)習(xí)完此知識(shí)點(diǎn)之后感覺對(duì)Linux腳本的理解程度有了一定的質(zhì)變。此外,前5個(gè)最優(yōu)推薦的知識(shí)點(diǎn)都是關(guān)于echo命令的,而且其中3個(gè)知識(shí)點(diǎn)還十分基礎(chǔ),這符合Linux腳本中“一門深入”的練習(xí)策略。實(shí)際上,echo確實(shí)是表面上很簡(jiǎn)單但實(shí)際上很難的命令,它串起了Linux腳本中幾乎所有的功能點(diǎn),通過反復(fù)練習(xí)和試錯(cuò)可以發(fā)現(xiàn)它的諸多疑難功能點(diǎn),從而激發(fā)學(xué)習(xí)的興趣。另外,還可以不斷強(qiáng)化這些功能點(diǎn):命令和參數(shù)的不同、不使用輸入數(shù)據(jù)流、回車符是否存在的驗(yàn)證方法、命令管道中的信息放入數(shù)據(jù)管道中、回顯二進(jìn)制數(shù)據(jù)以及生成一行數(shù)據(jù)和多行數(shù)據(jù)。

2.一步最優(yōu)推薦代碼的性能測(cè)試

以上實(shí)現(xiàn)的一步最優(yōu)推薦計(jì)算引擎位于服務(wù)器上,為降低服務(wù)器并發(fā)處理的負(fù)荷,計(jì)算引擎還可以用JavaScript實(shí)現(xiàn)在前端瀏覽器上?,F(xiàn)代瀏覽器運(yùn)行高性能矩陣運(yùn)算庫Math.js時(shí)可以用GPU加速,對(duì)于一般配置的計(jì)算機(jī)在性能上可能不輸于多人共用的服務(wù)器[5]。利用Math.js庫在瀏覽器端作矩陣運(yùn)算,實(shí)測(cè)性能大約7秒遍歷所有49個(gè)知識(shí)點(diǎn),即完成一步最優(yōu)推薦(配置:Intel 酷睿i5-3230M、內(nèi)存4GB、64位Chrome瀏覽器),能夠滿足學(xué)生個(gè)性化學(xué)習(xí)推薦的實(shí)時(shí)性要求。關(guān)鍵JavaScript代碼如下:

links = this.responseText.split('\n');

seq49 = Array.from(new Array(49), (item, index) => index + 1);

seq49.map( N =>{

allLinks = links.concat(links.filter(b=>b.includes(" "+N+" ")||b.endsWith(" "+N)).map(a=>{

return "1 "+a.split(' ')[1]+" "+a.split(' ')[2]; }) );

allDegrees = seq49.map( a=> {

return allLinks.filter(b=>b.includes(" "+a+" ")||b.endsWith(" "+a)).map( b=>{

return b.split(' ')[0]; }).reduce( (a, b) => parseInt(a)+parseInt(b)); });

D = math.matrix( math.evaluate("diag([".concat(allDegrees).concat("])")) );

var pA= [];

seq49x49 = seq49.map( a=>{ return seq49.map( b=>""+b+" "+a); }).flat();

seq49x49.map( a=>{ Edges= allLinks.filter( b=>b.endsWith(" "+a));

if( Edges.length!=0)

pA.push("" +Edges.map(b=>{return b.split(' ')[0]}).reduce((a, b)=> (a-0)+(b-0)));

else pA.push("0"); });

mA = math.multiply(math.matrix(math.evaluate("[["+arrTrans(49,pA).join("],[")+"]]")),-1);

eigs= math.eigs( math.add( D, math.add( mA,math.transpose(mA))) ).values;

console.log( N );? console.log( eigs._data[1] );

});

以上代碼中的輸入文件links是Ajax異步訪問固有權(quán)值文件zlap.2的結(jié)果,節(jié)點(diǎn)度矩陣與鄰接矩陣的算法與之前Linux腳本的實(shí)現(xiàn)完全相同,最終求取矩陣特征值時(shí)調(diào)用的不再是Linux服務(wù)器上的octave命令,而是Math.js庫提供的函數(shù)。代碼的難點(diǎn)在于“(a-0)”和“(b-0)”使用了JavaScript的弱類型特性將字符串轉(zhuǎn)為數(shù)值,另外,定制的函數(shù)arrTrans將一維數(shù)組轉(zhuǎn)換成二維數(shù)組,類似Linux腳本中的xargs -n功能。

通過在教學(xué)中著重對(duì)比引入同一功能的Linux腳本實(shí)現(xiàn)和JavaScript語言實(shí)現(xiàn),大多數(shù)學(xué)生從常見功能上獲取了從Linux腳本語言向JavaScript語言的自主學(xué)習(xí)遷移能力:map類似xargs–i、filter類似grep、push相當(dāng)于sed–i、concat相當(dāng)于cat、reduce相當(dāng)于tr? '\n' ' '? |? bc。學(xué)生在對(duì)比Linux腳本語言和JavaScript語言的過程中,以很小的學(xué)習(xí)成本從頂層上掌握了JavaScript語言,創(chuàng)造力得到了極大鍛煉,對(duì)編程語言類課程實(shí)現(xiàn)了一定程度的融會(huì)貫通。

3.針對(duì)學(xué)生個(gè)體的多步最優(yōu)推薦

以學(xué)生個(gè)體的一步最優(yōu)推薦為基礎(chǔ),實(shí)現(xiàn)多步最優(yōu)推薦只需要將待練習(xí)的知識(shí)點(diǎn)號(hào)寫入zlap.input.1文件,不同僅在于前者只寫一個(gè)知識(shí)點(diǎn)號(hào)而后者寫多個(gè)知識(shí)點(diǎn)號(hào)。例如,基于49個(gè)知識(shí)點(diǎn)號(hào)的信息擴(kuò)充,即得到2401種兩步學(xué)習(xí)的可能性,要在這里找學(xué)生個(gè)體的兩步最優(yōu)推薦,關(guān)鍵代碼如下:

seq 49 | xargs -i bash -c "sed 's/^/{} /g' <(seq 49)" \

| xargs -i bash -c "echo {}| tr ' ' '\n' > zlap.input.1 ; echo {};? ./zlaplacian.cmd"\

| grep ans -A 3 -B 1 | awk '{if(NR%6==5 || NR%6==1) print $0? ? }' | xargs -n 3 | sort -k 3

其中,第1行代碼再次用到知識(shí)點(diǎn)號(hào)的信息擴(kuò)充策略生成所有學(xué)習(xí)方案;第2行把每個(gè)兩步學(xué)習(xí)可能方案的知識(shí)點(diǎn)號(hào)寫入zlap.input.1文件,然后顯示此學(xué)習(xí)方案并求取連通性指標(biāo)。

代碼的運(yùn)行結(jié)果如表2所示,可見兩步最優(yōu)推薦的知識(shí)點(diǎn)就是前幾個(gè)一步最優(yōu)推薦知識(shí)點(diǎn)的組合。因此,針對(duì)此題庫兩步最優(yōu)推薦完全可以拆分成兩次一步最優(yōu)推薦。此外,遍歷2401種兩步學(xué)習(xí)方案耗時(shí)也超過5分鐘,目前尚不適合作實(shí)時(shí)推薦。

4.針對(duì)班級(jí)或?qū)W習(xí)小組的最優(yōu)推薦

針對(duì)班級(jí)或?qū)W習(xí)小組作最優(yōu)推薦僅是針對(duì)學(xué)生個(gè)體最優(yōu)推薦的簡(jiǎn)單擴(kuò)展。學(xué)生個(gè)體練習(xí)過的知識(shí)點(diǎn)存放在其單獨(dú)的zlap.learned文件中,每行有一個(gè)知識(shí)點(diǎn),只要求取這些知識(shí)點(diǎn)對(duì)應(yīng)的已練習(xí)權(quán)值并全合并到總的權(quán)值文件zlap.2.all即可,其余的工作完全等同于針對(duì)學(xué)生個(gè)體推薦的情況,實(shí)現(xiàn)過程不存在任何技術(shù)難度,性能上也沒有引入任何瓶頸,不再贅述。

五、教學(xué)實(shí)踐分析

筆者在2019年春季學(xué)期、2019年秋季學(xué)期和2020年春季學(xué)期試用了Linux腳本的知識(shí)點(diǎn)網(wǎng)絡(luò)電子題庫。人數(shù)和班級(jí)數(shù)依次是3個(gè)班級(jí)共70人、6個(gè)班級(jí)共244人和4個(gè)班級(jí)共173人,大約按1∶1的人數(shù)比組織對(duì)比教學(xué)。結(jié)合教師的統(tǒng)一授課,學(xué)生在課堂上用一半時(shí)間鞏固復(fù)習(xí),按隨機(jī)推薦知識(shí)點(diǎn)練習(xí)或基于一步最優(yōu)推薦的最優(yōu)知識(shí)點(diǎn)開展練習(xí)。實(shí)際測(cè)試結(jié)果表明,按最優(yōu)推薦知識(shí)點(diǎn)學(xué)習(xí)的學(xué)生有很強(qiáng)的主動(dòng)性,課堂學(xué)習(xí)效果如圖3所示,學(xué)習(xí)的目標(biāo)也更明確。師生問答法測(cè)試結(jié)果表明,學(xué)生掌握整體知識(shí)結(jié)構(gòu)的速度明顯更快,學(xué)生反映“很快能看懂并能略微修改多級(jí)組合的復(fù)雜Linux腳本”并且“能簡(jiǎn)單創(chuàng)造兩三級(jí)腳本的組合”。由此可見,基于知識(shí)點(diǎn)網(wǎng)絡(luò)的實(shí)時(shí)一步最優(yōu)推薦系統(tǒng),可以很好地滿足鞏固復(fù)習(xí)階段對(duì)知識(shí)點(diǎn)的最優(yōu)練習(xí)策略。

圖3還反映出學(xué)生喜歡使用手勢(shì)來分析知識(shí)點(diǎn)之間的連接關(guān)系。實(shí)際上,多使用手勢(shì)這種具像的動(dòng)作有助于引導(dǎo)大腦內(nèi)部強(qiáng)化特定知識(shí)點(diǎn)之間的聯(lián)系,手勢(shì)可以提高創(chuàng)造力是心理學(xué)界近年的研究成果[6]。在細(xì)節(jié)方面,學(xué)生喜歡用手指類似走迷宮的方式探索低級(jí)知識(shí)點(diǎn)向高級(jí)知識(shí)點(diǎn)的進(jìn)化過程,厘清相似知識(shí)點(diǎn)的差異和應(yīng)用場(chǎng)合的區(qū)別。學(xué)生整體上喜歡在小組學(xué)習(xí)時(shí)用雙手的不同手勢(shì)向同伴展示某些知識(shí)點(diǎn)的類別劃分,加速小組的互學(xué)互助。小組討論和創(chuàng)造的氛圍很好,自我認(rèn)知內(nèi)驅(qū)力得到極大增強(qiáng)。例如,針對(duì)“生成兩列數(shù)1到5”這個(gè)知識(shí)點(diǎn),明顯不滿足于電子題庫中的一種實(shí)現(xiàn)方法,并在教師的引導(dǎo)下得到了以下多種解法(此處略去簡(jiǎn)單的變體):

方法一:seq 5? |? sed? p? ?|? xargs? -n? 2即生成5行數(shù),然后每行復(fù)制一次再兩行合并為一行。

方法二:seq? 5? |? xargs? -i? ?echo? {} {}即生成5行數(shù)再每行顯示兩次。

方法三:paste? <(seq 5)? <(seq 5)即利用嵌入輸入數(shù)據(jù)管道直接拼接為兩列。

方法四:seq? 5? |? cat? -n即生成5行數(shù)再加行號(hào)。

方法五:seq? 5? |? sed 's/\(.*\)/\1 \1/g'即用sed將每行內(nèi)容復(fù)制一次。

方法六:seq? 5? |? grep . -o -n? |? sed 's/:/ /g'即用grep只顯示匹配的內(nèi)容和行號(hào),并刪除多余的冒號(hào)。

方法七:seq? 5? |? awk '{print $0" "$0}'即用awk將每行內(nèi)容復(fù)制一次。

方法八:echo {11..15} | tr ' ' '\n' | sed 's/^\(.\)/\1 /g'即生成11到15再把每個(gè)數(shù)放一行,最后把每個(gè)數(shù)字分開。

方法九:echo {11..15} | sed 's/\(.\)\>/ \1 /g'? |? xargs -n 2即先把每個(gè)數(shù)字分開再兩行合并為一行。

方法十:seq 5 | xargs -i? echo -e "\x3{} \x3{}"即用16進(jìn)制轉(zhuǎn)換的方式把\x31顯示為數(shù)字1,\x32顯示作數(shù)字2,以此類推。

方法十一:用octave作矩陣的轉(zhuǎn)置,具體腳本為echo {1..5} | sed p | sed '1i a=[' | sed '$a ]'\''' | octave。

六、結(jié)語

全面應(yīng)用信息技術(shù)推動(dòng)教育信息化是“三教”改革的研究重點(diǎn)。本文基于知識(shí)點(diǎn)網(wǎng)絡(luò)形式的電子題庫,研究了待學(xué)習(xí)知識(shí)點(diǎn)的最優(yōu)推薦策略,為鞏固復(fù)習(xí)階段進(jìn)行個(gè)性化練習(xí)提供了最優(yōu)指引。此外,本文在學(xué)生創(chuàng)造力培養(yǎng)方面做了積極有益的探索。學(xué)生切實(shí)體驗(yàn)了功能塊對(duì)編程語言的細(xì)節(jié)屏蔽性、功能塊少而精和復(fù)雜算法靠人來創(chuàng)造的學(xué)習(xí)策略。強(qiáng)化練習(xí)少數(shù)編程語言細(xì)節(jié)無關(guān)的功能塊,并以此創(chuàng)造問題的多種解法,而不同編程語言的差別只在于用該編程語言相關(guān)的細(xì)節(jié)實(shí)現(xiàn)這些功能塊。

事實(shí)上,使用任何編程語言,在功能塊層面上組合創(chuàng)造的思路都是一樣的。因此,功能性編程作為L(zhǎng)inux腳本語言和大數(shù)據(jù)Spark環(huán)境原生Scala語言的最大優(yōu)勢(shì),逐漸也引入到JavaScript語言和Java語言中,優(yōu)勢(shì)在于程序易測(cè)試、易掌控和易并行化,算法實(shí)現(xiàn)上需要對(duì)功能塊作創(chuàng)造性組合,而對(duì)語言細(xì)節(jié)的依賴程度更低。學(xué)生在對(duì)比Linux腳本語言和JavaScript語言的過程中,以很小的學(xué)習(xí)成本從頂層上掌握了JavaScript語言,創(chuàng)造力得到了極大鍛煉,對(duì)編程語言類課程實(shí)現(xiàn)了一定程度的融會(huì)貫通。

本文所述的最優(yōu)知識(shí)點(diǎn)推薦策略尚有幾個(gè)值得深入研究的方向。一是類似英語這種大型的知識(shí)點(diǎn)網(wǎng)絡(luò),例如,基于Oxford 3000單詞表及例句庫作最優(yōu)推薦算法的耗時(shí)太長(zhǎng),不但要研究知識(shí)點(diǎn)網(wǎng)絡(luò)的最優(yōu)切分,還需要用Scala/Spark在服務(wù)器上開展多機(jī)并行計(jì)算,甚至還要性能更強(qiáng)的芯片時(shí)序分析軟件(PrimeTime)實(shí)現(xiàn)全路徑的學(xué)習(xí)過程分析。芯片中各級(jí)觸發(fā)器之間的時(shí)序路徑類似知識(shí)點(diǎn)網(wǎng)絡(luò)中的連線路徑,值得深入研究。二是在關(guān)鍵代碼之上擴(kuò)展更多的實(shí)用功能,例如,與個(gè)人的遺忘曲線聯(lián)系起來以全面記錄學(xué)生的練習(xí)過程,還要與人工智能技術(shù)相結(jié)合,讓集體學(xué)習(xí)過程歷史大數(shù)據(jù)驅(qū)動(dòng)的規(guī)則推薦和知識(shí)推薦更有益于學(xué)生個(gè)體的學(xué)習(xí)過程,讓班級(jí)整體學(xué)習(xí)力更有效地推動(dòng)個(gè)體學(xué)習(xí)。實(shí)現(xiàn)更加符合學(xué)生個(gè)體學(xué)習(xí)力的定制化最優(yōu)知識(shí)點(diǎn)推薦。三是研究固有權(quán)值可動(dòng)態(tài)改變并反映知識(shí)點(diǎn)創(chuàng)造過程的知識(shí)點(diǎn)網(wǎng)絡(luò)。當(dāng)前電子題庫中每個(gè)知識(shí)點(diǎn)只提供了一種解決方法,實(shí)際上,一個(gè)問題可以有很多解決方法。另外,好的學(xué)生可以邊學(xué)習(xí)“舊”方法,邊創(chuàng)造“新”方法,更難的情況是尚不明確如何設(shè)定知識(shí)點(diǎn)網(wǎng)絡(luò)的固有權(quán)值,可能需要借鑒異步電子設(shè)計(jì)中組合邏輯環(huán)的破環(huán)技術(shù)或者控制理論中的多步動(dòng)態(tài)優(yōu)化問題[7]。

參考文獻(xiàn):

[1]國(guó)發(fā)[2019]4號(hào).國(guó)務(wù)院關(guān)于印發(fā)國(guó)家職業(yè)教育改革實(shí)施方案的通知[Z].

[2]趙鴻昌.基于芯片仿真驗(yàn)證軟件實(shí)現(xiàn)的一種試題庫與試卷庫建設(shè)方法[J].中國(guó)教育信息化,2018(14):89-92.

[3]Chris Godsil,Gordon Royle..Algebraic Graph Theory[M].New York:Springer,2001.

[4]Michael M. Zavlanos, Magnus B. Egerstedt, George J. Pappas. Graph-Theoretic Connectivity Control of Mobile Robot Networks[J].Proceedings of the IEEE,2011(9):1525-1540.

[5]Math.js.An extensive math library for JavaScript and Node[EB/OL]. https://mathjs.org/,2020.

[6]劉秀英.新聞月評(píng)[J].少年兒童研究,2017(1):61-62.

[7]Svetlozar T. Rachev, Ludger Ruschendorf.Mass Transportation Problems Volume I[M].New York: Springer,1998.

(編輯:王曉明)

阿坝县| 秭归县| 临夏市| 札达县| 德阳市| 台山市| 怀集县| 汾西县| 晋中市| 长宁县| 宝丰县| 兰考县| 岚皋县| 探索| 克山县| 涟源市| 滦南县| 德化县| 灵川县| 吉木萨尔县| 清丰县| 灵山县| 衡东县| 襄樊市| 清涧县| 雷波县| 富民县| 崇左市| 新津县| 连江县| 承德县| 定结县| 汨罗市| 专栏| 梅州市| 合作市| 永吉县| 宣城市| 黑河市| 南通市| 永定县|