我正在 VBA 中构建一个遗传算法,我的适应度函数取决于数组行有多少个 1。该数组是 1 和 0 的组合。数组可以是任意大小(2D),我需要在行中添加 1 的数量并将其与其余值进行比较。我正在考虑找到 1s 的最大值并将其与数组中 1 的最小值进行比较,然后从那里继续前进,但我不确定这是否是最好的方法。
如果你们能给我一些关于如何做到这一点的建议,那就太好了!或者,如果我在 VBA 中缺少一些数组添加函数。
另一种方法是使用 Excel 的SUM()
功能来完成这项工作。对数组求和会给您与计算数组相同的答案,您可以使用该Application.WorksheetFunction
对象来访问SUM()
:
x = Application.WorksheetFunction.Sum(aArray)
你只需要数那些;如果每个单独的元素不是 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