我正在VBA中構建一個遺傳算法,我的適應度函數取決於數組1的行數。該數組是1和0的組合。該數組可以是任何大小(2D),我需要在該行中添加1的數量並將其與其餘的值進行比較。我正在考慮找到1s的最大值並將其與陣列中的最小值1進行比較,並從那裏向前移動,但我不確定這是否是實現此目的的最佳方法。在數組中添加行值:VBA
如果你們可以給我一些關於如何做到這一點的提示,那將非常棒!或者,如果在VBA中缺少一些數組添加功能。
我正在VBA中構建一個遺傳算法,我的適應度函數取決於數組1的行數。該數組是1和0的組合。該數組可以是任何大小(2D),我需要在該行中添加1的數量並將其與其餘的值進行比較。我正在考慮找到1s的最大值並將其與陣列中的最小值1進行比較,並從那裏向前移動,但我不確定這是否是實現此目的的最佳方法。在數組中添加行值:VBA
如果你們可以給我一些關於如何做到這一點的提示,那將非常棒!或者,如果在VBA中缺少一些數組添加功能。
你只需要計數那些;如果每個單獨的元素不是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
如果你在Excel中這樣做,那麼我一定會用Rob G的建議。 –
另一種方法是使用Excel的SUM()
函數來完成這項工作。總結了數組是給你相同的答案計數的,並且可以使用Application.WorksheetFunction
對象給予SUM()
你訪問:
x = Application.WorksheetFunction.Sum(aArray)
這很奇怪在VBA遺傳算法編程,但給+1反正。 – nalply