背包问题在Excel VBA
下面我们就来看看在Excel VBA程序,解决了一个背包问题的一个小实例。
定义:给定一组项目,每一个重量和价值,确定项目的集合中,包括使总价值尽可能大和总重量小于给定限制。
它的名字源于谁是一个固定大小的背包约束,必须以最有用的物品填充它面对别人的问题。
例如:5个项目配重块,值和限制给出。
在Excel这个问题看起来如下:
1.首先,我们声明Double类型的五个变量与名称限制,重量,价值,总权重和maximumValue。
Dim limit As Double, weight As Double, value As Double, totalWeight As Double, maximumValue As Double
2.接下来,我们声明Integer类型的五个变量与名称I,J,K,L,M。
Dim i, j, k, l, m As Integer
3.我们初始化两个变量。我们初始化变量极限与细胞D6的价值。我们初始化变量maximumValue值为0
limit = Range("D6").value maximumValue = 0
4.接下来,我们检查每一个可能的解决方案。我们既可以包括(1)项或离开它(0)。我们开始5对于下一步循环。其中每个项目。
For i = 0 To 1 For j = 0 To 1 For k = 0 To 1 For l = 0 To 1 For m = 0 To 1
5.我们计算权重和一个可能的解决方案的值。
weight = 12 i + 2 j + 1 k + 1 l + 4 m value = 4 i + 2 j + 2 k + 1 l + 10 m
6.只有当值大于maximumValue更高,重量比下限,我们已经找到了一个新的更好的解决方案。
If value > maximumValue And weight <= limit Then
7.如果为真,我们写的新的解决方案,以第4行,体重总权重和价值maximumValue。
Range("B4").value = i Range("C4").value = j Range("D4").value = k Range("E4").value = l Range("F4").value = m totalWeight = weight maximumValue = value
8.不要忘记关闭If语句。
End If
9.不要忘记关闭5对于下一个循环。
Next m Next l Next k Next j Next i
Excel中VBA检查每一个可能的解决方案这样的,其结果是最佳的解决方案将出现在第4行记住,1分意味着我们包括我们离开它的项目,0手段。
10.最后,写的最优解的总权重和maximumValue分别细胞B6和B8。
Range("B6").value = totalWeight Range("B8").value = maximumValue
11.测试程序。
结果:
结论:它的最佳包括的最后四个项目与15。此溶液用2 + 1 + 1 + 4 = 8不超过15的极限
总重量的最大值注:通过使权重和值变量就可以解决这个尺寸的任何背包问题(见下载Excel文件)。