4

当我尝试为 GA 生成人口时,我遇到了错误。我使用二维数组来帮助生成人口。首先,用户将在用户表单中输入种群大小,然后是染色体长度。

我的变量:

Dim Generation As Integer
Dim Chromolength As Integer
Dim varchromolength As Integer
Dim Poparr() As Integer

然后我从用户窗体中获取值:

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 还很陌生。任何有关此错误的帮助将不胜感激。

4

1 回答 1

5

根据您的代码,您永远不会分配数组的维度。为此,请在设置 和 的值之后,在 for 循环之前插入这一PopSizeChromoLength

Redim Poparr(1 to PopSize, 1 to ChromoLength)

不必要的细节:您可以只运行Redim Poparr(PopSize, ChromoLength),但这会导致数组0 to Popsize等...除非您添加Option Base 1到模块的顶部。数组的默认基数是 0。我觉得最好明确指出数组的下限和上限,因为默认值可以是 0 或 1,具体取决于上下文。

于 2012-09-25T15:15:51.800 回答