当我尝试为GA生成人口时,我遇到了错误。我用二维数组来帮助生成一个人口。首先,用户将输入种群大小,然后输入染色体长度,进入用户形式。
我的变数:
Dim Generation As Integer
Dim Chromolength As Integer
Dim varchromolength As Integer
Dim Poparr() As Integer
然后我从userform获取值:
PopSize = PopulationSize.value
aVariables = AOV.value 'assign userform value entered to this variable
varchromolength = Chromolengthentered.value 'assign userform value entered to this variable
Chromolength = varchromolength * aVariables 'Chromosome length equals the length of each varaible chromosome combined
然后是错误发生的编码:
For i = 1 To PopSize
For j = 1 To Chromolength
If Rnd < 0.5 Then
Poparr(i, j) = 0 'assign o to gene
Else
Poparr(i, j) = 1 'assign 1 to gene
End If
Next j
Next i
我道歉,我对VBA很新。任何有关此错误的帮助将不胜感激。
答案 0 :(得分:5)
根据您的代码,您永远不会分配数组的尺寸。为此,请在设置PopSize
和ChromoLength
的值后,在for循环前插入此行。
Redim Poparr(1 to PopSize, 1 to ChromoLength)
不必要的详细信息:您可以运行Redim Poparr(PopSize, ChromoLength)
,但这会产生0 to Popsize
等数组...除非您将Option Base 1
添加到顶部你的模块。数组的默认基数为0.我觉得最好明确指出数组的下限和上限,因为默认值可以是0或1,具体取决于上下文。