3

私はVBAで遺伝的アルゴリズムを構築していますが、適応度関数は配列行の1の数によって異なります。配列は1と0の組み合わせです。配列は任意のサイズ(2D)にすることができ、行に1の数を追加して、残りの値と比較する必要があります。1の最大値を見つけて、それを配列内の1の最小値と比較し、そこから先に進むことを検討していましたが、これがこれを行うための最良の方法かどうかはわかりません。

あなたたちがこれを行う方法について私にいくつかのヒントを与えることができればそれは素晴らしいことです!または、VBAにない配列追加関数がある場合。

4

2 に答える 2

1

もう1つのアプローチは、ExcelのSUM()関数を使用して作業を行うことです。配列を合計すると、配列を数えるのと同じ答えが得られ、Application.WorksheetFunctionオブジェクトを使用して次の場所にアクセスできますSUM()

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

数える必要があるのは1つだけです。個々の要素が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 に答える