关键词不能为空

当前您在: 主页 > 英语 >

遗传算法的VB实现代码 (中)

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-28 08:22
tags:

-

2021年2月28日发(作者:波拉斯)


遗传算法的


VB


实现代码



(中)








************************************


随机全局取样选择



**********************************



'



'






名:



Stochastic_Universal_Sampleing



'







数:



BinGroup -


染色体数据




'












Result




-


染色体的适应度数据




'












N









-


联赛规模,


没有考虑到代沟的话就



ubound(Result)



'







明:


< /p>


随机全局取样选择,似乎结果非常好


,


但 必须要


求待求函数在取值区间内全为正数




'







者:



laviewpbt



'







间:



2006-11-5



'



'*************************************


随机全局取样选择



**********************************


Private Sub Stochastic_Universal_Sampleing(ByRef


BinGroup() As String, Result() As Double, n As Integer)







Dim m As Long, i As Integer, j As Integer







m = UBound(Result)







ReDim CumFit(1 To m) As Double







'


累计概率








ReDim Trials(1 To n) As Double







ReDim Rd(1 To m) As Double







ReDim Index(1 To n) As Integer







ReDim TempBinGroup(1 To m) As String







Dim Temp As Integer







ReDim a(1 To n) As Integer







CumFit(1) = Result(1)







For i = 2 To m











CumFit(i) = CumFit(i - 1) + Result(i)







Next







For i = 1 To n











Trials(i) = CumFit(m) / n * (Rnd + (i - 1))







Next







Rd(1) = 0







For i = 2 To m











Rd(i) = CumFit(i - 1)







Next







For i = 1 To n











For j = 1 To m















If Trials(i) < CumFit(j) And Rd(j) <=


Trials(i) Then



















Temp = Temp + 1



















Index(Temp) = j















End If











Next







Next













For i = 1 To m











TempBinGroup(i) = BinGroup(i)








'


备份原数









Next






For i = 1 To n











a(i) = Int(Rnd * n) + 1











For j = 1 To i - 1















If a(i) = a(j) Then



















i = i - 1























Exit For















End If











Next


'


不重复的随机数














Next







For i = 1 To m











BinGroup(i) = TempBinGroup(Index(a(i)))







Next



End Sub






'*********************************


单点交叉



*************************************



'



'






名:



Cross



'







数:



Chromosome1 -


参与交叉的染色体


1



'












Chromosome2 -


参与交叉的染色体


2



'







明:


< /p>


单点交叉变异,开始交叉的基因位在函数内产


< br>



'







者:



laviewpbt



'







间:



2006-11-3



'



'*********************************


单点交叉



*************************************


Public Sub OnePoint_CrossOver(ByRef Chromosome1 As


String, ByRef Chromosome2 As String)







Dim CrossOverBit As Integer







Dim StrTemp1 As String, StrTemp2 As String







CrossOverBit = Int(1 + Rnd * (Len(Chromosome1) -


1))







StrTemp1 = Mid(Chromosome1, CrossOverBit + 1)







StrTemp2 = Mid(Chromosome2, CrossOverBit + 1)







Mid(Chromosome2, CrossOverBit + 1) = StrTemp1







Mid(Chromosome1, CrossOverBit + 1) = StrTemp2



End Sub


'*********************************


两点交叉



*************************************



'



'






名:



Cross



'







数:



Chromosome1 -


参与交叉的染色体


1



'












Chromosome2 -


参与交叉的染色体


2



'







明:


< /p>


两点交叉变异,开始交叉的基因位在函数内产


< br>



'







者:



laviewpbt



'







间:



2006-11-3



'



'*********************************


两点交叉



*************************************


Public Sub TwoPoint_CrossOver(ByRef Chromosome1 As


String, ByRef Chromosome2 As String)







Dim Index1 As Integer, Index2 As Integer, Length As


Integer, IntTemp As Integer







Dim StrTemp1 As String, StrTemp2 As String







Length = Len(Chromosome1)







Index1 = Int(1 + Rnd * (Length - 1))









'


生成第一


个交叉点








Index2 = Int(1 + Rnd * (Length - 1))









'


生成第二


个交叉点








If Index2 < Index1 Then











IntTemp = Index1











Index1 = Index2











Index2 = IntTemp







End If







Index2 = Index2 - Index1















'


避免重复计









Index1 = Index1 + 1







StrTemp1 = Mid(Chromosome1, Index1, Index2)







StrTemp2 = Mid(Chromosome2, Index1, Index2)







Mid(Chromosome1, Index1, Index2) = StrTemp2







Mid(Chromosome2, Index1, Index2) = StrTemp1



End Sub


'*********************************


均匀交叉



*************************************



'



'






名:



Cross



'







数:



Chromosome1 -


参与交叉的染色体


1



'












Chromosome2 -


参与交叉的染色体


2



'







明:



均匀交叉变异,屏蔽字实际上转换位


Rnd >


0.5



'







者:



laviewpbt



'







间:



2006-11-3



'



'*********************************


均匀交叉



*************************************


Public Sub Uniform_CrossOver(ByRef Chromosome1 As


String, ByRef Chromosome2 As String)







Dim i As Integer, Length As Integer







Dim StrTemp1 As String, StrTemp2 As String







Length = Len(Chromosome1)







Randomize







For i = 1 To Length











If Rnd > 0.5 Then '


相当于屏蔽字的这一位为


1















StrTemp1 = Mid(Chromosome1, i, 1)















StrTemp2 = Mid(Chromosome2, i, 1)















Mid(Chromosome2, i, 1) = StrTemp1















Mid(Chromosome1, i, 1) = StrTemp2











End If







Next



End Sub


'*********************************


变异



*************************************



'



'






名:



Mutation



'







数:



Chromosome -


待变异的染色体




'












GeneBit






-


变异的基因位




'







明:



基本位突变




'







者:



laviewpbt



'







间:



2006-11-3



'



'*********************************


变异



*************************************


Public Sub Mutation(ByRef Chromosome As String,


GeneBit As Integer)







Dim Temp As String







Temp = Mid(Chromosome, GeneBit, 1)







If Temp =











Mid(Chromosome, GeneBit, 1) =







Else











Mid(Chromosome, GeneBit, 1) =







End If



End Sub


'************************************ Eval


动态执行一个函数



*********************************



'



'






名:



CalcFun



'







数:



Fun





-


函数




'












Script -


一个


Script Control


对象




'












X1








第一各自变量




'












X2








第二各自变量,可选




'












X3








第三各自变量,可选



-


-


-


-


-


-


-


-



本文更新与2021-02-28 08:22,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/679853.html

遗传算法的VB实现代码 (中)的相关文章