前言:我們精心挑選了數篇優質計算機程序設計論文文章,供您閱讀參考。期待這些文章能為您帶來啟發,助您在寫作的道路上更上一層樓。
1計算思維的概述
何謂計算思維,即借助于計算機科學基礎概念來分析問題、解決問題、系統設計以及理解人類的一種行為。如下圖靈獎得主ButlerLampson的報告,這種思維為人自身一種根本且概念化思維方式,是一種思想而非人造物,為數學與工程思維相互融合和互補所形成的一種思想。計算思維自身為抽象與自動化,這種抽象是借助于嵌入、簡化、遞歸以及轉換等方式,把某一個較為復雜的問題轉變成多個簡單的子問題,并實施求解的一個過程。而自動化則是指通過計算機自身所具運算能力的充分利用來分析、解決各種問題,以此來彌補人在計算方面所存在的各種缺陷和不足,這種自動化也在很大程度上使得計算機應用范圍更為廣泛。基于上述這些內容可知,計算思維其實就是一種人機共存、形式規整以及解答問題的思維。
2基于計算思維培養的C程序設計驗教學
2.1教學目標的明確
眾所周知,實施教育的主要目標就在于學生綜合能力以及素質的培養。目前我國教育部門在計算機教學目標上予以了明確的規定,即計算機基礎教學能力培養的目標應包含四個方面的內容,即計算機認知能力、計算機應用能力、網絡學習能力以及借助于計算機的一種共處能力,在這些目標中,前兩個目標所反映出來的內容及就為計算環境以及問題求解。在計算機這門學科中,C程序的設計就是計算思維中的語言機問題求解。對此,在C程序設計教學過程中,計算思維這一能力不僅僅為其核心能力,同時也是教學中的核心內容。鑒于上述內容,在本次C程序設計實驗教學上,教學目標主要為計算機思維的培養,教學主要內容為程序設計方式的講解,通過上機實踐的強化,使學生能夠借助于這種實踐感受,以及計算問題求解基本方式與思維模式的領悟,為學生創新能力的培養以及綜合素質的提高打好基礎。下圖為C程序的設計的教學模塊。
2.2教學內容的設計
在計算機這門學科中,C程序設計這一課程屬于理論和實踐并重的一門課程,要求教師在教學過程中,必須要把理論教學和實踐教學有機結合,從而使理論教學和實踐教學能夠互相推動。在教學過程中,由于學生對于所學內容缺乏一定的感性認識,對此,教師在實施教學,應綜合考慮學生自身的學習情況,結合所要學習的內容,對C程序實驗教學內容進行合理且科學地設計,把學生能力的培養、知識的傳授以及技能的訓練等融為一體,使學生能夠在做的過程學到知識,在學習過程中獲得相應的操作技能,繼而使其能夠將自身所學到的內容與知識有效地應用至實踐中,并解決在實踐中所遇到的各種問題。為達到理論夠用實踐突出這一目的,在本次C程序設計教學中,把所有的知識點歸納并總結為了九個核心點,根據所學內容的難易程度,把教學過程細化成為三個模塊,即基礎能力、中級應用以及高級應用,基于由淺入深這一原則,循序漸進地實施教學,把C程序實驗教學分為了三個方面的實驗,即驗證實驗、綜合實驗以及設計型實驗,通過這種方式,使學生能夠在記憶中來理解所學知識,并在理解中學會怎樣應用這些知識,最后使學生在實踐應用過程中學會創新。第一,通過驗證型實驗的實施,使學生能夠熟悉該語言的設計環境。學生實施編程以及應用編程的一個基礎就是基礎能力模塊知識,在該模塊中,教師必須要求學生學會記憶以及理解,把該模塊實驗教學內容設置成為驗證型的實驗,讓學生對于C程序設計環境以及步驟有一個基本的認識,使在學生熟悉這一環境后,了解該程序的書寫格式、特點以及結構,了解并掌握該程序數據的基本類型、表達式以及運算符等,繼而進一步使學生掌握C程序數據的輸入以及輸出,明白C程序所具備的三種結構,使學生通過驗證型實驗,可獨立解決編程方面存在的各種問題。在實施驗證型實驗教學時,應要求學生應按照教師解決問題的方式來完成相應的實驗內容,這種模擬的方式就是計算思維的模仿,在這一環節中,所強調的是科學內容活動的演示以及證明,注重是學生實驗操作、觀察、數據處理以及計算等個性化智力技能的培養,在教學過程中,學生借助于驗證標準的這一已知程序來理解并學習基礎模塊中的內容,在理解和學習的過程中,學生可直觀且清楚地看到在實際實驗程序中各知識點的具體應用,能夠更為快速地熟悉這種環境,繼而更為地理解以及記憶C程序設計的基本知識。此外,在學生實施驗證型實驗之前,教師應實適時引導學生對以往所學C程序知識進行回顧,并在基礎上對實驗步驟實施討論,提出相關的注意事項,針對學生在實驗中容易出錯的這些操作方,教師應該事先進行示范,以免在實驗中學生出現一些不必要的錯誤。第二,通過設計型實驗的實施,強化學生計算思維能力的培養。所謂設計型實驗,就是指不同計算思維方式的綜合應用來分析并解決各種問題。設計型實驗是基于學生自身已掌握相應的實驗方法與技能,通過所學知識的應用,自行提出相應的問題,并在此基礎上分析和解決問題,經過算法的分析、程序運行結果的分析處理以及實驗結果等,獲得正確且規范的研究分析理論。在這一環節中,所注重的是學生團結協作、勇于探索以及的嚴謹求實精神的培養,在實施設計型實驗教學時,教師應事先對程序進行填空、設計以及改錯,并提出相關的思考問題,積極引導學生來討論與分析,鼓勵學生提出不同解決方案。第三,通過綜合型實驗的實施,強化學生創新以及應用意識的培養。在C程序設計實驗教學中,為培養學生創新精神以及探索精神,使其計算思維得到擴展與升華,可結合學生自身的學習進度,基于所學內容的難易程度,定期設計一個相應的綜合型實驗程序題目,鼓勵學生在課外課余時間來編程,同時在規定的時間內把所自己的所編程的這一源程序上傳至電腦,由教師來進行批閱,對于參與這一活動的學生,教師應該實施相應的鼓勵,這樣不僅能夠進一步激發學生學習的興趣,同時還可提供學生的實踐操作能力,使學生今后能夠更好地適應社會市場,在潛移默化中使學生應用創新能力以及計算思維得到培養。總之選擇了一些趣味性強、有吸引力的例子和話題以提高學生的學習興趣,選擇一些實用性強的例子和話題,以努力提高高校學生的工程實踐能力。精選的“不斷提升”的引導性例題、習題和實驗題,以及貫穿全書的綜合實例,起到了開拓思路、引導讀者探究問題求解方法、激發讀者程序設計興趣的目的。
2.3基于計算思維能力培養的C程序設計實驗教學
第一,上機操作實驗流程的規范。在教學之前,教師應該要求學生對所學內容進行預習,通過題目的分析,明確實驗教學中所需的數據結構,對參與運算的這些變量進行賦值,接著應用三種結構來解決問題,將結果輸出,進行N-S流程圖的繪制,基于該圖編寫相應的源程序,最后準備好測試程序所需的數據以及預期結果,進行上級調試工作,并歸納總結。通過實驗流程的規范,不僅便于學生良好學習習慣以及思維習慣的培養,同時還可提升學生分析與解決各種問題的能力。
第二,加強上機操作過程中的指導與引導。在學生實際上機操作時,教師可借助于提問的方式來引導學生將自身所存在的問題找出來。在程序調試、上機輸入以及編輯時,除了系統所引發的問題外,通常情況下,其他問題均由學生自己來獨立解決。此外,在教學過程中,教師還還應鼓勵學生采用不同的算法,正確引導學生反思這些算法,繼而培養學生的計算思維能力。現以“打印水仙花樹”以案例說明。
第三,加強實驗過程的反思,采取合理且科學的考核評價制度,使學生的計算思維能夠得到擴展。在上機完成以后,教師應要求學生對于本次實驗實施反思、總結以及歸納,可采取小組的方式來交流和溝通,集思廣益,使學生在交流和反思的過程中,拓展其計算思維。此外,還應采取相應的考核評價措施,可采取機考與筆試,結合學生平時學習表現情況,合理且科學地評價,對于學生所獲得的成功,不管大小,均應予以相應的肯定,以此激發學生學習的積極性。下面以“打印水仙花數”為例,簡要說明基于計算思維的案例設計的基本方法。“打印水仙花數”案例設計步驟(圖3)打印水仙花數”案例的具體設計與實施(圖4)
3結束語
西安理工大學工科非計算機專業和計算機專業雖然都開設C語言程序設計課程,但是前者具有鮮明的專業特點,對該課程的要求明顯不同,僅僅按照“面向對象教學”的原則,適當調整教學組織活動和教學內容對于后者是遠遠不夠的。針對目前工科非計算機專業C語言程序設計課程教學實踐中所暴露的主要問題,筆者積極開展了非計算機專業C語言程序設計課程教學設計的教改工作。
1.1教學設計概述
所謂教學設計,就是為了達到一定的教學目的,對教什么(課程、教學內容等)和怎么教(組織、方法、媒體的使用等)進行設計。教學設計不等同于傳統的備課寫教案。教學設計有利于教學工作的科學化,使教學活動納入科學的軌道。教學設計的意義就在于追求教學效果的最優化,不僅關心教師如何教,更關心學生如何學,注重將人類對教與學的研究結果和理論綜合應用于教學實踐。教學設計主要包括確定教學目標、組織教學內容、分析教學對象、選擇教學形式和方法及教學媒體、設計教學過程、教學質量評價設計等基本環節,其中,設計教學過程是課程教學設計的核心。
1.2該課程教學設計的內容
西安理工大學C語言程序設計課程組于2003年出版了《C語言程序設計教程》及配套的《C語言程序設計教程上機實驗與學習指導》特色教材。自2011年開始,非計算機專業選用的教材與計算機專業不同。目前非計算機專業選用《C語言程序設計》(第1版,張毅坤教授,高等教育出版社,2011)作為該課程的教材。非計算機專業C語言程序設計的教學設計是一項復雜的系統工程,主要包括課程教學設計、章節教學設計、課堂教學設計和實驗教學設計,以西安理工大學C語言程序設計課程教學大綱為指導,以《C語言程序設計》(第1版)及其配套教材為基礎,確定課程教學設計的內容:①將該課程的教學目標確定為“掌握C語言的基本語法和語義,理解結構化程序設計的思想和方法,提高學生的編程能力和調試程序的能力”。②組織教學內容的關鍵是進行教材的組織呈現,理論教學內容包括《C語言程序設計》(第1版)的第一章至第八章,實驗教學體現于該教材的第九章及配套教材。③學生作為教學對象始終是教學過程中的重要角色,工科非計算機專業的種類多,分析教學對象就是掌握學生特點與了解專業背景并重。④重點突出課堂教學設計,傳統教學與案例教學有機結合,“講解+多媒體演示+課堂板書”缺一不可。⑤設計教學過程與“組織教學內容”聯系最為緊密,主要包括課堂教學設計和實驗教學設計,教學過程設計遵循的總原則是:激發學生興趣,注重能力培養,合理安排教學順序,講清重點與化解難點緊密結合,課堂提高與課后鞏固拓展有機統一,并預測教學實踐中可能出現的意外情況。⑥將學生評價、同行評價、教學督導組專家評價、主管教學的領導評價和教師自我評價這幾種評價的結果綜合起來,比較客觀的評價教學效果與教學質量。
2教學設計的實踐及效果
我們連續多年承擔非計算機專業C語言程序設計課程,先后承擔過西安理工大學電氣工程及其自動化(電力)、水文與水資源工程、印刷工程、包裝工程和材料科學與工程等專業的C語言程序設計的理論教學和實驗教學任務。始終將上述教學設計的內容貫穿于課堂教學和實驗教學之中。C語言程序設計本身是一門實踐性很強的課程,加之各個理工科專業的特色鮮明,所以結合學生所學專業特點與需求,同一門課程,針對不同專業的學生,適當調整教學設計內容,并在教學實踐中檢驗教學效果。2012年以來,學生對筆者的教學評分一直在95分以上,也給予了肯定性的評價,例如“采用啟發式教學,闡述問題深入淺出,重點突出,能理論聯系實際或聯系學科發展的新成果”;“對于您的授課方式我們很滿意,感謝您對這門課程的熱忱,我們會努力學下去”;等等。
3結語
關鍵詞遺傳算法;TSP;交叉算子
1引言
遺傳算法是模擬生物在自然環境中的遺傳和進化過程而形成的一種自適應全局優化概率搜索算法。總的說來,遺傳算法是按不依賴于問題本身的方式去求解問題。它的目標是搜索這個多維、高度非線性空間以找到具有最優適應值(即最小費用的)的點[1]。
基本遺傳算法是一個迭代過程,它模仿生物在自然環境中的遺傳和進化機理,反復將選擇算子、交叉算子和變異算子作用于種群,最終可得到問題的最優解和近似最優解。
2遺傳算法程序設計改進比較
2.1基本遺傳算法對TSP問題解的影響
本文研究的遺傳算法及改進算法的實現是以C++語言為基礎,在Windows2000的版本上運行,其實現程序是在MicrosoftVisualStadio6.0上編寫及運行調試的。
1)遺傳算法的執行代碼
m_Tsp.Initpop();//種群的初始化
for(inti=0;i<m_Tsp.ReturnPop();i++)
m_Tsp.calculatefitness(i);//計算各個個體的適應值
m_Tsp.statistics();//統計最優個體
while(entropy>decen||variance>decvar)//m_Tsp.m_gen<100)
{
//將新種群更迭為舊種群,并進行遺傳操作
m_Tsp.alternate();//將新種群付給舊種群
m_Tsp.generation();//對舊種群進行遺傳操作,產生新種群
m_Tsp.m_gen++;
m_Tsp.statistics();//對新產生的種群進行統計
}
2)簡單的遺傳算法與分支定界法對TSP問題求解結果的對比
遺傳算法在解決NPC問題的領域內具有尋找最優解的能力。但隨著城市個數的增加,已沒有精確解,無法確定遺傳算法求解的精度有多高。一般情況下,當迭代代數增大時,解的精度可能高,但是時間開銷也會增大。因此可以通過改進遺傳算法來提高搜索能力,提高解的精度。
2.2初始化時的啟發信息對TSP問題解的影響
1)初始化啟發信息
在上述實驗算法的基礎上,對每一個初始化的個體的每五個相鄰城市用分支界定法尋找最優子路徑,然后執行遺傳算法。
2)遺傳算法與含有啟發信息的遺傳算法求解結果的對比
當城市數增至20個時,用分支定界法已經不可能在可以接受的時間內得到精確的解了,只能通過近似算法獲得其可接受的解。試驗設計中算法的截止條件:固定迭代1000代。表2中的平均最優解為經過多次試驗(10次以上)得到的最優解的平均值,最優解的出現時間為最優解出現的平均時間,交叉操作次數為最優解出現時交叉次數的平均值。
表220個城市的TSP問題求解結果數據
算法交叉操作
次數最優解
出現時間平均
最優解
簡單遺傳算法80244.479.4s1641.8
含初始化啟發信息的GA79000.237.4s1398.9
從表2中可以看出,當初始種群時引入啟發信息將提高遺傳算法的尋優能力。同時縮短了遺傳算法的尋優時間和問題的求解精度。
2.3交叉算子對TSP問題解的影響
1)循環貪心交叉算子的核心代碼
for(i=1;i<m_Chrom;i++)
{
flag=0;
city=m_newpop[first].chrom[i-1];//確定當前城市
j=0;
while(flag==0&&j<4)
{
sign=adjcity[city][j];//adjcity數組的數據為當前城市按順序排列的鄰接城市
flag=judge(first,i,sign);//判斷此鄰接城市是否已經存在待形成的個體中
j++;
}
if(flag==0)//如果所有鄰接城市皆在待擴展的個體中
{
while(flag==0)
{
sign=(int)rand()/(RAND_MAX/(m_Chrom-1));//隨機選擇一城市
flag=judge(first,i,sign);
}
}
if(flag==1)
m_newpop[first].chrom[i]=sign;
}
2)問題描述與結果比較
下面筆者用經典的測試遺傳算法效率的OliverTSP問題來測試循環貪心交叉算子的解的精度和解效率。OliverTSP問題的30個城市位置坐標如表3所示[2]。
從表4、圖1中可以看到,貪心交叉算子大大提高了遺傳算法的尋優能力,同時也降低了交叉操作次數。在多次試驗中,貪心交叉算子找到的最優解與目前記載的最佳數據的誤差率為2.7%。而部分匹配交叉算子找到的最優解與目前記載的最佳數據的誤差率高達7%。從而可以得到交叉算子對于遺傳算法
2.4并行遺傳算法消息傳遞實現的核心代碼
1)主程序代碼
//接收各個從程序的最優個體
for(i=0;i<slave;i++)
{
MPI_Recv(Rchrom[i],chrom,MPI_UNSIGNED,MPI_ANY_SOURCE,gen,MPI_COMM_WORLD,&status);
}
//計算接收各個從程序的最優個體的回路距離
for(i=0;i<slave;i++)
{
fitness[i]=0.0;
for(intj=0;j<chrom-1;j++)
fitness[i]=fitness[i]+distance[Rchrom[i][j]][Rchrom[i][j+1]];
fitness[i]=fitness[i]+distance[Rchrom[i][0]][Rchrom[i][chrom-1]];
}
//找到最優的個體并把它記錄到文件里
for(i=0;i<slave;i++)
{
if(1/fitness[i]>min)
{
sign=i;
min=1/fitness[i];
}
}
fwrite(&gen,sizeof(int),1,out);
for(i=0;i<chrom;i++)
fwrite(&Rchrom[sign][i],sizeof(unsigned),1,out);
fwrite(&fitness[sign],sizeof(double),1,out);
//每九代向從程序發送一個最優個體
if(gen%9==0)
MPI_Bcast(Rchrom[sign],chrom,MPI_UNSIGNED,0,MPI_COMM_WORLD);
2)從程序代碼
//將上一代的最優個體傳回主程序
MPI_Send(Rchrom1,chrom,MPI_UNSIGNED,0,gen,MPI_COMM_WORLD);
//每九代接收一個最優個體并將其加入種群中替換掉最差個體
if(gen%9==0)
{
PI_Bcast(Rchrom2,chrom,MPI_UNSIGNED,0,MPI_COMM_WORLD);
Tsp.IndiAlternate(Rchrom2);
}
//進行下一代的計算
Tsp.Aternate();
Tsp.Generation();
Tsp.Statistics();
3)并行遺傳算法的性能
筆者在MPI并行環境下,用C++語言實現了一個解決TSP問題的粗粒度模型的并行遺傳算法。該程序采用的是主從式的MPI程序設計,通過從硬盤的文件中讀取數據來設置染色體長度、種群的規模、交叉概率和變異概率等參數。試驗環境為曙光TC1700機,測試的對象是OliverTSP問題的30個城市的TSP問題。
正如在測試串行遺傳算法所提到的數據結果,并行遺傳算法也沒有達到目前所記錄的最好解,但是它提高了算法的收斂性,并行遺傳算法的收斂趨勢如圖2所示[4]。
圖2遺傳算法的收斂過程
3結束語
本文通過對基本遺傳算法的不斷改進,證明了添加啟發信息、改進遺傳算子和利用遺傳算法固有的并行性都可以提高遺傳算法的收斂性,其中對遺傳算法交叉算子的改進可以大大提高遺傳算法的尋優能力。
參考文獻
[1]劉勇、康立山,陳毓屏著.非數值并行算法-遺傳算法.北京:科學出版社1995.1
[2]IMOliverDJSmithandJRCHolland,Astudyofpermutationcrossoveroperatorsonthetravelingsalesman[C]//ProblemofthesecondInternationalConferenceonGeneticAlgorithmsandTheirApplication,Erlbaum1897:224-230