欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
多種群多編碼遺傳算法通用控件

多種群多編碼遺傳算法通用控件MPGA 1.5

HBD 2007

 

(一)    多種群多編碼遺傳算法通用控件介紹

設計遺傳算法通用控件的目的是向用戶(hù)提供一個(gè)工程優(yōu)化工具箱, 利用此工具箱用戶(hù)可以方便地把遺傳算法加入自己的軟件中來(lái)優(yōu)化用戶(hù)自己定義的目標函數。用戶(hù)只需要提供目標函數,再加入相應的設置代碼后便可以用遺傳算法進(jìn)行優(yōu)化,使用戶(hù)從繁瑣的遺傳算法編程中脫離出來(lái),把注意力集中到目標函數的設計上來(lái)。

采用控件把遺傳算法封裝起來(lái)的好處是可以適用于各種開(kāi)發(fā)平臺如:VC++、VB、Delphi等等,另外利用控件的消息處理,用戶(hù)可以方便的加入目標函數和計算結果通知函數。

多種群多編碼遺傳算法通用控件并不是采用簡(jiǎn)單的標準遺傳算法,而是采用了一系列的改進(jìn)方法:

1.          實(shí)現了多種編碼:二進(jìn)制編碼、實(shí)數編碼、整數編碼。用戶(hù)可以自行選擇。

2.          其次實(shí)現了多種群進(jìn)化,種群的數量由用戶(hù)定義,每個(gè)種群的編碼方式也是用戶(hù)自定義。每個(gè)種群的進(jìn)化都是在獨立的線(xiàn)程中的,多種群進(jìn)化時(shí)進(jìn)化線(xiàn)程是并發(fā)的,如有5個(gè)種群進(jìn)化,便有5個(gè)線(xiàn)程同時(shí)并發(fā)優(yōu)化。種群間的個(gè)體是可以移民的,每隔一定的進(jìn)化代數后,每個(gè)種群或引入其他種群的優(yōu)良個(gè)體,或輸出自己的優(yōu)良個(gè)體到其他種群。每個(gè)種群的編碼方式、交叉函數、變異函數、交叉概率、變異概率、保留比率都可以互不相同,保證了各種群的多樣性。

3.          每個(gè)種群的進(jìn)化都采用了精英法則,加速了收斂速度。

 

(二)    多種群多編碼遺傳算法通用控件的使用方法

1.          注冊控件

開(kāi)始菜單-》運行,輸入

regsvr32 相應目錄\MPGA.ocx

2.          加入控件到自己的工程

VC++下,在設計窗單擊右鍵選擇”Insert ActiveX control”在彈出的窗體中選擇MPGA 

 

3.          響應消息

為控件添加兩個(gè)消息響應函數。

兩個(gè)消息分別為GetEvaluation Report, 在響應GetEvaluation消息函數中添加目標函數,Report消息響應函數得到當前計算出的最優(yōu)解。

4.          關(guān)聯(lián)控件變量

為控件關(guān)聯(lián)一個(gè)變量,如m_ga。

5.          添加目標函數

目標函數添加到GetEvaluation消息函數,消息函數原型如下:

void CTestmpDlg::OnGetEvaluationMpgactrl1(long iPopulation, long iIndividual, double FAR* Evaluation)

iPopulation                   表示第幾個(gè)種群

iIndividual           表示種群中的第幾個(gè)個(gè)體

Evaluation           表示要傳回的評價(jià)值

舉例:

{

         double x1,x2;

         x1=m_ga.GetVarFromInd(iPopulation,iIndividual,0);

         x2=m_ga.GetVarFromInd(iPopulation,iIndividual,1);

        

         (*Evaluation)=-20*exp(-0.2*sqrt(0.5*(x1*x1+x2*x2)))-exp(0.5*(cos(2*3.1415926*x1)+cos(2*3.1415926*x2)))+22.71282;

}

