3

我正在 VBA 中构建一个遗传算法,我的适应度函数取决于数组行有多少个 1。该数组是 1 和 0 的组合。数组可以是任意大小(2D),我需要在行中添加 1 的数量并将其与其余值进行比较。我正在考虑找到 1s 的最大值并将其与数组中 1 的最小值进行比较,然后从那里继续前进,但我不确定这是否是最好的方法。

如果你们能给我一些关于如何做到这一点的建议,那就太好了!或者,如果我在 VBA 中缺少一些数组添加函数。

4

2 回答 2

1

另一种方法是使用 Excel 的SUM()功能来完成这项工作。对数组求和会给您与计算数组相同的答案,您可以使用该Application.WorksheetFunction对象来访问SUM()

x = Application.WorksheetFunction.Sum(aArray)
于 2012-09-29T17:52:36.680 回答
0

你只需要数那些;如果每个单独的元素不是 1,则为零,因此您可以从数组的大小中减去 1 的数量以获得零的数量。

Function CountTheOnes(aArray As Variant) As Long
    Dim x As Long
    Dim OnesCount As Long
    For x = LBound(aArray) To UBound(aArray)
        If aArray(x) = 1 Then
            OnesCount = OnesCount + 1
        End If
    Next
    CountTheOnes = OnesCount
End Function

' and to test it:

Sub TestIt()
    Dim aArray(1 To 10) As Byte
    Dim x As Long

    ' stuff the array with zeros
    For x = LBound(aArray) To UBound(aArray)
        aArray(x) = 0
    Next

    ' then add a couple of random 1s
    aArray(3) = 1
    aArray(7) = 1
    aArray(9) = 1


    x = CountTheOnes(aArray)

    Debug.Print "Ones:" & vbTab & x
    Debug.Print "Zeros:" & vbTab & UBound(aArray) - x

End Sub
于 2012-09-29T16:10:29.093 回答