📄 ga-vb.txt
字号:
Public Function SelectOperation()
Dim i , j , sortnumber As Integer
Dim p , sum , avFitnessValue(100) As Double
sum = 0
Randomize (137)
For i = 0 To Popsize 2 1
sum = sum + FitnessValue(i) ’求种群个体总适应度值
Next i
For i = 0 To Popsize 2 1
If (sum < > 0) Then
avFitnessValue(i) = FitnessValue (i) Psum
’归一化适应度值
End If
Next i
For i = 1 To Popsize 2 1 ’轮盘法选择下代种群个体
avFitnessValue(i) = avFitnessValue(i21) + avFitnessValue(i)
Next i
For i = 0 To Popsize 2 1
p = (1000 3 Rnd + 1) P1000 #
sortnumber = 0
Do Until p > avFitnessValue(sortnumber)
sortnumber = sortnumber + 1
Loop
For j = 0 To CHROMLENGTH2 1
newPopulationChrom(i ,j) = PopulationChrom(sortnumber ,j)
Next j
Next i
For i = 0 To Popsize 2 1 ’产生新一代的种群
For j = 0 To CHROMLENGTH2 1
PopulationChrom(i , j) = newPopulationChrom(i , j)
Next j
Next i
End Function
(2) 交叉操作实现:
Public Function CrossoverOperation()
Dim i , j As Integer
Dim index(150) As Integer
Dim point , median As Integer
Dim p As Single
Dim ch As Integer
Randomize (137)
For i = 0 To Popsize 2 1
index(i) = i
Next i
For i = 0 To Popsize21’随机重新排列种群中的个体序列
point = Round( (Popsize 2 1 2 i) 3 Rnd)
median = index(i)
index(i) = index(point + i)
index(point + i) = median
Next i
For i = 0 To Popsize 2 1 Step 2
’按一定的随机概率单点交叉相邻两个体
p = (1000 # 3 Rnd + 1) P1000 #
If (p < Pc) Then
point = CHROMLENGTH 3 Rnd
For j = point To CHROMLENGTH2 1
ch = PopulationChrom(index(i) , j)
PopulationChrom(i ,j) = PopulationChrom(index(i + 1) ,j)
PopulationChrom(index(i + 1) ,j) = ch
Next j
End If
Next i
End Function
(3) 变异操作实现:
Public Function MutionOperation()
Dim i , j As Integer
Dim p As Single
For i = 0 To Popsize 2 1
’按一定随机概率取反变异点的位码值
For j = 0 To CHROMLENGTH - 1
p = 1000 # 3 Rnd P1000 #
If (p < Pm) Then
If PopulationChrom(i , j) = 0 Then
PopulationChrom(i , j) = 1
Else : PopulationChrom(i , j) = 0
End If
End If
Next j
Next i
End Functio
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -