DimN2(30)AsLong'用来保存2的N次方的数据DimScriptAsObject'调用其Eval函数PublicEnumCrossOverOnePointCrossOver'单点交叉TwoPointCrossOver'两点交叉UniformCrossOver'平均交叉EndEnumPublicEnumSelectionRouletteWheelSelection'轮盘赌选择StochasticTourament'随机竞争选择RandomLeagueMatches'随机联赛选择StochasticUniversalSampleing'随机遍历取样EndEnumPublicEnumEnCodingBinary'标准二进制编码Gray'格雷码EndEnumPrivateTypeGAinfoMaxAsDoubleCordinate()AsDoubleEndType'***********************************二进制码转格雷码***********************************''函数名:BinaryToGray'参数:Value-要转换的二进制数的实值'说明:如3对应的二进制表示为0011,而用格雷码表示为0010,这个函数的value为0011代表的实数'而返回的是0010所代表的实数(2)'返回值:返回格雷码对应的二进制数的实值'开发语言:B语言'作者:yyf''***********************************二进制码转格雷码***********************************PublicFunctionBinaryToGray(ValueAsLong)AsLongDimVAsLong,MaxAsLongDimstartAsLong,mEndAsLong,TempAsLong,CounterAsLongDimFlagAsBooleanV=Value:Max=1WhileV0V=V/2Max=Max*2WendIfMax=0ThenExitFunctionFlag=TruemEnd=Max-1WhilestartmEndTemp=(mEnd+start-1)/2IfValue=TempThenIfNotFlagThenCounter=Counter+(mEnd-start+1)/2EndIfmEnd=TempFlag=TrueElseIfFlagThenCounter=Counter+(mEnd-start+1)/2EndIfTemp=Temp+1start=TempFlag=FalseEndIfWendBinaryToGray=CounterEndFunction'***********************************格雷码转二进制码***********************************''函数名:BinaryToGray'参数:Value-要转换的二进制数的实值'说明:如3对应的二进制表示为0011,而用格雷码表示为0010,这个函数的value为0010代表的实数'而返回的是0010所代表的实数(2)'返回值:返回格雷码对应的二进制数的实值''***********************************格雷码转二进制码***********************************PublicFunctionGrayToBinary(ValueAsLong)AsLongDimVAsLong,MaxAsLongDimstartAsLong,mEndAsLong,TempAsLong,CounterAsLongDimFlagAsBooleanV=Value:Max=1WhileV0V=V/2Max=Max*2WendFlag=TruemEnd=Max-1WhilestartmEndTemp=Counter+(mEnd-start+1)/2IfFlagXor(ValueTemp)ThenIfFlagThenCounter=Tempstart=(start+mEnd+1)/2Flag=FalseElseIfNotFlagThenCounter=TempmEnd=(start+mEnd-1)/2Flag=TrueEndIfWendGrayToBinary=startEndFunction'***********************************十进制转转二进制码***********************************''函数名:DecToBinary'参数:Value-要转换的十进制数'返回值:返回对应的二进制数'修改者:yyf'时间:2006-11-4''***********************************十进制转转二进制码***********************************PrivateFunctionDecToBinary(ByValValueAsLong)AsStringDimStrTempAsStringDimModNumAsIntegerDoWhileValue0ModNum=ValueMod2Value=Value/2StrTemp=ModNum&StrTempLoopDecToBinary=StrTempEndFunction'*************************************二十进制转换**********************************''函数名:BinToDec'参数:BinCode-二进制字符串'返回值:转换后的十进制数'说明:二进制字符串转换位十进制数'作者:yyf'时间:2006-11-3''*************************************二十进制转换**********************************PublicFunctionBinToDec(BinCodeAsString)AsLongDimiAsInteger,DecAsLong,LengthAsIntegerLength=Len(BinCode)Fori=1ToLengthIfMid(BinCode,i,1)=1ThenDec=Dec+N2(Length-i)EndIfNextBinToDec=DecEndFunction'***********************************编码***********************************''过程名:Coding'参数:Bits-需要编码的位数'BinGroup-保存群体编码数据的数组'说明:编码,准确的说应该是初始化种群,对于二进制码和格雷码这个过程一样的'作者:yyf'时间:2006-11-3''***********************************编码***********************************PublicSubCoding(BitsAsInteger,BinGroup()AsString)DimiAsInteger,jAsIntegerDimTempAsStringRandomizeFori=1ToUBound(BinGroup,1)Temp=Forj=1ToBitsIfRnd=0.5ThenTemp=Temp&1ElseTemp=Temp&0EndIfNextBinGroup(i)=TempNextEndSub'***********************************解码***********************************''过程名:Decoding'参数:Bits-需要编码的位数'ST-约束条件'BinGroup-学要解码的数组'DecGroup-保存解码后的十进制数'说明:解码'***********************************解码***********************************PublicSubDecoding(Bits()AsInteger,ST()AsDouble,BinGroup()AsString,DecGroup()AsDouble,MethodAsEnCoding)DimmAsInteger,iAsInteger,jAsInteger,ST_NumAsInteger,TempAsIntegerST_Num=UBound(Bits,1)m=UBound(BinGroup,1)IfMethod=BinaryThenFori=1TomDecGroup(i,1)=BinToDec(Left(BinGroup(i),Bits(1)))Temp=1Forj=2ToST_NumTemp=Temp+Bits(j-1)DecGroup(i,j)=BinToDec(Mid(BinGroup(i),Temp,Bits(j)))NextNextElseIfMethod=GrayThenFori=1TomDecGroup(i,1)=BinaryToGray(BinToDec(Left(BinGroup(i),Bits(1))))Temp=1Forj=2ToST_NumTemp=Temp+Bits(j-1)DecGroup(i,j)=BinaryToGray(BinToDec(Mid(BinGroup(i),Temp,Bits(j))))NextNextEndIfFori=1TomForj=1ToST_NumDecGroup(i,j)=ST(j,1)+DecGroup(i,j)*(ST(j,2)-ST(j,1))/(N2(Bits(j))-1)NextNextEndSub'*************************************变量的二进制串位数**********************************''函数名:GetIndex'参数:Target-待求数'返回值:某一指数'说明:求符合2^(GetIndex-1)Target=2^GetIndex的GetIndex'*************************************变量的二进制串位数**********************************PublicFunctionGetIndex(TargetAsLong)AsIntegerDimiAsIntegerFori=0To30IfTarget=N2(i)ThenGetIndex=iExitFunctionEndIfNextEndFunction'*************************************轮盘赌选择**********************************''过程名:Roulette_Wheel_Selection'参数:Q-累计概率'BinGroup-染色体数据'说明:运用轮盘赌方法进行选择'作者:YYF'时间:2006-11-4''*************************************轮盘赌选择**********************************PublicSubRoulette_Wheel_Selection(q()AsDouble,ByRefBinGroup()AsString)DimiAsInteger,jAsInteger,mAsIntegerDimDblTempAsDoublem=UBound(BinGroup)ReDimTempBinGroup(1Tom)AsStringFori=1TomTempBinGroup(i)=BinGroup(i)'备份原数据NextFori=1TomDblTemp=RndForj=0Tom-1IfDblTemp=q(j+1)ThenBinGroup(i)=