关键词不能为空

当前您在: 主页 > 英语 >

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

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文