import random
def DiscreteUniform(n=10, LB=1, UB=99, B=100):
#DiscreteUniform: create random, uniform instance for the bin packing problem
C = 100
S = [0]*n
for i in range(n):
S[i] = random.randint(LB, UB)
return S, C
def FFD(S, C):
remain = [C]
sol = [[]]
for item in sorted(S, reverse=True):#sorted(S, reverse = True)将S由大到小排序
for (b, free) in enumerate(remain):#enumerate列出(索引 值)
if free >= item:
remain[b] -= item
sol[b].append(item)
break
else:
sol.append([item])
remain.append(C-item)
return sol
if __name__=="__main__":
S, C = DiscreteUniform()
print("items:", S)
print("bin size:", C)
sol = FFD(S, C)
print("sol", sol)
运行结果:
items: [26, 40, 14, 70, 34, 53, 15, 43, 38, 10]
bin size: 100
sol [[70, 26], [53, 43], [40, 38, 15], [34, 14, 10]]