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