遗传算法VB程序.docx

上传人:b****6 文档编号:16186238 上传时间:2023-07-11 格式:DOCX 页数:29 大小:133.11KB
下载 相关 举报
遗传算法VB程序.docx_第1页
第1页 / 共29页
遗传算法VB程序.docx_第2页
第2页 / 共29页
遗传算法VB程序.docx_第3页
第3页 / 共29页
遗传算法VB程序.docx_第4页
第4页 / 共29页
遗传算法VB程序.docx_第5页
第5页 / 共29页
遗传算法VB程序.docx_第6页
第6页 / 共29页
遗传算法VB程序.docx_第7页
第7页 / 共29页
遗传算法VB程序.docx_第8页
第8页 / 共29页
遗传算法VB程序.docx_第9页
第9页 / 共29页
遗传算法VB程序.docx_第10页
第10页 / 共29页
遗传算法VB程序.docx_第11页
第11页 / 共29页
遗传算法VB程序.docx_第12页
第12页 / 共29页
遗传算法VB程序.docx_第13页
第13页 / 共29页
遗传算法VB程序.docx_第14页
第14页 / 共29页
遗传算法VB程序.docx_第15页
第15页 / 共29页
遗传算法VB程序.docx_第16页
第16页 / 共29页
遗传算法VB程序.docx_第17页
第17页 / 共29页
遗传算法VB程序.docx_第18页
第18页 / 共29页
遗传算法VB程序.docx_第19页
第19页 / 共29页
遗传算法VB程序.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

遗传算法VB程序.docx

《遗传算法VB程序.docx》由会员分享,可在线阅读,更多相关《遗传算法VB程序.docx(29页珍藏版)》请在冰点文库上搜索。

遗传算法VB程序.docx

遗传算法VB程序

DimN2(30)AsLong     '用来保存2的N次方的数据

DimScriptAsObject   '调用其Eval函数

PublicEnumCrossOver

   OnePointCrossOver   '单点交叉

   TwoPointCrossOver   '两点交叉

   UniformCrossOver    '平均交叉

EndEnum

PublicEnumSelection

   RouletteWheelSelection       '轮盘赌选择

   StochasticTourament          '随机竞争选择

   RandomLeagueMatches          '随机联赛选择

   StochasticUniversalSampleing '随机遍历取样

EndEnum

PublicEnumEnCoding

   Binary         '标准二进制编码

   Gray           '格雷码

EndEnum

PrivateTypeGAinfo

   MaxAsDouble

   Cordinate()AsDouble

EndType

'*********************************** 二进制码转格雷码 ***********************************

'

'函数名:

BinaryToGray

'参   数:

Value - 要转换的二进制数的实值

'说   明:

如3对应的二进制表示为0011,而用格雷码表示为0010,这个函数的value为0011代表的实数

'          而返回的是0010所代表的实数

(2)

'返回值:

返回格雷码对应的二进制数的实值

'开发语言:

B语言

'作者:

yyf

'

'*********************************** 二进制码转格雷码 ***********************************

PublicFunctionBinaryToGray(ValueAsLong)AsLong

   DimVAsLong,MaxAsLong

   DimstartAsLong,mEndAsLong,TempAsLong,CounterAsLong

   DimFlagAsBoolean

   V=Value:

Max=1

   WhileV>0

       V=V/2

       Max=Max*2

   Wend

   IfMax=0ThenExitFunction

   Flag=True

   mEnd=Max-1

   Whilestart

       Temp=(mEnd+start-1)/2

       IfValue<=TempThen

           IfNotFlagThen

               Counter=Counter+(mEnd-start+1)/2

           EndIf

           mEnd=Temp

           Flag=True

       Else

           IfFlagThen

               Counter=Counter+(mEnd-start+1)/2

           EndIf

           Temp=Temp+1

           start=Temp

           Flag=False

       EndIf

   Wend

   BinaryToGray=Counter

EndFunction

'*********************************** 格雷码转二进制码 ***********************************

'

'函数名:

BinaryToGray

'参   数:

Value - 要转换的二进制数的实值

'说   明:

如3对应的二进制表示为0011,而用格雷码表示为0010,这个函数的value为0010代表的实数

'          而返回的是0010所代表的实数

(2)

'返回值:

返回格雷码对应的二进制数的实值

'

'*********************************** 格雷码转二进制码 ***********************************

