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