我想解决的问题是分区问题,我必须将n个权重分成k组,每组的权重尽可能均匀。
我正在尝试将某种形式的启发式方法应用到我的初始解决方案中,尝试改进随机启动,但不断遇到错误。
我的初始求解算法的基础是;选择下一个最大的未排序元素并将其放入权重最小的组中。注意:我已将元素按大小顺序预分类。
我已经开始使用以下代码;
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()是权重的排序数组,in我的审判案例,n = 8,k = 3,w =(5,4,3,3,2,2,1,1)。
我的问题出现在i = 6且我正在考虑权重2.质量的值为(6,6,5),因此质量的最小值j为5.但是在下一行中,设置a形成错误的值。当我将l更改为变量时,它将其值设置为Error 2042,当它应为3.这会导致错误代码“运行时错误'13':类型不匹配”由于错误2042无法用作索引。
提前谢谢
答案 0 :(得分:0)
我找到了答案。如果我使用
l = Application.Match(j, mass, 0)
而不是
l = Application.Match(j, mass)
有效。我不确定之前的错误是什么,但是这个新方法只考虑第一次遇到匹配值并返回此索引。