?? genvacuum.cpp
字號(hào):
//頭文件: GenVacuum.hpp
//目的: 多首領(lǐng)遺傳算法類,本類采用自定義小生境技術(shù),個(gè)體適合度
// 計(jì)算綜合考慮個(gè)體評(píng)價(jià)函數(shù)以及個(gè)體間距離影響,即每代個(gè)體
// 適合度按如下方式計(jì)算:設(shè)Fit(i)為原個(gè)體適合度,F(xiàn)itN(i)
// 為新個(gè)體適合度,則新個(gè)體適合度如下:
// FitN(0)=Fit(0)
// FitN(i)=max(FitN(i-1)-1/(Fit(k)*D(k))) k=i,i+1,...,n
// D(k)=d(k,0)+d(k,1)+...+d(k,i-1)/i
// 式中:D(k)--個(gè)體k與前i-1個(gè)個(gè)體距離和
// d(k,m)--個(gè)體k與個(gè)體m的距離函數(shù),表征個(gè)體間相似性
// 按上述方式計(jì)算個(gè)體適合度的目的在于使相似個(gè)體的適合度只
// 有一個(gè)能取較大值,這樣保證最終適合度高的個(gè)體之間的相似
// 性較小,從而避免匯聚的發(fā)生
//語(yǔ)言: VC++ 6.0
//時(shí)間: 2001年3月
//作者: 劉康
//環(huán)境: Win32
//注意: EvalVal(INIDIVIDUAL&)應(yīng)由用戶類覆蓋,以提供正確的評(píng)價(jià)函數(shù).
//////////////////////////////////////////////////////////////////////
#include "GenVacuum.hpp"
//重載總個(gè)體適合度計(jì)算函數(shù)
void GenVacuum::CalFitIndex()
{
double *tmpFit; //考慮距離后的新個(gè)體適合度
tmpFit = new double[IndNumber];
tmpFit[IndIndex[0]]=Individual[IndIndex[0]].Fit;//FitN[0]=Fit[0]
for(int k=1; k<IndNumber; k++) //其它個(gè)體
{
double alldis=0;
alldis = Distance(Individual[IndIndex[k-1]],
Individual[IndIndex[k]]);
if(alldis<=DisThrd)
tmpFit[IndIndex[k]]=Individual[IndIndex[IndNumber-1]].Fit;
else
tmpFit[IndIndex[k]]=Individual[IndIndex[k]].Fit;
}
double allfit = 0;
for(int i=0; i<IndNumber; i++)
{
allfit += tmpFit[i]-tmpFit[IndIndex[IndNumber-1]];
FitIndex[i] = allfit;
}
delete tmpFit;
}
//距離函數(shù)
double GenVacuum::Distance(INDIVIDUAL &ind1,INDIVIDUAL &ind2)
{
int sLong = 0;
for(int i=1; i<=ind1.Chrom.GetLen(); i++)
if(ind1.Chrom.GetInt(i,i)!=ind2.Chrom.GetInt(i,i))
sLong++;
return (double)sLong;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -