关键词不能为空

当前您在: 主页 > 英语 >

遗传算法的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实现代码 (中)的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文