在這個(gè)目標函數的例子中,優(yōu)化變量有兩個(gè)x1,x2。通過(guò)函數m_ga.GetVarFromInd(iPopulation,iIndividual,0)得到當前的變量值,0表示變量的編號,即第0個(gè)變量。

(*Evaluation)=-20*exp(-0.2*sqrt(0.5*(x1*x1+x2*x2)))-exp(0.5*(cos(2*3.1415926*x1)+cos(2*3.1415926*x2)))+22.71282;此句話(huà)便把目標函數給出,目標函數為:

-20*exp(-0.2*sqrt(0.5*(x1*x1+x2*x2)))-exp(0.5*(cos(2*3.1415926*x1)+cos(2*3.1415926*x2)))+22.71282

 

6.          添加 Report函數

Report消息響應函數被調用時(shí),即控件通知軟件計算出結果,一般是每隔幾代報告一個(gè),這是可以設置的具體見(jiàn)接口說(shuō)明。Report消息響應函數原型為:

void CTestmpDlg::OnReportMpgactrl1(long iGeneration, long iPopulation, double Evaluation)

iGeneration         表示當前進(jìn)化到第幾代

iPopulation                   表示第幾個(gè)種群

Evaluation           表示但前計算出的最佳目標函數值

舉例:

{       CString str;

         double x1,x2;

         x1=m_ga.GetVarFromBestInd(0);

         x2=m_ga.GetVarFromBestInd(1);

         str.Format("Generation=%d  Population=%d  Evaluation%f :\r\n",iGeneration,iPopulation,Evaluation);

         disstr+=str;

         str.Format("1--%f  2--%f\r\n\r\n",x1,x2);

         disstr+=str;

         this->SetDlgItemText(IDC_EDIT1,disstr);

}

在此例中有兩個(gè)優(yōu)化變量,當前最佳個(gè)體的變量是通過(guò)函數m_ga.GetVarFromBestInd(0)得到的,0代表變量的編號,即第0個(gè)變量。得到之后顯示結果給用戶(hù)。

 

7.          添加初始化及運行代碼

舉例:

void CTestmpDlg::OnOK()

{      

m_ga.RestGA();

         m_ga.AddPopulation(1,100,0,0.9,0,0.1,60);//增加一個(gè)種群

//1-實(shí)數編碼 100-種群規模 0-交叉方法 0.9-交叉概率 0-變異方法 0.1-變異概率 60-保留百分比

         m_ga.AddPopulation(0,500,0,0.8,0,0.03,70); //增加一個(gè)種群

//1-二進(jìn)制編碼 500-種群規模 0-交叉方法 0.8-交叉概率 0-變異方法 0.03-變異概率 70-保留百分比

         m_ga.AddVariable(-5,5,20,0);//增加一個(gè)變量

//-5-變量的下限  5-變量的上限  20-若為二進(jìn)制編碼為二進(jìn)制編碼長(cháng)度 0-非整數

         m_ga.AddVariable(-5,5,20,0); //增加一個(gè)變量

         m_ga.InitGA(0,1000,20,10);//初始化

//0-求最小值  1000-進(jìn)化1000  20-report間隔20  10­-移民間隔10

         m_ga.RunGA();//開(kāi)始進(jìn)行優(yōu)化

}

(三)    多種群多編碼遺傳算法通用控件接口說(shuō)明

Ø         long AddPopulation(long EncodeMethod, long PopSize, long CrossoverMethod, float CrossoverProbability, long MutMethod, float MutProbability, float KeepPercentage)

接口含義:增加一個(gè)種群

EncodeMethod           編碼方式,0-二進(jìn)制編碼 1-實(shí)數編碼 2-整數編碼

PopSize                      種群規模  大于0

CrossoverMethod      交叉方法 在試用版本中對二進(jìn)制編碼 0-單點(diǎn)交叉 1-雙點(diǎn)交叉  對實(shí)數編碼 0-算術(shù)交叉

