當前位置:首頁 » 操作系統 » 演算法精粹

演算法精粹

發布時間: 2023-05-05 19:13:01

㈠ 遺傳演算法

根據問題的目標函數構造一個適值函數,對一個由多個解(每個解對應一個染色體)構成的種群進行評估、遺傳、選擇,經多代繁殖,獲得適應值最好的個體作為問題的最優解。

1,產生一個初始種群

2,根據問題的目標函數構造適值函數

3,根據適應值的好壞不斷選擇和繁殖

4,若干代後得到適應值最好的個體即為最優解

1.種群和種群大小

一般越大越好,但是規模越大運算時間越大,一般設為100~1000

2. 編碼方法 (基因表達方法

3. 遺傳運算元

包括交叉和變異,模擬了每一代中創造後代的繁殖過程。是遺傳演算法的精髓

交叉:性能在很大程度上取決於交叉運算的性能,交叉率Pc:各代中交叉產生的後與代數與種群中的個體數的比。Pc越高,解空間就越大,越耗時/

變異:Pm:種群中變異基因數在總基因數中的百分比。它控制著新基因導入種群的比例。太低,一些有用的基因就難以進入選擇;太高,後代就可能失去從雙親繼承下來的良好特性,也就失去了從過去中搜索的能力。

4.選擇策略

適者生存,優勝劣汰

5.停止准則

最大迭代數

初始種群的產生:隨機產生,具體依賴於編碼方法

編碼方法 :二進制編碼法、浮點編碼法、符號編碼法。順序編碼,實數編碼,整數編碼。

適值函數 :根據目標函數設計

遺傳運算 : 交叉 :單切點交叉,雙切點交叉,均勻交叉,算術交叉

變異 :基本位變異(Simple Mutation):對個體編碼串中以變異概率、隨機指定的某一位或某幾位僅因座上的值做變異運算。

均勻變異(Uniform Mutation):分別用符合某一范圍內均勻分布的隨機數,以某一較小的概率來替換個體編碼串中各個基因座上的原有基因值。(特別適用於在演算法的初級運行階段)

邊界變異(Boundary Mutation):隨機的取基因座上的兩個對應邊界基因值之一去替代原有基因值。特別適用於最優點位於或接近於可行解的邊界時的一類問題。

非均勻變異:對原有的基因值做一隨機擾動,以擾動後的結果作為變異後的新基因值。對每個基因座都以相同的概率進行變異運算之後,相當於整個解向量在解空間中作了一次輕微的變動。

高斯近似變異:進行變異操作時用符號均值為P的平均值,方差為P**2的正態分布的一個隨機數來替換原有的基因值。

選擇策略 :1.輪盤賭選擇(Roulette Wheel Selection):是一種回放式隨機采樣方法。每個個體進入下一代的概率等於它的適應度值與整個種群中個體適應度值和的比例。選擇誤差較大。

2.隨機競爭選擇(Stochastic Tournament):每次按輪盤賭選擇一對個體,然後讓這兩個個體進行競爭,適應度高的被選中,如此反復,直到選滿為止。

3.最佳保留選擇:首先按輪盤賭選擇方法執行遺傳演算法的選擇操作,然後將當前群體中適應度最高的個體結構完整地復制到下一代群體中。

4.無回放隨機選擇(也叫期望值選擇Excepted Value Selection):根據每個個體在下一代群體中的生存期望來進行隨機選擇運算。方法如下:

(1) 計算群體中每個個體在下一代群體中的生存期望數目N。

(2) 若某一個體被選中參與交叉運算,則它在下一代中的生存期望數目減去0.5,若某一個體未 被選中參與交叉運算,則它在下一代中的生存期望數目減去1.0。

(3) 隨著選擇過程的進行,若某一個體的生存期望數目小於0時,則該個體就不再有機會被選中。

5.確定式選擇:按照一種確定的方式來進行選擇操作。具體操作過程如下:

(1) 計算群體中各個個體在下一代群體中的期望生存數目N。

(2) 用N的整數部分確定各個對應個體在下一代群體中的生存數目。

(3) 用N的小數部分對個體進行降序排列,順序取前M個個體加入到下一代群體中。至此可完全確定出下一代群體中M個個體。

6.無回放余數隨機選擇:可確保適應度比平均適應度大的一些個體能夠被遺傳到下一代群體中,因而選擇誤差比較小。

7.均勻排序:對群體中的所有個體按期適應度大小進行排序,基於這個排序來分配各個個體被選中的概率。

8.最佳保存策略:當前群體中適應度最高的個體不參與交叉運算和變異運算,而是用它來代替掉本代群體中經過交叉、變異等操作後所產生的適應度最低的個體。

9.隨機聯賽選擇:每次選取幾個個體中適應度最高的一個個體遺傳到下一代群體中。

10.排擠選擇:新生成的子代將代替或排擠相似的舊父代個體,提高群體的多樣性。

之前在網上看到的一個比方,覺得很有趣:

{

既然我們把函數曲線理解成一個一個山峰和山谷組成的山脈。那麼我們可以設想所得到的每一個解就是一隻袋鼠,我們希望它們不斷的向著更高處跳去,直到跳到最高的山峰。所以求最大值的過程就轉化成一個「袋鼠跳」的過程。

下面介紹介紹「袋鼠跳」的幾種方式。

爬山演算法:一隻袋鼠朝著比現在高的地方跳去。它找到了不遠處的最高的山峰。但是這座山不一定是最高峰。這就是爬山演算法,它不能保證局部最優值就是全局最優值。

模擬退火:袋鼠喝醉了。它隨機地跳了很長時間。這期間,它可能走向高處,也可能踏入平地。但是,它漸漸清醒了並朝最高峰跳去。這就是模擬退火演算法。

遺傳演算法:有很多袋鼠,它們降落到喜瑪拉雅山脈的任意地方。這些袋鼠並不知道它們的任務是尋找珠穆朗瑪峰。但每過幾年,就在一些海拔高度較低的地方射殺一些袋鼠。於是,不斷有袋鼠死於海拔較低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有機會生兒育女。就這樣經過許多年,這些袋鼠們竟然都不自覺地聚攏到了一個個的山峰上,可是在所有的袋鼠中,只有聚攏到珠穆朗瑪峰的袋鼠被帶回了美麗的澳洲。

}

(把那些總是愛走下坡路的袋鼠射殺,這就是遺傳演算法的精粹!)

遺傳演算法並不保證你能獲得問題的最優解,但是使用遺傳演算法的最大優點在於你不必去了解和操心如何去「找」最優解。(你不必去指導袋鼠向那邊跳,跳多遠。)而只要簡單的「否定」一些表現不好的個體就行了。(把那些總是愛走下坡路的袋鼠射殺,這就是遺傳演算法的精粹!)

改進與變形

編碼方法:

㈡ vb程序設計論文

vb程序設計論文

在社會的各個領域,大家都跟論文打過交道吧,論文的類型很多,包括學年論文、畢業論文、學位論文、科技論文、成果論文等。如何寫一篇有思想、有文採的論文呢?下面是我為大家收集的vb程序設計論文,希望能夠幫助到大家。

Visual Basic(簡稱VB)是目前使用最廣泛的一種程序設計語言,是在Basic語言的基礎上發展起來的,它繼承了Basic語言簡單易用的優點,結合了可視化界面的設計方法,採用面向對象、事件驅動的編程機制,把Windows編程復雜性進行巧妙封裝,使開發Windows環境下的各種應用軟體變得更為容易。因此,目前國內很多高校都選擇將《VB程序設計》這門課程作為理工科專業的一門基礎課程。程序設計具有知識結構嚴謹、邏輯性強的特點,學生學習起來比較困難,教學效果也不盡如人意。如何提高本課程的教學質量和教學效果,是每位授課教師都會關注的課題。

1教學中存在的問題

就VB程序設計這門課程的教學現狀而言,通常採用的還是以課本原有知識體系為脈絡的傳統講授法,教學內容大多以線性方式展開,同時結合上機實踐操作來鞏固和熟悉課堂上所講的每一章節的知識點。經過教學實踐證明,這種教學模式能夠讓學生掌握Visual Basic的較多的理論知識,也可以閱讀程序代碼,但是讓學生自己解決一些問題的時候,通常都會束手無策。經過分析總結出此課程在教學中存在的問題:

一是教學內容與教學目標不一致。VB程序設計課程的教學目標是培養學生程序設計的基本知識、思維方式以及基本的操作技能,而教師在實際授課時,大多單純依照教材講授理論基礎知識,授課基本上是以語言自身的知識體系為脈絡展開,過分注重語句、語法和結構的講解,忽視對學生分析與解決問題能力的引導,不能很好的將編程環境、程序設計語言、演算法、數據結構以及程序設計思想關聯起來形成體系化教學。[1]導致學生只學會了語法概念而不會使用,能夠讀懂某一條語句,卻無法理解一段代碼的含義。

二是實驗內容過於簡單。上機實驗大多都是屬於基礎與驗證型實驗,偏重於VB語言的基本語法和結構的練習,能夠幫助學生更好的理解和掌握這些語法知識,但無法培養學生編程能力和解決實際問題的能力。實驗內容普遍都是知識點案例,針對的是具體的一個或多個知識點,沒有依託完整的實踐項目,使學生對知識點的學習感到枯燥無味,而且很容易遺忘。

三是學生缺乏計算機的思維方式。學生在接觸這門課程之前通常沒有任何基礎,學生普遍缺乏相應的知識背景和演算法思想,對程序設計的思維方式還不適應,分析和解決問題的能力處於一個較低的水平。在學習過程中經常會出現這種情況,教師對程序進行分析講解時學生能夠聽懂理解,代碼也能夠讀懂,但是讓學生自己編寫時,就無處下手,久而久之學生對編程充滿畏懼感,對學習本門課程缺乏興趣。

如何改變目前教學中存在的問題,讓學生能夠更好地掌握VB語言,掌握程序設計的基本方法?需要對課程的教學進行改革和創新。

2課程教學改革

2.1拓展教學內容

本課程主要培養學生的程序設計思維方式和實際編程能力,而不是單純的程序設計語言,因此必須打破固有的以「語法」和「結構」為中心的傳統教學理念,以突出能力培養為主軸,圍繞能力培養組織教學內容。教學內容的選擇不能僅僅局限在一本教材上,要突破教材局限,將程序設計中所需要的眾多知識點加以整合,包括VB語言的語法結構、可視化編程方法、常用的演算法、數據結構以及程序的調試等,形成新的知識體系。在這里演算法是程序設計的核心,而語言只是一種工具,在授課的過程中,特別是講解實例時,需要剝開語言這層外殼,讓學生掌握其中的精粹——演算法,也就是如何利用計算機來解決某一具體問題。

當然,這並不是說語言不重要,語言是程序設計的工具,如果不掌握語言,程序設計就無從談起。教材上的語法描述非常細致、系統,但大量的語法規則會使初學者感覺枯燥,這非常影響學生的學習興趣。根據二八定律,在任何一組東西中,只有20%是最重要的,事實上VB語言也是如此,最常用、最重要的知識點並不是很多。因此在講述語法時,只需提供給學生最基本的語法知識,其餘的細枝末節可以由學生自學。

2.2優化教學方法和教學策略

在程序設計的教學中,傳統講課方式的缺陷已眾所周知,因為這是一種以教師為主、學生為輔的一種授課形式,講課中教師是積極的而學生是消極的,很難把學生吸引到學習進程之中。但這不是意味著要把這種授課方式拋棄,講課是把大量知識傳遞給學生的一種常用模式,尤其在本課程的教學中,學生缺乏普遍缺乏知識背景,大量的理論知識需要傳遞給學生,這就需要教師進行詳細地講解。在講解時應該採用多種策略,比如在講述抽象概念時最好與實踐相關聯,或者與學生已有的知識聯系起來,這樣比較容易理解。在提到函數和數據類型的.時候,可以跟學生比較熟悉的Excel中的相關概念關聯起來。在講述面向對象的概念時,可以拿Windows操作系統作為例子,它就是依照面向對象的思想編制而成的,在桌面上的每個圖標,可以理解成一個對象,當需要啟動某個對象時,只需用滑鼠點擊它(消息驅動)。[2]不僅如此,在不同的情境下還需要靈活運用多種教學方法,如問題法、引導法、任務驅動和實例教學法等,這樣有助於讓學生從消極的學習者轉變為積極的學習者。

2.3完善實驗教學體系

VB程序設計是一門理論性和實驗性都很強的課程,對實驗環節有較高的要求。要學好這門課,學生只有經過大量的上機實驗,才能掌握程序設計的技能和方法。因此,在教學過程中要給學生留出足夠的上機時間,讓學生在實驗中理解VB語言的基本概念,掌握基本的編程方法。結合學生的專業方向,精心選擇合適的案例、設計型與研究型課題,構建有助於培養學生動手能力和程序設計思維方式的實驗教學平台。整個實驗環節分為三個層次設計,基礎驗證型、設計開發型和研究創新型實驗,每次實驗課有多個基礎驗證型實驗,幫助學生掌握相應的語法知識和演算法設計,每一章精選1~2個設計開發型實驗,與學生分析討論解題思路,引導學生獨立解決問題,培養學生的上機調試能力。學生以小組為單位,選擇一個與其專業相關的研究題目,要求學生逐步完成研究分析與報告,寫出個人的心得體會,並在學期末給出一定的時間完成課題。

2.4創建項目實例庫

充分利用網路資源,搜集各類完整的VB程序實例,從中選取典型的、有實際意義的實例,作為程序設計的模板提供給學生。大多數學生基本上是初次接觸計算機程序設計,習慣採用數學思維方式來分析問題,還沒有真正掌握計算機編程的基本思路。在實驗過程中,遇到一個新的題目,學生往往不知道從何下手,思路不清晰,此時就可以從項目實例庫找出對應的實例,通過借鑒或修改相應的模板得到結果。「熟讀唐詩三百首,不會做詩也會吟」,經常閱讀這些實例,能夠拓展學生的視野,促進學生對於程序設計思想的理解與認識,提高學生的編程能力。

在具體實施上,整理出40~50個典型項目實例,將它們分為五大類:基礎類、演算法類、圖形類、文本類和應用類,供學生自主學習,另外從中選取6~8個典型的項目實例,要求學生必須理解掌握,這些實例基本上包含了這門課程的知識要點,理解了這些實例,對於課程的知識結構會有一個全面的了解。其中,學生最喜歡也最有興趣的實例就是彈球游戲,通過對彈球游戲程序代碼的閱讀分析,學生能夠更好地掌握定時器控制項和控制項坐標等相關的知識,學生也很有興趣地去改寫程序代碼,以獲得類似的動畫效果,可見好的實例能夠激發學生的求知慾望,提高學生的學習積極性,培養學生分析問題和解決問題的能力。

3結束語

VB程序設計課程對於理論知識和實際操作均有較高要求,教學時需要綜合運用多種教學方法和教學策略,充分調動學生的學習積極性和主動性,將教學重點放在演算法的分析和編程的訓練上,注重實驗教學環節,加強對學生程序設計思維方式和實際編程能力的培養,提高課程的教學效果。

;
熱點內容
吃雞低配置手機如何開極致畫質 發布:2025-05-16 18:15:20 瀏覽:191
空密碼訪問 發布:2025-05-16 18:08:51 瀏覽:892
騰訊雲伺服器安全規則設置 發布:2025-05-16 17:51:33 瀏覽:650
k3伺服器不可用怎麼辦 發布:2025-05-16 17:51:30 瀏覽:537
編輯html源碼 發布:2025-05-16 17:45:45 瀏覽:65
邊的存儲方法 發布:2025-05-16 17:33:16 瀏覽:927
海量伺服器怎麼拆 發布:2025-05-16 17:31:07 瀏覽:211
運行與編譯的區別 發布:2025-05-16 17:25:02 瀏覽:824
c語言for中continue 發布:2025-05-16 17:20:14 瀏覽:648
ftp儲存 發布:2025-05-16 17:04:08 瀏覽:506