2012-09-29 106 views
3

我正在VBA中構建一個遺傳算法,我的適應度函數取決於數組1的行數。該數組是1和0的組合。該數組可以是任何大小(2D),我需要在該行中添加1的數量並將其與其餘的值進行比較。我正在考慮找到1s的最大值並將其與陣列中的最小值1進行比較,並從那裏向前移動,但我不確定這是否是實現此目的的最佳方法。在數組中添加行值:VBA

如果你們可以給我一些關於如何做到這一點的提示,那將非常棒!或者,如果在VBA中缺少一些數組添加功能。

+0

這很奇怪在VBA遺傳算法編程,但給+1反正。 – nalply

回答

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 
+0

如果你在Excel中這樣做,那麼我一定會用Rob G的建議。 –

1

另一種方法是使用Excel的SUM()函數來完成這項工作。總結了數組是給你相同的答案計數的,並且可以使用Application.WorksheetFunction對象給予SUM()你訪問:

x = Application.WorksheetFunction.Sum(aArray)