2017-04-21 186 views
-1

我試圖解決的問題是分區問題,我必須將n個權重分爲k個組,每個組的權重應儘可能均勻。VBA - 錯誤2042

我想將一些啓發式的形式應用到我的初始解決方案中,嘗試改進隨機啓動但不斷遇到錯誤。

我的初始解法算法的基礎是;選擇下一個最大的未分類元素,並將其放置在權重最小的組中。注意:我已經將我的元素預先排列爲大小順序。

我已經開始使用下面的代碼;

Sub initialsolution(s() As Integer, n As Integer, k As Integer, w() As Long) 
    Dim i As Long, j As Long, l As long 
    ReDim mass(1 To k) As Long 

    For i = 1 To n 
     j = WorksheetFunction.Min(mass) 
     l = Application.Match(j, mass) 
     mass(l) = mass(l) + w(i) 
    Next i 

End Sub 

其中s()是當前從1空數組到n,我稍後填充,n是權重的數量,k是基的數目,並且w()是排序後的數組權重,在我的審判案例中,n = 8,k = 3,w =(5,4,3,3,2,2,1,1)。

我的問題出現時,我= 6,我正在考慮的重量2.質量有(6,6,5)的值,因此最小質量,j,是5。然而,在下一行,設置形成錯誤的值。當我將l更改爲變體時,它將其值設置爲錯誤2042,當它應該爲3.這會導致錯誤代碼「運行時錯誤'13':類型不匹配」由於錯誤2042無法用作索引。

謝謝你提前

+0

你已經寫了很多關於背景的內容,然後似乎沒有發佈導致錯誤的代碼行...... VBA錯誤往往是相對通用的,所以有一個[可驗證的例子] (https://stackoverflow.com/help/mcve)。嘗試編輯您的問題,使其更容易回答特定的錯誤。 – Wolfie

+0

你是如何傳遞你的論點的? – SJR

+0

這是我的較大部分代碼中的代碼行,它運行子 「initialsolution s,n,k,w」其中所有參數已經預先定義 –

回答

0

我找到了答案。如果我使用

l = Application.Match(j, mass, 0) 

而不是

l = Application.Match(j, mass) 

它的工作原理。我不確定以前的錯誤是什麼,但是這個新方法只考慮它第一次遇到匹配值並返回這個索引。