我正在使用我现在正在研究的分支定界算法来解决背包问题。在算法中,我想开始选择密度(值/重量)最高的项目。我创建了一个名为“密度”的列表并进行了必要的计算。我每次都需要从该列表中选择最大值。但是每次我尝试时,订单都会变得混乱。我需要更新变量“a”,因为每次我删除一个项目时,列表都会变小。但是不知道怎么更新。我需要帮助以正确的顺序选择项目。
重量、价值、密度是列表。capacity 和 room 是问题中给出的整数值。这是密度列表。
我想要的是,获取此列表中最大项目的索引。然后,从“容量”中减去它的“重量”,以找出还剩下多少“空间”。并将“价值”添加到“最高”,以便达到最高价值可以添加到背包中。在我为第一个项目执行此操作后,然后对其进行迭代,直到没有或只剩下很少的空间。
def branch_n_bound(value,weight,capacity):
global highest,size
size=0
room=capacity
density = [0] * len(items)
highest = 0
for i in range(n):
density[i] = val[i] / weight[i]
for i in range(n):
a=density.index(max(density))
if weight[a]<=room:
room-=weight[a]
highest+=value[a]
size+=weight[a]
taken[a]=1
del density[a], weight[a], value[a]
else:
break