Source code for needlestack.balancers.greedy

from needlestack.balancers import Algorithm


[docs]class GreedyAlgorithm(Algorithm): """Greedy algorithm that places the largest item in the lightest knapsack, then repeat until all items are placed somewhere."""
[docs] def add(self, items, knapsacks): items = sorted(items, key=lambda x: x.weight, reverse=True) num_knapsacks = len(knapsacks) for item in items: knapsacks = sorted( knapsacks, key=lambda x: (x.current_weight, len(x.items)) ) quantity = ( item.quantity if item.quantity <= num_knapsacks else num_knapsacks ) for i in range(quantity): knapsacks[i].add_item(item)