CrossoverProbability 交叉概率  范圍為 01

MutMethod               變異方法  在試用版本下設為0

MutProbability          變異概率  范圍0-1

KeepPercentage                   保留百分比 范圍 1100

 

返回值:0為成功

 

Ø         long AddVariable(double Min, double Max, long nBits, short IsInteger)

接口含義:增加一個(gè)優(yōu)化變量

Min                   優(yōu)化變量的最小值

Max                   優(yōu)化變量的最大值

nBits        當為二進(jìn)值編碼時(shí),二進(jìn)制編碼的長(cháng)度 大于0

IsInteger   是否為整數 1-為整數 0-非整數

返回值:0為成功

 

Ø         long InitGA(short IsMax, long GenerationNumber, long ReportPeriod, long MigrationPeriod)

接口含義:初始化

IsMax                         0-求最小值  1-求最大值

GenerationNumber     進(jìn)化代數  大于0

ReportPeriod              report間隔代數,要求為MigrationPeriod的倍數

MigrationPeriod         移民間隔代數 >0,建議值10-100

返回值:0為成功

 

Ø         void RestGA()

接口含義:rest GA, 當前正在進(jìn)化時(shí),會(huì )停止所有進(jìn)化線(xiàn)程。

 

Ø         long RunGA()

接口含義:開(kāi)始進(jìn)行進(jìn)化。

返回值:0為成功

 

Ø         double GetVarFromInd(long iPopulation, long iIndividual, long iVariable)

接口含義:從當前個(gè)體得到優(yōu)化變量值,此接口提供變量值給目標函數計算。

iPopulation       第幾個(gè)種群   此參數賦消息響應函數參數iPopulation

iIndividual         第幾個(gè)個(gè)體   此參數賦消息響應函數參數iIndividual

iVariable            第幾個(gè)變量   變量編號從0開(kāi)始

返回值:變量值

 

Ø         double GetVarFromBestInd(long iVariable);

接口含義:從當前最佳個(gè)體得到優(yōu)化變量值,此接口用戶(hù)顯示結果給用戶(hù)。

iVariable            第幾個(gè)變量   變量編號從0開(kāi)始

返回值:變量值

 

(四)    多種群多編碼遺傳算法通用控件消息說(shuō)明

Ø         GetEvaluation

void GetEvaluation(long iPopulation, long iIndividual, double* Evaluation)

消息含義:獲取用戶(hù)的目標函數值

iPopulation       第幾個(gè)種群

iIndividual         第幾個(gè)個(gè)體

Evaluation        返回目標函數值

Ø         Report

void Report(long iGeneration, long iPopulation, double Evaluation)

消息含義:報告結果給用戶(hù)

iGeneration       第幾代

iPopulation       第幾個(gè)種群

Evaluation         當前最佳目標函數值

 

(五)    其他

l          VB delphi 用戶(hù)如何使用?

VB delphi環(huán)境下和VC++的使用流程類(lèi)似,不需要做額外的操作。

 

l          對于有約束條件的優(yōu)化問(wèn)題如何解決?

對于約束條件問(wèn)題可以采用懲罰函數法,即把不符合條件的目標函數值增加響應的懲罰項,控件在優(yōu)化時(shí)會(huì )淘汰較差個(gè)體。如:

(*Evaluation)=objectvalue+fa(x);   //fa為懲罰函數

 

詳細例子和使用說(shuō)明:下載1 http://download.csdn.net/source/262362

下載2:http://www.fileupyours.com/files/135326/MPGA1.5.rar

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
簡(jiǎn)談遺傳算法
Algorithm之OP:OP之GA遺傳算法思路理解相關(guān)配圖資料
遺傳算法學(xué)習心得
【Matlab】自帶遺傳算法工具箱的介紹和使用注意事項
遺傳算法
遺傳算法(GA)學(xué)習筆記
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久