PublicFunctionGrayToBinary(ValueAsLong)AsLong

   DimVAsLong,MaxAsLong

   DimstartAsLong,mEndAsLong,TempAsLong,CounterAsLong

   DimFlagAsBoolean

   V=Value:

Max=1

   WhileV>0

       V=V/2

       Max=Max*2

   Wend

   Flag=True

   mEnd=Max-1

   Whilestart

       Temp=Counter+(mEnd-start+1)/2

       IfFlagXor(Value

          IfFlagThenCounter=Temp

          start=(start+mEnd+1)/2

          Flag=False

       Else

          IfNotFlagThenCounter=Temp

          mEnd=(start+mEnd-1)/2

          Flag=True

       EndIf

   Wend

   GrayToBinary=start

EndFunction

'*********************************** 十进制转转二进制码 ***********************************

'

'函数名:

DecToBinary

'参   数:

Value - 要转换的十进制数

'返回值:

返回对应的二进制数

'修改者:

yyf

'时   间:

2006-11-4

'

'*********************************** 十进制转转二进制码 ***********************************

PrivateFunctionDecToBinary(ByValValueAsLong)AsString

   DimStrTempAsString

   DimModNumAsInteger

   DoWhileValue>0

       ModNum=ValueMod2

       Value=Value/2

       StrTemp=ModNum&StrTemp

   Loop

   DecToBinary=StrTemp

 EndFunction

'*************************************二十进制转换 **********************************

'

'函数名:

BinToDec

'参   数:

BinCode - 二进制字符串

'返回值:

转换后的十进制数

'说   明:

二进制字符串转换位十进制数

'作   者:

yyf

'时   间:

2006-11-3

'

'*************************************二十进制转换 **********************************

PublicFunctionBinToDec(BinCodeAsString)AsLong

   DimiAsInteger,DecAsLong,LengthAsInteger

   Length=Len(BinCode)

   Fori=1ToLength

       IfMid(BinCode,i,1)="1"Then

           Dec=Dec+N2(Length-i)

       EndIf

   Next

   BinToDec=Dec

EndFunction

'*********************************** 编码 ***********************************

'

'过程名:

Coding

'参   数:

Bits    - 需要编码的位数

'          BinGroup- 保存群体编码数据的数组

'说   明:

编码,准确的说应该是初始化种群,对于二进制码和格雷码这个过程一样的

'作   者:

yyf

'时   间:

2006-11-3

'

'*********************************** 编码 ***********************************

PublicSubCoding(BitsAsInteger,BinGroup()AsString)

   DimiAsInteger,jAsInteger

   DimTempAsString

   Randomize

   Fori=1ToUBound(BinGroup,1)

       Temp=""

       Forj=1ToBits

           IfRnd>=0.5Then

               Temp=Temp&"1"

           Else

               Temp=Temp&"0"

           EndIf

       Next

       BinGroup(i)=Temp

   Next

EndSub

'*********************************** 解码 ***********************************

'

'过程名:

Decoding

'参   数:

Bits    - 需要编码的位数

'          ST      - 约束条件

'          BinGroup- 学要解码的数组

'          DecGroup- 保存解码后的十进制数

'说   明:

解码

'*********************************** 解码 ***********************************

PublicSubDecoding(Bits()AsInteger,ST()AsDouble,BinGroup()AsString,DecGroup()AsDouble,MethodAsEnCoding)

   DimmAsInteger,iAsInteger,jAsInteger,ST_NumAsInteger,TempAsInteger

   ST_Num=UBound(Bits,1)

   m=UBound(BinGroup,1)

   IfMethod=BinaryThen

       Fori=1Tom

           DecGroup(i,1)=BinToDec(Left(BinGroup(i),Bits

(1)))

           Temp=1

           Forj=2ToST_Num

               Temp=Temp+Bits(j-1)

               DecGroup(i,j)=BinToDec(Mid(BinGroup(i),Temp,Bits(j)))

           Next

       Next

   ElseIfMethod=GrayThen

       Fori=1Tom

           DecGroup(i,1)=BinaryToGray(BinToDec(Left(BinGroup(i),Bits

(1))))

           Temp=1

           Forj=2ToST_Num

               Temp=Temp+Bits(j-1)

               DecGroup(i,j)=BinaryToGray(BinToDec(Mid(BinGroup(i),Temp,Bits(j))))

           Next

       Next

   EndIf

   

   Fori=1Tom

       Forj=1ToST_Num

           DecGroup(i,j)=ST(j,1)+DecGroup(i,j)*(ST(j,2)-ST(j,1))/(N2(Bits(j))-1)

       Next

   Next

EndSub

'*************************************变量的二进制串位数 **********************************

'

'函数名:

GetIndex

'参   数:

Target - 待求数

'返回值:

某一指数

'说   明:

求符合2^(GetIndex-1)

'*************************************变量的二进制串位数 **********************************

PublicFunctionGetIndex(TargetAsLong)AsInteger

   DimiAsInteger

   Fori=0To30

       IfTarget<=N2(i)Then

           GetIndex=i

           ExitFunction

       EndIf

   Next

EndFunction

'*************************************轮盘赌选择 **********************************

'

'过程名:

Roulette_Wheel_Selection

'参   数:

Q       - 累计概率

'          BinGroup- 染色体数据

'说   明:

运用轮盘赌方法进行选择

'作   者:

YYF

'时   间:

2006-11-4

'

'*************************************轮盘赌选择 **********************************

PublicSubRoulette_Wheel_Selection(q()AsDouble,ByRefBinGroup()AsString)

   DimiAsInteger,jAsInteger,mAsInteger

   DimDblTempAsDouble

   m=UBound(BinGroup)

   ReDimTempBinGroup(1Tom)AsString

   Fori=1Tom

       TempBinGroup(i)=BinGroup(i)      '备份原数据

   Next

   Fori=1Tom

       DblTemp=Rnd

       Forj=0Tom-1

           IfDblTemp<=q(j+1)Then

               BinGroup(i)=TempBinGroup(j+1)       '运用轮盘赌方法选择新的种群

               ExitFor

           EndIf

       Next

   Next

EndSub

'*************************************随机竞争选择 **********************************

'

'过程名:

Stochastic_Tournament

'参   数:

Q       - 累计概率

'          BinGroup- 染色体数据

'          Result  - 染色体的适应度数据

'说   明:

运用随机竞争进行选择(是基于轮盘赌选择的)

'作   者:

YYF

'时   间:

2006-11-4

'

'*************************************随机竞争选择 **********************************

PublicSubStochastic_Tournament(q()AsDouble,ByRefBinGroup()AsString,Result()AsDouble)

   DimiAsInteger,jAsInteger,mAsInteger,Index1AsInteger,Index2AsInteger

   DimDblTempAsDouble

   m=UBound(BinGroup)

   ReDimTempBinGroup(1Tom)AsString

   Fori=1Tom

       TempBinGroup(i)=BinGroup(i)      '备份原数据

   Next

   Fori=1Tom

       DblTemp=Rnd

       Forj=0Tom-1

           IfDblTemp<=q(j+1)Then

               Index1=j+1              '运用轮盘赌方法得到一个个体

               ExitFor

           EndIf

       Next

       DblTemp=Rnd

       Forj=0Tom-1

           IfDblTemp<=q(j+1)Then      '运用轮盘赌方法得到另外一个个体

               Index2=j+1

               ExitFor

           EndIf

       Next

       IfResult(Index1)>Result(Index2)Then    '取适应度高的

           BinGroup(i)=TempBinGroup(Index1)       '运用随机竞争方法选择新的种群

       Else

           BinGroup(i)=TempBinGroup(Index2)       '运用轮盘赌方法选择新的种群

       EndIf

   Next

EndSub

'*************************************随机联赛选择 **********************************

'

'过程名:

Random_League_Matches

'参   数:

BinGroup- 染色体数据

'          Result  - 染色体的适应度数据

'          N       - 联赛规模,常取2

'说   明:

运用随机联赛选择进行选择,似乎结果非常好,并且可以处理负的适应度

'作   者:

YYF

'时   间:

2006-11-4

'

'*************************************随机联赛选择 **********************************

PublicSubRandom_League_Matches(ByRefBinGroup()AsString,Result()AsDouble,nAsDouble)

   DimiAsInteger,jAsInteger,mAsInteger,IndexAsInteger

   DimDblTempAsDouble,RndTempAsInteger

   m=UBound(BinGroup)

   ReDimTempBinGroup(1Tom)AsString

   Fori=1Tom

       TempBinGroup(i)=BinGroup(i)      '备份原数据

   Next

   Fori=1Tom

       DblTemp=-100000000

       Forj=1Ton

           RndTemp=Int(1+Rnd*m)

           IfDblTemp

           

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2