ga-vb.txt

来自「 基于VB的遗传算法软件实现 在程序中,FitnessValue (i) 为适」· 文本 代码 · 共 81 行

TXT
81
字号
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 + =
减小字号Ctrl + -
显示快捷键?